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-13 07:17:41 +08:00
parent 193f0a7dc4
commit e0e3ce448c
13 changed files with 347 additions and 79 deletions

View File

@ -6,7 +6,6 @@ import java.util.logging.Logger;
import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.bukkit.plugin.RegisteredServiceProvider;
import org.bukkit.plugin.java.JavaPlugin;
import org.mcstats.Metrics;
@ -94,6 +93,10 @@ public class PluginMain extends JavaPlugin {
return sm;
}
public Permission getPermission() {
return permission;
}
private boolean checkPluginDepends() {
boolean needDepend = false;
for (String name : DEPEND_PLUGIN.split(",")) {
@ -141,14 +144,18 @@ public class PluginMain extends JavaPlugin {
}
public UUID getPlayerUUIDByName(String name) {
for (Player p : getServer().getOnlinePlayers()) {
if (p.getName().equals(name)) {
return p.getUniqueId();
}
OfflinePlayer p = getOfflinePlayer(name);
if (p == null) {
return null;
} else {
return p.getUniqueId();
}
}
public OfflinePlayer getOfflinePlayer(String name) {
for (OfflinePlayer p : getServer().getOfflinePlayers()) {
if (p.getName().equals(name)) {
return p.getUniqueId();
if (p.getName().equalsIgnoreCase(name)) {
return p;
}
}
return null;

View File

@ -2,6 +2,7 @@ package gg.frog.mc.permissionstime.command;
import java.util.UUID;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
import gg.frog.mc.permissionstime.PluginMain;
@ -11,44 +12,58 @@ import gg.frog.mc.permissionstime.database.SqlManager;
import gg.frog.mc.permissionstime.model.cfg.PermissionPackageBean;
import gg.frog.mc.permissionstime.utils.StrUtil;
public class GiveCmd {
public class GiveCmd implements Runnable {
private PluginMain pm;
private SqlManager sm;
private String[] args;
private CommandSender sender;
public GiveCmd(PluginMain pm) {
public GiveCmd(PluginMain pm, CommandSender sender, String[] args) {
this.pm = pm;
this.sm = pm.getSqlManager();
this.sender = sender;
this.args = args;
}
public boolean onCommand(CommandSender sender, boolean isPlayer, String[] args) {
@Override
public void run() {
if (args.length == 4) {
String playerName = args[1];
String packageName = args[2];
String time = args[3];
int days;
int days = 0;
try {
days = Integer.parseInt(time);
if (days <= 0) {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "时间参数不正确,请输入正整数"));
return false;
return;
}
} catch (Exception e) {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "时间参数不正确,请输入正整数"));
return false;
return;
}
PermissionPackageBean pack = PackagesCfg.PACKAGES.get(packageName);
if (pack != null) {
UUID uuid = pm.getPlayerUUIDByName(playerName);
if (uuid != null) {
OfflinePlayer player = pm.getOfflinePlayer(playerName);
if (player != null) {
UUID uuid = player.getUniqueId();
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 (player.isOnline()) {
for (String groupName : pack.getGroups()) {
if (!pm.getPermission().playerAddGroup(null, player, groupName)) {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "权限组{0}添加失败", groupName));
}
}
}
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "给予玩家 {0} {1}天的 {2}", playerName, time, pack.getDisplayName()));
} else {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "未给予玩家 {0} {1}天的 {2}", playerName, time, pack.getDisplayName()));
}
} else {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "找不到名为''{0}''的玩家", playerName));
}
@ -58,6 +73,5 @@ public class GiveCmd {
} else {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "参数不正确"));
}
return false;
}
}

View File

