mirror of
https://github.com/geekfrog/PermissionsTime.git
synced 2025-09-06 02:56:58 +00:00
插件基本功能完成
This commit is contained in:
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user