1
1
mirror of https://github.com/geekfrog/PermissionsTime.git synced 2024-11-21 23:08:48 +00:00

插件基本功能完成

This commit is contained in:
GeekFrog 2017-07-15 04:58:10 +08:00
parent 35bcfdc5f8
commit 71b65347d7
13 changed files with 213 additions and 113 deletions

View File

@ -3,13 +3,14 @@
#### 构建地址:[http://ci.frog.gg/jenkins/job/PermissionsTime/](http://ci.frog.gg/jenkins/job/PermissionsTime/)
#### 已知问题:
#### 已知问题(作者提醒):
如果出现问题一般退出服务器重进就能解决。一次不行再来一次。
- 如果权限组有继承关系, 被继承的权限组会被大组覆盖, 大组到期被删除, 小组的权限就没有了, 只能重新登录游戏。
- 服务器关闭时, 插件被禁用的顺序不一, 会导致玩家有权限留存。 如果配置的权限包删掉了原来设置的权限, 会导致插件无法清理原有的权限及权限组。(你可以配置一个不使用的权限包, 权限包内含有你想清理的权限及权限组即可。)
##### 插件进度:
#### 插件进度:
加粗项已完成
@ -20,11 +21,12 @@
- **命令支持给玩家添加、设置、移除、查询自身权限包时间**
- **添加、设置、移除-命令执行失败记录**
- **支持不同世界权限**
- 调用vault API 设置玩家权限 -- 登录时(添加 移除)、游戏中(**命令添加/移除** 延迟移除)、退出时移除
- **调用vault API 设置玩家权限 -- 登录时(添加 移除)、游戏中(命令添加/移除 延迟移除)、退出时移除**
- mysql保存数据
- 支持跨服
- 手动删除过期的或无效数据
- 语言支持整理
- 支持分页?
##### 使用统计:
#### 使用统计:
![image](http://i.mcstats.org/PermissionsTime/Global+Statistics.borderless.png)

View File

@ -15,7 +15,7 @@ import gg.frog.mc.permissionstime.command.MainCommand;
import gg.frog.mc.permissionstime.config.ConfigManager;
import gg.frog.mc.permissionstime.config.PluginCfg;
import gg.frog.mc.permissionstime.database.SqlManager;
import gg.frog.mc.permissionstime.listener.TheListener;
import gg.frog.mc.permissionstime.listener.MainListener;
import gg.frog.mc.permissionstime.utils.FileUtil;
import gg.frog.mc.permissionstime.utils.StrUtil;
import net.milkbowl.vault.permission.Permission;
@ -76,7 +76,7 @@ public class PluginMain extends JavaPlugin {
* 这里可以注册多个
*/
private void registerListeners() {
pm.getServer().getPluginManager().registerEvents(new TheListener(pm), pm);
pm.getServer().getPluginManager().registerEvents(new MainListener(pm), pm);
}
/**
@ -84,7 +84,13 @@ public class PluginMain extends JavaPlugin {
* 这里可以注册多个一般注册一个就够用
*/
private void registerCommands() {
pm.getCommand(PLUGIN_NAME_LOWER_CASE).setExecutor(new MainCommand(pm));
MainCommand mcmd = new MainCommand(pm);
if (getDescription().getCommands().containsKey(PLUGIN_NAME_LOWER_CASE)) {
getCommand(PLUGIN_NAME_LOWER_CASE).setExecutor(mcmd);
}
if (getDescription().getCommands().containsKey("pt")) {
getCommand("pt").setExecutor(mcmd);
}
}
public ConfigManager getConfigManager() {

View File

@ -1,5 +1,6 @@
package gg.frog.mc.permissionstime.command;
import java.util.List;
import java.util.UUID;
import org.bukkit.OfflinePlayer;
@ -11,6 +12,7 @@ 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.model.db.PlayerDataBean;
import gg.frog.mc.permissionstime.utils.StrUtil;
public class GiveCmd implements Runnable {
@ -55,16 +57,15 @@ public class GiveCmd implements Runnable {
}
if (sm.giveTime(uuid.toString(), packageName, days)) {
if (player.isOnline()) {
pm.getServer().getScheduler().runTask(pm, new Runnable() {
@Override
public void run() {
pack.givePlayer(player, sender, pm.getPermission());
}
});
Player p = pm.getServer().getPlayer(uuid);
if (p != null) {
p.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "{0}给予你 {1}天的 {2}", sender.getName(), time, pack.getDisplayName()));
Player p = player.getPlayer();
try {
List<PlayerDataBean> pdbList = sm.getTime(player.getUniqueId().toString());
PermissionPackageBean.reloadPlayerPermissions(player, pdbList, pm);
} catch (Exception e) {
e.printStackTrace();
p.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "修改权限失败, 请重新进入服务器!"));
}
p.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "{0}给予你 {1}天的 {2}", sender.getName(), time, pack.getDisplayName()));
}
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "给予玩家 {0} {1}天的 {2}", playerName, time, pack.getDisplayName()));
} else {

View File

@ -23,7 +23,7 @@ public class MainCommand implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command command, String commandLabel, String[] args) {
if (commandLabel.equalsIgnoreCase(pm.PLUGIN_NAME_LOWER_CASE)) {
if (commandLabel.equalsIgnoreCase(pm.PLUGIN_NAME_LOWER_CASE) || commandLabel.equalsIgnoreCase("pt")) {
boolean isPlayer = false;
if (sender instanceof Player) {
isPlayer = true;
@ -94,7 +94,7 @@ 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 + " ====="));
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "&a===== " + pm.PLUGIN_NAME + " Version:" + pm.PLUGIN_VERSION + (pm.getDescription().getCommands().containsKey("pt") ? " Aliases:/pt" : "") + " ====="));
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."));
}