@ -15,14 +15,10 @@ public class MainCommand implements CommandExecutor {
private PluginMain pm;
private SqlManager sm;
private GiveCmd giveCmd;
private PackagesCmd packagesCmd;
public MainCommand(PluginMain pm) {
this.pm = pm;
this.sm = pm.getSqlManager();
giveCmd = new GiveCmd(pm);
packagesCmd = new PackagesCmd(pm);
}
@Override
@ -59,28 +55,38 @@ public class MainCommand implements CommandExecutor {
return true;
} else if (args[0].equalsIgnoreCase("me")) {
if (hasPermission(sender, isPlayer, "permissionstime.me")) {
return giveCmd.onCommand(sender, isPlayer, args);
GiveCmd giveCmd = new GiveCmd(pm, sender, args);
new Thread(giveCmd).start();
}
} else if (args[0].equalsIgnoreCase("give")) {
if (hasPermission(sender, isPlayer, "permissionstime.give")) {
return giveCmd.onCommand(sender, isPlayer, args);
GiveCmd giveCmd = new GiveCmd(pm, sender, args);
new Thread(giveCmd).start();
}
} else if (args[0].equalsIgnoreCase("set")) {
if (hasPermission(sender, isPlayer, "permissionstime.set")) {
return giveCmd.onCommand(sender, isPlayer, args);
SetCmd setCmd = new SetCmd(pm, sender, args);
new Thread(setCmd).start();
}
} else if (args[0].equalsIgnoreCase("remove")) {
if (hasPermission(sender, isPlayer, "permissionstime.remove")) {
return giveCmd.onCommand(sender, isPlayer, args);
RemoveCmd removeCmd = new RemoveCmd(pm, sender, args);
new Thread(removeCmd).start();
}
} else if (args[0].equalsIgnoreCase("removeall")) {
if (hasPermission(sender, isPlayer, "permissionstime.removeall")) {
RemoveAllCmd removeAllCmd = new RemoveAllCmd(pm, sender, args);
new Thread(removeAllCmd).start();
}
} else if (args[0].equalsIgnoreCase("packages")) {
if (hasPermission(sender, isPlayer, "permissionstime.packages")) {
return packagesCmd.onCommand(sender, isPlayer, args);
PackagesCmd packagesCmd = new PackagesCmd(pm, sender, args);
new Thread(packagesCmd).start();
}
} else {
getHelp(sender, isPlayer);
return true;
}
return true;
}
}
return false;
@ -88,8 +94,11 @@ public class MainCommand implements CommandExecutor {
private void getHelp(CommandSender sender, boolean isPlayer) {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "&a===== " + pm.PLUGIN_NAME + " Version:" + pm.PLUGIN_VERSION + " ====="));
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."));
if (!isPlayer || sender.isOp() || sender.hasPermission(pm.PLUGIN_NAME_LOWER_CASE + ".me")) {
sender.sendMessage(StrUtil.messageFormat("/" + pm.PLUGIN_NAME_LOWER_CASE + " .me \n - View self package."));
}
if (!isPlayer || sender.isOp() || sender.hasPermission(pm.PLUGIN_NAME_LOWER_CASE + ".packages")) {
sender.sendMessage(StrUtil.messageFormat("/" + pm.PLUGIN_NAME_LOWER_CASE + " packages [packageName] \n - View packages."));
}
if (!isPlayer || sender.isOp() || sender.hasPermission(pm.PLUGIN_NAME_LOWER_CASE + ".give")) {
sender.sendMessage(StrUtil.messageFormat("/" + pm.PLUGIN_NAME_LOWER_CASE + " give <playerName> <packageName> <time> \n - Give player package <time>day."));
@ -100,8 +109,11 @@ public class MainCommand implements CommandExecutor {
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."));
}
if (!isPlayer || sender.isOp() || sender.hasPermission(pm.PLUGIN_NAME_LOWER_CASE + ".packages")) {
sender.sendMessage(StrUtil.messageFormat("/" + pm.PLUGIN_NAME_LOWER_CASE + " packages [packageName] \n - View packages."));
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."));
}
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."));
}
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX));
}

View File

@ -10,15 +10,20 @@ import gg.frog.mc.permissionstime.config.PluginCfg;
import gg.frog.mc.permissionstime.model.cfg.PermissionPackageBean;
import gg.frog.mc.permissionstime.utils.StrUtil;
public class PackagesCmd {
public class PackagesCmd implements Runnable {
private PluginMain pm;
private CommandSender sender;
private String[] args;
public PackagesCmd(PluginMain pm) {
public PackagesCmd(PluginMain pm, CommandSender sender, String[] args) {
this.pm = pm;
this.sender = sender;
this.args = args;
}
public boolean onCommand(CommandSender sender, boolean isPlayer, String[] args) {
@Override
public void run() {
if (args.length == 1) {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "共有{0}种权限包", PackagesCfg.PACKAGES.size()));
for (Entry<String, PermissionPackageBean> e : PackagesCfg.PACKAGES.entrySet()) {
@ -34,6 +39,5 @@ public class PackagesCmd {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "找不到名为''{0}''的权限包", packageName));
}
}
return true;
}
}

View File

@ -0,0 +1,48 @@
package gg.frog.mc.permissionstime.command;
import java.util.UUID;
import org.bukkit.command.CommandSender;
import gg.frog.mc.permissionstime.PluginMain;
import gg.frog.mc.permissionstime.config.PluginCfg;
import gg.frog.mc.permissionstime.database.SqlManager;
import gg.frog.mc.permissionstime.utils.StrUtil;
public class RemoveAllCmd implements Runnable {
private PluginMain pm;
private SqlManager sm;
private String[] args;
private CommandSender sender;
public RemoveAllCmd(PluginMain pm, CommandSender sender, String[] args) {
this.pm = pm;
this.sm = pm.getSqlManager();
this.sender = sender;
this.args = args;
}
@Override
public void run() {
if (args.length == 2) {
String playerName = args[1];
UUID uuid = pm.getPlayerUUIDByName(playerName);
if (uuid != null) {
if (PluginCfg.IS_DEBUG) {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + uuid.toString()));
}
if (sm.removeAllTime(uuid.toString())) {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "删除玩家 {0} 的所有权限包", playerName));
} else {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "未删除玩家 {0} 的所有权限包", playerName));
}
} else {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "找不到名为''{0}''的玩家", playerName));
}
} else {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "参数不正确"));
}
}
}

View File

@ -0,0 +1,55 @@
package gg.frog.mc.permissionstime.command;
import java.util.UUID;
import org.bukkit.command.CommandSender;
import gg.frog.mc.permissionstime.PluginMain;
import gg.frog.mc.permissionstime.config.PackagesCfg;
import gg.frog.mc.permissionstime.config.PluginCfg;
import gg.frog.mc.permissionstime.database.SqlManager;
import gg.frog.mc.permissionstime.model.cfg.PermissionPackageBean;
import gg.frog.mc.permissionstime.utils.StrUtil;
public class RemoveCmd implements Runnable {
private PluginMain pm;
private SqlManager sm;
private String[] args;
private CommandSender sender;
public RemoveCmd(PluginMain pm, CommandSender sender, String[] args) {
this.pm = pm;
this.sm = pm.getSqlManager();
this.sender = sender;
this.args = args;
}
@Override
public void run() {
if (args.length == 3) {
String playerName = args[1];
String packageName = args[2];
PermissionPackageBean pack = PackagesCfg.PACKAGES.get(packageName);
if (pack != null) {
UUID uuid = pm.getPlayerUUIDByName(playerName);
if (uuid != null) {
if (PluginCfg.IS_DEBUG) {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + uuid.toString() + "\n" + pack.toString()));
}
if (sm.removeTime(uuid.toString(), packageName)) {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "删除玩家 {0} 的 {1}", playerName, pack.getDisplayName()));
} else {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "未删除玩家 {0} 的 {1}", playerName, pack.getDisplayName()));
}
} else {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "找不到名为''{0}''的玩家", playerName));
}
} else {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "找不到名为''{0}''的权限包", packageName));
}
} else {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "参数不正确"));
}
}
}

View File