View File

@ -8,7 +8,6 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
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;
@ -40,23 +39,17 @@ public class RemoveAllCmd implements Runnable {
if (PluginCfg.IS_DEBUG) {
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + uuid.toString()));
}
List<PlayerDataBean> pdbList = sm.getTime(uuid.toString());
if (sm.removeAllTime(uuid.toString())) {
if (player.isOnline() && pdbList.size() > 0) {
pm.getServer().getScheduler().runTask(pm, new Runnable() {
@Override
public void run() {
for (PlayerDataBean pdb : pdbList) {
String packageName = pdb.getPackageName();
PermissionPackageBean pack = PackagesCfg.PACKAGES.get(packageName);
pack.clearPlayer(player, sender, pm.getPermission());
}
}
});
Player p = pm.getServer().getPlayer(uuid);
if (p != null) {
p.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "{0}删除了你的所有权限包", sender.getName()));
if (player.isOnline()) {
Player p = player.getPlayer();
try {
List<PlayerDataBean> pdbList = sm.getTime(player.getUniqueId().toString());
PermissionPackageBean.reloadPlayerPermissions(player, pdbList, pm);
} catch (Exception e) {
e.printStackTrace();
p.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "修改权限失败, 请重新进入服务器!"));
}
p.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "{0}删除了你的所有权限包", sender.getName()));
}
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "删除玩家 {0} 的所有权限包", playerName));
} else {

View File

@ -1,5 +1,6 @@
package gg.frog.mc.permissionstime.command;
import java.util.List;
import java.util.UUID;
import org.bukkit.OfflinePlayer;
@ -11,6 +12,7 @@ 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.model.db.PlayerDataBean;
import gg.frog.mc.permissionstime.utils.StrUtil;
public class RemoveCmd implements Runnable {
@ -43,16 +45,15 @@ public class RemoveCmd implements Runnable {
}
if (sm.removeTime(uuid.toString(), packageName)) {
if (player.isOnline()) {
pm.getServer().getScheduler().runTask(pm, new Runnable() {
@Override
public void run() {
pack.clearPlayer(player, sender, pm.getPermission());
}
});
Player p = pm.getServer().getPlayer(uuid);
if (p != null) {
p.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "{0}删除了你的 {1}权限包", sender.getName(), pack.getDisplayName()));
Player p = player.getPlayer();
try {
List<PlayerDataBean> pdbList = sm.getTime(player.getUniqueId().toString());
PermissionPackageBean.reloadPlayerPermissions(player, pdbList, pm);
} catch (Exception e) {
e.printStackTrace();
p.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "修改权限失败, 请重新进入服务器!"));
}
p.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "{0}删除了你的 {1}权限包", sender.getName(), pack.getDisplayName()));
}
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "删除玩家 {0} 的 {1}", playerName, pack.getDisplayName()));
} else {

View File

@ -1,5 +1,6 @@
package gg.frog.mc.permissionstime.command;
import java.util.List;
import java.util.UUID;
import org.bukkit.OfflinePlayer;
@ -11,6 +12,7 @@ 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.model.db.PlayerDataBean;
import gg.frog.mc.permissionstime.utils.StrUtil;
public class SetCmd implements Runnable {
@ -55,16 +57,15 @@ public class SetCmd implements Runnable {
}
if (sm.setTime(uuid.toString(), packageName, days)) {
if (player.isOnline()) {
pm.getServer().getScheduler().runTask(pm, new Runnable() {
@Override
public void run() {
pack.givePlayer(player, sender, pm.getPermission());
}
});
Player p = pm.getServer().getPlayer(uuid);
if (p != null) {
p.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "{0}设置你 {1}天的 {2}", sender.getName(), time, pack.getDisplayName()));
Player p = player.getPlayer();
try {
List<PlayerDataBean> pdbList = sm.getTime(player.getUniqueId().toString());
PermissionPackageBean.reloadPlayerPermissions(player, pdbList, pm);
} catch (Exception e) {
e.printStackTrace();
p.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "修改权限失败, 请重新进入服务器!"));
}
p.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "{0}设置你 {1}天的 {2}", sender.getName(), time, pack.getDisplayName()));
}
sender.sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "设置玩家 {0} {1}天的 {2}", playerName, time, pack.getDisplayName()));
} else {

View File

@ -1,7 +1,10 @@
package gg.frog.mc.permissionstime.config;
import java.util.Collections;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import gg.frog.mc.permissionstime.PluginMain;
@ -13,6 +16,8 @@ public class PackagesCfg extends PluginConfig {
public static String PACKAGES_VERSION = null;
public static String DEFAULT_GROUP = null;
public static Map<String, PermissionPackageBean> PACKAGES = new ConcurrentHashMap<>();
public static Set<String> allPermissions = Collections.synchronizedSet(new HashSet<String>());
public static Set<String> allGroups = Collections.synchronizedSet(new HashSet<String>());
public PackagesCfg(String fileName, PluginMain pm) {
super(fileName, pm);
@ -34,6 +39,9 @@ public class PackagesCfg extends PluginConfig {
System.out.println(p.getKey() + ":" + p.getValue());
}
}
for (PermissionPackageBean p : PACKAGES.values()) {
allPermissions.addAll(p.getPermissions());
allGroups.addAll(p.getGroups());
}
}
}