@ -0,0 +1,67 @@
package gg.frog.mc.permissionstime.command;
import java.util.UUID;
import org.bukkit.command.CommandSender;
import gg.frog.mc.permissionstime.PluginMain;
import gg.frog.mc.permissionstime.config.PackagesCfg;
import gg.frog.mc.permissionstime.config.PluginCfg;
import gg.frog.mc.permissionstime.database.SqlManager;
import gg.frog.mc.permissionstime.model.cfg.PermissionPackageBean;
import gg.frog.mc.permissionstime.utils.StrUtil;
public class SetCmd implements Runnable {
private PluginMain pm;
private SqlManager sm;
private String[] args;
private CommandSender sender;
public SetCmd(PluginMain pm, CommandSender sender, String[] args) {
this.pm = pm;
this.sm = pm.getSqlManager();
this.sender = sender;
this.args = args;
}
@Override
public void run() {
if (args.length == 4) {
String playerName = args[1];
String packageName = args[2];
String time = args[3];
int days = 0;
try {
days = Integer.parseInt(time);
if (days <= 0) {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "时间参数不正确,请输入正整数"));
return;
}
} catch (Exception e) {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "时间参数不正确,请输入正整数"));
return;
}
PermissionPackageBean pack = PackagesCfg.PACKAGES.get(packageName);
if (pack != null) {
UUID uuid = pm.getPlayerUUIDByName(playerName);
if (uuid != null) {
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)) {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "设置玩家 {0} {1}天的 {2}", playerName, time, pack.getDisplayName()));
} else {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "未设置玩家 {0} {1}天的 {2}", playerName, time, pack.getDisplayName()));
}
} else {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "找不到名为''{0}''的玩家", playerName));
}
} else {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "找不到名为''{0}''的权限包", packageName));
}
} else {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "参数不正确"));
}
}
}

View File

@ -1,8 +1,8 @@
package gg.frog.mc.permissionstime.config;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
import gg.frog.mc.permissionstime.PluginMain;
import gg.frog.mc.permissionstime.model.cfg.PermissionPackageBean;
@ -12,7 +12,7 @@ public class PackagesCfg extends PluginConfig {
public static String PACKAGES_VERSION = null;
public static String DEFAULT_GROUP = null;
public static Map<String, PermissionPackageBean> PACKAGES = new HashMap<>();
public static Map<String, PermissionPackageBean> PACKAGES = new ConcurrentHashMap<>();
public PackagesCfg(String fileName, PluginMain pm) {
super(fileName, pm);

View File

@ -29,7 +29,7 @@ public interface IPlayerDataService {
* @throws Exception
*/
boolean setPlayerData(PlayerDataBean bean) throws Exception;
boolean setTime(String uuid, String packageName, int days) throws Exception;
boolean addTime(String uuid, String packageName, int days) throws Exception;
/**

View File

@ -57,4 +57,43 @@ public class SqlManager {
}
return false;
}
public boolean setTime(String uuid, String packageName, int days) {
for (int i = 0; i < 3; i++) {
try {
if (pds.setTime(uuid, packageName, days)) {
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
}
return false;
}
public boolean removeTime(String uuid, String packageName) {
for (int i = 0; i < 3; i++) {
try {
if (pds.delPlayData(uuid, packageName)) {
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
}
return false;
}
public boolean removeAllTime(String uuid) {
for (int i = 0; i < 3; i++) {
try {
if (pds.delPlayData(uuid)) {
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
}
return false;
}
}

View File

@ -69,18 +69,31 @@ public class SqlitePlayerDataService extends DatabaseUtil implements IPlayerData
}
@Override
public boolean addTime(String uuid, String packageName, int days) throws Exception {
PlayerDataBean pdb = queryPlayerData(uuid, packageName);
public boolean setTime(String uuid, String packageName, int days) throws Exception {
long now = new Date().getTime();
long addTime = days * 24 * 60 * 60 * 1000L;
long expire = 0L;
long expire = now + addTime;
PlayerDataBean pdb = queryPlayerData(uuid, packageName);
if (pdb == null) {
pdb = new PlayerDataBean(null, uuid, packageName, expire);
return setPlayerData(pdb);
} else {
pdb.setExpire(expire);
return setPlayerData(pdb);
}
}
@Override
public boolean addTime(String uuid, String packageName, int days) throws Exception {
long now = new Date().getTime();
long addTime = days * 24 * 60 * 60 * 1000L;
long expire = now + addTime;
PlayerDataBean pdb = queryPlayerData(uuid, packageName);
if (pdb == null) {
expire = now + addTime;
pdb = new PlayerDataBean(null, uuid, packageName, expire);
return setPlayerData(pdb);
} else {
if (pdb.getExpire() < now) {
expire = now + addTime;
pdb.setExpire(expire);
return setPlayerData(pdb);
} else {