View File

@ -17,6 +17,9 @@ public class SqlitePlayerDataService extends DatabaseUtil implements IPlayerData
private PluginMain pm;
// private static long TIME_UNIT = 24 * 60 * 60 * 1000L;//一天
private static long TIME_UNIT = 2 * 60 * 1000L;
public SqlitePlayerDataService(PluginMain pm, SqlManager sm) {
super(sm);
this.pm = pm;
@ -71,7 +74,7 @@ public class SqlitePlayerDataService extends DatabaseUtil implements IPlayerData
@Override
public boolean setTime(String uuid, String packageName, int days) throws Exception {
long now = new Date().getTime();
long addTime = days * 24 * 60 * 60 * 1000L;
long addTime = days * TIME_UNIT;
long expire = now + addTime;
PlayerDataBean pdb = queryPlayerData(uuid, packageName);
if (pdb == null) {
@ -86,7 +89,7 @@ public class SqlitePlayerDataService extends DatabaseUtil implements IPlayerData
@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 addTime = days * TIME_UNIT;
long expire = now + addTime;
PlayerDataBean pdb = queryPlayerData(uuid, packageName);
if (pdb == null) {

View File

@ -0,0 +1,73 @@
package gg.frog.mc.permissionstime.listener;
import java.util.List;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerKickEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import gg.frog.mc.permissionstime.PluginMain;
import gg.frog.mc.permissionstime.config.PluginCfg;
import gg.frog.mc.permissionstime.model.cfg.PermissionPackageBean;
import gg.frog.mc.permissionstime.model.db.PlayerDataBean;
import gg.frog.mc.permissionstime.utils.StrUtil;
public class MainListener implements Listener {
private PluginMain pm;
public MainListener(PluginMain pm) {
this.pm = pm;
}
/**
* 一个监听器例子
*
* @param e
*/
@EventHandler
public void onJoin(PlayerJoinEvent event) {
new Thread(new Runnable() {
@Override
public void run() {
try {
List<PlayerDataBean> pdbList = pm.getSqlManager().getTime(event.getPlayer().getUniqueId().toString());
PermissionPackageBean.reloadPlayerPermissions(event.getPlayer(), pdbList, pm);
} catch (Exception e) {
e.printStackTrace();
event.getPlayer().sendMessage(StrUtil.messageFormat(PluginCfg.PLUGIN_PREFIX + "修改权限失败, 请重新进入服务器!"));
}
}
}).start();
}
@EventHandler
public void onQuit(PlayerQuitEvent event) {
new Thread(new Runnable() {
@Override
public void run() {
try {
PermissionPackageBean.delPlayerAllPermissions(event.getPlayer(), pm);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
@EventHandler
public void onKick(PlayerKickEvent event) {
new Thread(new Runnable() {
@Override
public void run() {
try {
PermissionPackageBean.delPlayerAllPermissions(event.getPlayer(), pm);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
}

View File

@ -1,39 +0,0 @@
package gg.frog.mc.permissionstime.listener;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerKickEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import gg.frog.mc.permissionstime.PluginMain;
public class TheListener implements Listener {
private PluginMain pm;
public TheListener(PluginMain pm) {
this.pm = pm;
}
/**
* 一个监听器例子
*
* @param e
*/
@EventHandler
public void onJoin(PlayerJoinEvent e) {
pm.getServer().broadcastMessage("[" + e.getPlayer().getName() + "]进入了服务器!");
e.setJoinMessage("[" + e.getPlayer().getName() + "]进入了服务器!");
}
@EventHandler
public void onQuit(PlayerQuitEvent e) {
pm.getServer().broadcastMessage("[" + e.getPlayer().getName() + "]退出了服务器!");
}
@EventHandler
public void onKick(PlayerKickEvent e) {
pm.getServer().broadcastMessage("[" + e.getPlayer().getName() + "]被踢出了服务器!");
}
}

View File

@ -1,14 +1,21 @@
package gg.frog.mc.permissionstime.model.cfg;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.bukkit.OfflinePlayer;
import org.bukkit.Server;
import org.bukkit.World;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.MemorySection;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.scheduler.BukkitTask;
import gg.frog.mc.permissionstime.PluginMain;
import gg.frog.mc.permissionstime.config.PackagesCfg;
import gg.frog.mc.permissionstime.model.db.PlayerDataBean;
import gg.frog.mc.permissionstime.utils.config.IConfigBean;
import net.milkbowl.vault.permission.Permission;
@ -21,10 +28,10 @@ import net.milkbowl.vault.permission.Permission;
public class PermissionPackageBean implements IConfigBean {
private String displayName = null;
private Integer days = null;
private Boolean global = null;
private List<String> permissions = new ArrayList<>();
private List<String> groups = new ArrayList<>();
private static Map<String, BukkitTask> taskMap = new ConcurrentHashMap<>();
public String getDisplayName() {
return displayName;
@ -34,14 +41,6 @@ public class PermissionPackageBean implements IConfigBean {
this.displayName = displayName;
}
public Integer getDays() {
return days;
}
public void setDays(Integer days) {
this.days = days;
}
public Boolean getGlobal() {
return global;
}
@ -70,7 +69,6 @@ public class PermissionPackageBean implements IConfigBean {
public YamlConfiguration toConfig() {
YamlConfiguration config = new YamlConfiguration();
config.set("displayName", displayName);
config.set("days", days);
config.set("global", global);
config.set("permissions", permissions);
config.set("groups", groups);
@ -83,7 +81,6 @@ public class PermissionPackageBean implements IConfigBean {
if (displayName == null) {
displayName = "No Name";
}
days = config.getInt("days");
global = config.getBoolean("global");
permissions = config.getStringList("permissions");
groups = config.getStringList("groups");
@ -91,11 +88,11 @@ public class PermissionPackageBean implements IConfigBean {
@Override
public String toString() {
return "PermissionPackageBean [displayName=" + displayName + ", days=" + days + ", global=" + global + ", permissions=" + permissions + ", groups=" + groups + "]";
return "PermissionPackageBean [displayName=" + displayName + ", global=" + global + ", permissions=" + permissions + ", groups=" + groups + "]";
}
public void givePlayer(OfflinePlayer player, CommandSender sender, Permission permission) {
List<World> worlds = sender.getServer().getWorlds();
private void givePlayer(OfflinePlayer player, Server server, Permission permission) {
List<World> worlds = server.getWorlds();
for (String pem : permissions) {
String[] args = pem.split(":");
pem = args[0];
@ -128,20 +125,20 @@ public class PermissionPackageBean implements IConfigBean {
}
}
public void clearPlayer(OfflinePlayer player, CommandSender sender, Permission permission) {
List<World> worlds = sender.getServer().getWorlds();
private void clearPlayer(OfflinePlayer player, Server server, Permission permission) {
List<World> worlds = server.getWorlds();
for (String pem : permissions) {
String[] args = pem.split(":");
pem = args[0];
if (args.length > 1) {
for (int i = 1; i < args.length; i++) {
String worldName = args[i];
permission.playerAdd(worldName, player, pem);
permission.playerRemove(worldName, player, pem);
}
} else {
for (World world : worlds) {
String worldName = world.getName();
permission.playerAdd(worldName, player, pem);
permission.playerRemove(worldName, player, pem);
}
}
}
@ -162,4 +159,55 @@ public class PermissionPackageBean implements IConfigBean {
}
}
public static void reloadPlayerPermissions(OfflinePlayer player, List<PlayerDataBean> pdbList, PluginMain plugin) {
long delay = -1;
long now = new Date().getTime();
PermissionPackageBean addPpb = new PermissionPackageBean();
PermissionPackageBean subPpb = new PermissionPackageBean();
subPpb.getPermissions().addAll(PackagesCfg.allPermissions);
subPpb.getGroups().addAll(PackagesCfg.allGroups);
for (PlayerDataBean pdb : pdbList) {
long leftTime = pdb.getExpire() - now;
if (leftTime > 0) {
if (delay == -1) {
delay = leftTime;
} else if (delay > leftTime) {
delay = leftTime;
}
}
PermissionPackageBean p = PackagesCfg.PACKAGES.get(pdb.getPackageName());
addPpb.getPermissions().addAll(p.getPermissions());
subPpb.getPermissions().removeAll(p.getPermissions());
addPpb.getGroups().addAll(p.getGroups());
subPpb.getGroups().removeAll(p.getGroups());
}
addPpb.givePlayer(player, plugin.getServer(), plugin.getPermission());
subPpb.clearPlayer(player, plugin.getServer(), plugin.getPermission());
BukkitTask task = taskMap.get(player.getUniqueId().toString());
if (task != null) {
plugin.getServer().getScheduler().cancelTask(task.getTaskId());
}
if (pdbList.size() > 0) {
delay = (delay / 1000 + 1) * 20;// 1秒=20ticks
task = plugin.getServer().getScheduler().runTaskLaterAsynchronously(plugin, new Runnable() {
@Override
public void run() {
List<PlayerDataBean> tpdbList = plugin.getSqlManager().getTime(player.getUniqueId().toString());
reloadPlayerPermissions(player, tpdbList, plugin);
}
}, delay);
taskMap.put(player.getUniqueId().toString(), task);
}
}
public static void delPlayerAllPermissions(OfflinePlayer player, PluginMain plugin) throws Exception {
PermissionPackageBean subPpb = new PermissionPackageBean();
subPpb.getPermissions().addAll(PackagesCfg.allPermissions);
subPpb.getGroups().addAll(PackagesCfg.allGroups);
subPpb.clearPlayer(player, plugin.getServer(), plugin.getPermission());
BukkitTask task = taskMap.get(player.getUniqueId().toString());
if (task != null) {
plugin.getServer().getScheduler().cancelTask(task.getTaskId());
}
}
}

View File

@ -9,6 +9,9 @@ commands:
permissionstime:
description: Show all commands.
usage: /permissionstime [param]
pt:
description: Aliases commands for permissionstime.
usage: /pt [param]
permissions:
permissionstime.*:
description: Gives access to all PermissionsTime commands.