Refactor plugin and scheduler interfaces

This commit is contained in:
Luck
2017-01-31 12:14:32 +00:00
Unverified
parent 1efce41767
commit 0be6d658ed
172 changed files with 673 additions and 509 deletions
@@ -23,9 +23,9 @@
package me.lucko.luckperms.bukkit;
import me.lucko.luckperms.bukkit.compat.MessageHandler;
import me.lucko.luckperms.common.LuckPermsPlugin;
import me.lucko.luckperms.common.commands.sender.SenderFactory;
import me.lucko.luckperms.common.constants.Constants;
import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@@ -39,14 +39,13 @@ import me.lucko.luckperms.bukkit.model.ChildPermissionProvider;
import me.lucko.luckperms.bukkit.model.DefaultsProvider;
import me.lucko.luckperms.bukkit.model.LPPermissible;
import me.lucko.luckperms.bukkit.vault.VaultHook;
import me.lucko.luckperms.common.LuckPermsPlugin;
import me.lucko.luckperms.common.api.ApiHandler;
import me.lucko.luckperms.common.api.ApiProvider;
import me.lucko.luckperms.common.caching.handlers.CachedStateManager;
import me.lucko.luckperms.common.calculators.CalculatorFactory;
import me.lucko.luckperms.common.commands.sender.Sender;
import me.lucko.luckperms.common.config.ConfigKeys;
import me.lucko.luckperms.common.config.LPConfiguration;
import me.lucko.luckperms.common.config.LuckPermsConfiguration;
import me.lucko.luckperms.common.constants.Permission;
import me.lucko.luckperms.common.contexts.ContextManager;
import me.lucko.luckperms.common.contexts.ServerCalculator;
@@ -66,6 +65,7 @@ import me.lucko.luckperms.common.managers.impl.GenericTrackManager;
import me.lucko.luckperms.common.managers.impl.GenericUserManager;
import me.lucko.luckperms.common.messaging.InternalMessagingService;
import me.lucko.luckperms.common.messaging.RedisMessaging;
import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
import me.lucko.luckperms.common.storage.Storage;
import me.lucko.luckperms.common.storage.StorageFactory;
import me.lucko.luckperms.common.storage.StorageType;
@@ -88,7 +88,6 @@ import org.bukkit.plugin.java.JavaPlugin;
import java.io.File;
import java.io.InputStream;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
@@ -97,22 +96,14 @@ import java.util.Optional;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@Getter
public class LPBukkitPlugin extends JavaPlugin implements LuckPermsPlugin {
private Set<UUID> ignoringLogs;
private Set<Runnable> shutdownHooks;
private Executor syncExecutor;
private Executor asyncExecutor;
private Executor asyncBukkitExecutor;
private ExecutorService asyncLpExecutor;
private LPBukkitScheduler scheduler;
private VaultHook vaultHook = null;
private LPConfiguration configuration;
private LuckPermsConfiguration configuration;
private UserManager userManager;
private GroupManager groupManager;
private TrackManager trackManager;
@@ -138,12 +129,7 @@ public class LPBukkitPlugin extends JavaPlugin implements LuckPermsPlugin {
@Override
public void onEnable() {
// Used whilst the plugin is enabling / disabling / disabled
asyncLpExecutor = Executors.newCachedThreadPool();
asyncBukkitExecutor = r -> getServer().getScheduler().runTaskAsynchronously(this, r);
asyncExecutor = asyncLpExecutor;
syncExecutor = r -> getServer().getScheduler().runTask(this, r);
scheduler = new LPBukkitScheduler(this);
localeManager = new NoopLocaleManager();
senderFactory = new BukkitSenderFactory(this);
@@ -151,9 +137,8 @@ public class LPBukkitPlugin extends JavaPlugin implements LuckPermsPlugin {
LuckPermsPlugin.sendStartupBanner(getConsoleSender(), this);
ignoringLogs = ConcurrentHashMap.newKeySet();
shutdownHooks = Collections.synchronizedSet(new HashSet<>());
debugHandler = new DebugHandler(asyncBukkitExecutor, getVersion());
permissionCache = new PermissionCache(asyncBukkitExecutor);
debugHandler = new DebugHandler(scheduler.getAsyncBukkitExecutor(), getVersion());
permissionCache = new PermissionCache(scheduler.getAsyncBukkitExecutor());
getLog().info("Loading configuration...");
configuration = new BukkitConfig(this);
@@ -168,7 +153,7 @@ public class LPBukkitPlugin extends JavaPlugin implements LuckPermsPlugin {
childPermissionProvider = new ChildPermissionProvider();
// give all plugins a chance to load their defaults, then refresh.
getServer().getScheduler().runTaskLater(this, () -> {
scheduler.doSyncLater(() -> {
defaultsProvider.refresh();
childPermissionProvider.setup();
@@ -298,34 +283,35 @@ public class LPBukkitPlugin extends JavaPlugin implements LuckPermsPlugin {
int mins = getConfiguration().get(ConfigKeys.SYNC_TIME);
if (mins > 0) {
long ticks = mins * 60 * 20;
getServer().getScheduler().runTaskTimerAsynchronously(this, () -> updateTaskBuffer.request(), 40L, ticks);
scheduler.doAsyncRepeating(() -> updateTaskBuffer.request(), ticks);
}
scheduler.doAsyncLater(() -> updateTaskBuffer.request(), 40L);
// run an update instantly.
updateTaskBuffer.requestDirectly();
// register tasks
getServer().getScheduler().runTaskTimerAsynchronously(this, new ExpireTemporaryTask(this), 60L, 60L);
getServer().getScheduler().runTaskTimerAsynchronously(this, new CacheHousekeepingTask(this), 2400L, 2400L);
scheduler.doAsyncRepeating(new ExpireTemporaryTask(this), 60L);
scheduler.doAsyncRepeating(new CacheHousekeepingTask(this), 2400L);
// register permissions
registerPermissions(getConfiguration().get(ConfigKeys.COMMANDS_ALLOW_OP) ? PermissionDefault.OP : PermissionDefault.FALSE);
if (!getConfiguration().get(ConfigKeys.OPS_ENABLED)) {
getServer().getScheduler().runTask(this, () -> getServer().getOperators().forEach(o -> o.setOp(false)));
scheduler.doSync(() -> getServer().getOperators().forEach(o -> o.setOp(false)));
}
// replace the temporary executor when the Bukkit one starts
getServer().getScheduler().runTaskAsynchronously(this, () -> {
asyncExecutor = asyncBukkitExecutor;
scheduler.setUseBukkitAsync(true);
});
// Load any online users (in the case of a reload)
for (Player player : getServer().getOnlinePlayers()) {
doAsync(() -> {
scheduler.doAsync(() -> {
listener.onAsyncLogin(player.getUniqueId(), player.getName());
User user = getUserManager().get(getUuidCache().getUUID(player.getUniqueId()));
if (user != null) {
doSync(() -> {
scheduler.doSync(() -> {
try {
LPPermissible lpPermissible = new LPPermissible(player, user, this);
Injector.inject(player, lpPermissible);
@@ -344,12 +330,10 @@ public class LPBukkitPlugin extends JavaPlugin implements LuckPermsPlugin {
@Override
public void onDisable() {
// Switch back to the LP executor, the bukkit one won't allow new tasks
asyncExecutor = asyncLpExecutor;
scheduler.setUseBukkitAsync(false);
started = false;
shutdownHooks.forEach(Runnable::run);
defaultsProvider.close();
permissionCache.setShutdown(true);
debugHandler.setShutdown(true);
@@ -383,13 +367,7 @@ public class LPBukkitPlugin extends JavaPlugin implements LuckPermsPlugin {
vaultHook.unhook(this);
}
// wait for executor
asyncLpExecutor.shutdown();
try {
asyncLpExecutor.awaitTermination(30, TimeUnit.SECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
scheduler.shutdown();
// Bukkit will do this again when #onDisable completes, but we do it early to prevent NPEs elsewhere.
getServer().getScheduler().cancelTasks(this);
@@ -466,28 +444,13 @@ public class LPBukkitPlugin extends JavaPlugin implements LuckPermsPlugin {
}
}
@Override
public void doAsync(Runnable r) {
asyncExecutor.execute(r);
}
@Override
public void doSync(Runnable r) {
syncExecutor.execute(r);
}
@Override
public void doAsyncRepeating(Runnable r, long interval) {
getServer().getScheduler().runTaskTimerAsynchronously(this, r, interval, interval);
}
@Override
public String getVersion() {
return getDescription().getVersion();
}
@Override
public PlatformType getType() {
public PlatformType getServerType() {
return PlatformType.BUKKIT;
}
@@ -502,8 +465,8 @@ public class LPBukkitPlugin extends JavaPlugin implements LuckPermsPlugin {
}
@Override
public File getMainDir() {
return getDataFolder();
public File getDataDirectory() {
return super.getDataFolder();
}
@Override
@@ -549,12 +512,12 @@ public class LPBukkitPlugin extends JavaPlugin implements LuckPermsPlugin {
}
@Override
public boolean isOnline(UUID external) {
public boolean isPlayerOnline(UUID external) {
return getServer().getPlayer(external) != null;
}
@Override
public List<Sender> getSenders() {
public List<Sender> getOnlineSenders() {
return getServer().getOnlinePlayers().stream()
.map(p -> getSenderFactory().wrap(p))
.collect(Collectors.toList());
@@ -647,19 +610,9 @@ public class LPBukkitPlugin extends JavaPlugin implements LuckPermsPlugin {
return map;
}
@Override
public Object getPlugin(String name) {
return getServer().getPluginManager().getPlugin(name);
}
@Override
public Object getService(Class clazz) {
return getServer().getServicesManager().load(clazz);
}
@SuppressWarnings("deprecation")
@Override
public UUID getUUID(String playerName) {
public UUID getUuidFromUsername(String playerName) {
try {
return getServer().getOfflinePlayer(playerName).getUniqueId();
} catch (Exception e) {
@@ -667,16 +620,6 @@ public class LPBukkitPlugin extends JavaPlugin implements LuckPermsPlugin {
}
}
@Override
public boolean isPluginLoaded(String name) {
return getServer().getPluginManager().isPluginEnabled(name);
}
@Override
public void addShutdownHook(Runnable r) {
shutdownHooks.add(r);
}
private void registerPermissions(PermissionDefault def) {
PluginManager pm = getServer().getPluginManager();
@@ -0,0 +1,116 @@
/*
* Copyright (c) 2016 Lucko (Luck) <luck@lucko.me>
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
package me.lucko.luckperms.bukkit;
import lombok.Getter;
import lombok.Setter;
import me.lucko.luckperms.common.plugin.LuckPermsScheduler;
import org.bukkit.scheduler.BukkitTask;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class LPBukkitScheduler implements LuckPermsScheduler {
private final LPBukkitPlugin plugin;
@Getter
private ExecutorService asyncLpExecutor;
@Getter
private Executor asyncBukkitExecutor;
private Executor syncExecutor;
@Getter
@Setter
private boolean useBukkitAsync = false;
private Set<BukkitTask> tasks = ConcurrentHashMap.newKeySet();
public LPBukkitScheduler(LPBukkitPlugin plugin) {
this.plugin = plugin;
this.asyncLpExecutor = Executors.newCachedThreadPool();
this.asyncBukkitExecutor = r -> plugin.getServer().getScheduler().runTaskAsynchronously(plugin, r);
this.syncExecutor = r -> plugin.getServer().getScheduler().runTask(plugin, r);
}
@Override
public Executor getAsyncExecutor() {
return useBukkitAsync ? asyncBukkitExecutor : asyncLpExecutor;
}
@Override
public Executor getSyncExecutor() {
return syncExecutor;
}
@Override
public void doAsync(Runnable r) {
getAsyncExecutor().execute(r);
}
@Override
public void doSync(Runnable r) {
getSyncExecutor().execute(r);
}
@Override
public void doAsyncRepeating(Runnable r, long interval) {
BukkitTask task = plugin.getServer().getScheduler().runTaskTimerAsynchronously(plugin, r, interval, interval);
tasks.add(task);
}
@Override
public void doSyncRepeating(Runnable r, long interval) {
BukkitTask task = plugin.getServer().getScheduler().runTaskTimer(plugin, r, interval, interval);
tasks.add(task);
}
@Override
public void doAsyncLater(Runnable r, long delay) {
plugin.getServer().getScheduler().runTaskLaterAsynchronously(plugin, r, delay);
}
@Override
public void doSyncLater(Runnable r, long delay) {
plugin.getServer().getScheduler().runTaskLater(plugin, r, delay);
}
@Override
public void shutdown() {
tasks.forEach(BukkitTask::cancel);
// wait for executor
asyncLpExecutor.shutdown();
try {
asyncLpExecutor.awaitTermination(30, TimeUnit.SECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@@ -28,8 +28,8 @@ import com.google.common.collect.Maps;
import me.lucko.luckperms.api.context.ContextCalculator;
import me.lucko.luckperms.api.context.MutableContextSet;
import me.lucko.luckperms.common.LuckPermsPlugin;
import me.lucko.luckperms.common.config.ConfigKeys;
import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
@@ -30,7 +30,6 @@ import de.bananaco.bpermissions.api.World;
import de.bananaco.bpermissions.api.WorldManager;
import me.lucko.luckperms.api.MetaUtils;
import me.lucko.luckperms.common.LuckPermsPlugin;
import me.lucko.luckperms.common.commands.CommandException;
import me.lucko.luckperms.common.commands.CommandResult;
import me.lucko.luckperms.common.commands.SubCommand;
@@ -40,6 +39,7 @@ import me.lucko.luckperms.common.constants.Message;
import me.lucko.luckperms.common.core.model.PermissionHolder;
import me.lucko.luckperms.common.core.model.User;
import me.lucko.luckperms.common.data.LogEntry;
import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
import me.lucko.luckperms.common.utils.Predicates;
import me.lucko.luckperms.exceptions.ObjectAlreadyHasException;
@@ -243,7 +243,7 @@ public class MigrationBPermissions extends SubCommand<Object> {
try {
uuid = UUID.fromString(user.getName());
} catch (IllegalArgumentException e) {
uuid = plugin.getUUID(user.getName());
uuid = plugin.getUuidFromUsername(user.getName());
}
if (uuid == null) {
@@ -22,7 +22,6 @@
package me.lucko.luckperms.bukkit.migration;
import me.lucko.luckperms.common.LuckPermsPlugin;
import me.lucko.luckperms.common.commands.Arg;
import me.lucko.luckperms.common.commands.CommandException;
import me.lucko.luckperms.common.commands.CommandResult;
@@ -33,6 +32,7 @@ import me.lucko.luckperms.common.constants.Message;
import me.lucko.luckperms.common.constants.Permission;
import me.lucko.luckperms.common.core.NodeFactory;
import me.lucko.luckperms.common.data.LogEntry;
import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
import me.lucko.luckperms.common.utils.Predicates;
import me.lucko.luckperms.exceptions.ObjectAlreadyHasException;
import me.lucko.luckperms.exceptions.ObjectLacksException;
@@ -43,6 +43,7 @@ import org.anjocaido.groupmanager.data.Group;
import org.anjocaido.groupmanager.data.User;
import org.anjocaido.groupmanager.dataholder.WorldDataHolder;
import org.anjocaido.groupmanager.dataholder.worlds.WorldsHolder;
import org.bukkit.Bukkit;
import java.util.AbstractMap;
import java.util.HashMap;
@@ -67,7 +68,7 @@ public class MigrationGroupManager extends SubCommand<Object> {
};
log.accept("Starting GroupManager migration.");
if (!plugin.isPluginLoaded("GroupManager")) {
if (!Bukkit.getPluginManager().isPluginEnabled("GroupManager")) {
log.accept("Error -> GroupManager is not loaded.");
return CommandResult.STATE_ERROR;
}
@@ -76,7 +77,7 @@ public class MigrationGroupManager extends SubCommand<Object> {
.map(String::toLowerCase)
.collect(Collectors.toList());
GroupManager gm = (GroupManager) plugin.getPlugin("GroupManager");
GroupManager gm = (GroupManager) Bukkit.getPluginManager().getPlugin("GroupManager");
// Migrate Global Groups
log.accept("Starting Global Group migration.");
@@ -24,7 +24,6 @@ package me.lucko.luckperms.bukkit.migration;
import me.lucko.luckperms.api.MetaUtils;
import me.lucko.luckperms.api.PlatformType;
import me.lucko.luckperms.common.LuckPermsPlugin;
import me.lucko.luckperms.common.commands.Arg;
import me.lucko.luckperms.common.commands.CommandException;
import me.lucko.luckperms.common.commands.CommandResult;
@@ -36,9 +35,12 @@ import me.lucko.luckperms.common.constants.Permission;
import me.lucko.luckperms.common.core.model.Group;
import me.lucko.luckperms.common.core.model.User;
import me.lucko.luckperms.common.data.LogEntry;
import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
import me.lucko.luckperms.common.utils.Predicates;
import me.lucko.luckperms.exceptions.ObjectAlreadyHasException;
import org.bukkit.Bukkit;
import ru.tehkode.permissions.NativeInterface;
import ru.tehkode.permissions.PermissionGroup;
import ru.tehkode.permissions.PermissionManager;
@@ -67,12 +69,12 @@ public class MigrationPermissionsEx extends SubCommand<Object> {
};
log.accept("Starting PermissionsEx migration.");
if (!plugin.isPluginLoaded("PermissionsEx")) {
if (!Bukkit.getPluginManager().isPluginEnabled("PermissionsEx")) {
log.accept("Error -> PermissionsEx is not loaded.");
return CommandResult.STATE_ERROR;
}
if (plugin.getType() != PlatformType.BUKKIT) {
if (plugin.getServerType() != PlatformType.BUKKIT) {
// Sponge uses a completely different version of PEX.
log.accept("PEX import is not supported on this platform.");
return CommandResult.STATE_ERROR;
@@ -82,7 +84,7 @@ public class MigrationPermissionsEx extends SubCommand<Object> {
.map(String::toLowerCase)
.collect(Collectors.toList());
PermissionsEx pex = (PermissionsEx) plugin.getPlugin("PermissionsEx");
PermissionsEx pex = (PermissionsEx) Bukkit.getPluginManager().getPlugin("PermissionsEx");
PermissionManager manager = pex.getPermissionsManager();
NativeInterface ni;
@@ -249,7 +251,7 @@ public class MigrationPermissionsEx extends SubCommand<Object> {
} catch (IllegalArgumentException e) {
u = ni.nameToUUID(user.getIdentifier());
if (u == null) {
u = plugin.getUUID(user.getIdentifier());
u = plugin.getUuidFromUsername(user.getIdentifier());
}
}
@@ -35,7 +35,6 @@ import com.zaxxer.hikari.HikariDataSource;
import me.lucko.luckperms.api.data.Callback;
import me.lucko.luckperms.bukkit.migration.utils.LPResultRunnable;
import me.lucko.luckperms.common.LuckPermsPlugin;
import me.lucko.luckperms.common.commands.Arg;
import me.lucko.luckperms.common.commands.CommandException;
import me.lucko.luckperms.common.commands.CommandResult;
@@ -46,9 +45,12 @@ import me.lucko.luckperms.common.constants.Message;
import me.lucko.luckperms.common.core.model.PermissionHolder;
import me.lucko.luckperms.common.core.model.User;
import me.lucko.luckperms.common.data.LogEntry;
import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
import me.lucko.luckperms.common.utils.Predicates;
import me.lucko.luckperms.exceptions.ObjectAlreadyHasException;
import org.bukkit.Bukkit;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.Connection;
@@ -202,7 +204,7 @@ public class MigrationPowerfulPerms extends SubCommand<Object> {
};
log.accept("Starting PowerfulPerms migration.");
if (!plugin.isPluginLoaded("PowerfulPerms")) {
if (!Bukkit.getPluginManager().isPluginEnabled("PowerfulPerms")) {
log.accept("Error -> PowerfulPerms is not loaded.");
return CommandResult.STATE_ERROR;
}
@@ -266,7 +268,7 @@ public class MigrationPowerfulPerms extends SubCommand<Object> {
log.accept("Found " + uuids.size() + " uuids. Starting migration.");
PowerfulPermsPlugin ppPlugin = (PowerfulPermsPlugin) plugin.getPlugin("PowerfulPerms");
PowerfulPermsPlugin ppPlugin = (PowerfulPermsPlugin) Bukkit.getPluginManager().getPlugin("PowerfulPerms");
PermissionManager pm = ppPlugin.getPermissionManager();
// Groups first.
@@ -22,7 +22,6 @@
package me.lucko.luckperms.bukkit.migration;
import me.lucko.luckperms.common.LuckPermsPlugin;
import me.lucko.luckperms.common.commands.CommandException;
import me.lucko.luckperms.common.commands.CommandResult;
import me.lucko.luckperms.common.commands.SubCommand;
@@ -34,9 +33,11 @@ import me.lucko.luckperms.common.core.model.Group;
import me.lucko.luckperms.common.core.model.PermissionHolder;
import me.lucko.luckperms.common.core.model.Track;
import me.lucko.luckperms.common.core.model.User;
import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
import me.lucko.luckperms.common.utils.Predicates;
import me.lucko.luckperms.exceptions.ObjectAlreadyHasException;
import org.bukkit.Bukkit;
import org.tyrannyofheaven.bukkit.zPermissions.ZPermissionsService;
import org.tyrannyofheaven.bukkit.zPermissions.dao.PermissionService;
import org.tyrannyofheaven.bukkit.zPermissions.model.EntityMetadata;
@@ -63,19 +64,19 @@ public class MigrationZPermissions extends SubCommand<Object> {
};
log.accept("Starting zPermissions migration.");
if (!plugin.isPluginLoaded("zPermissions")) {
if (!Bukkit.getPluginManager().isPluginEnabled("zPermissions")) {
log.accept("Error -> zPermissions is not loaded.");
return CommandResult.STATE_ERROR;
}
ZPermissionsService service = (ZPermissionsService) plugin.getService(ZPermissionsService.class);
if (service == null) {
if (!Bukkit.getServicesManager().isProvidedFor(ZPermissionsService.class)) {
log.accept("Error -> zPermissions is not loaded.");
return CommandResult.STATE_ERROR;
}
ZPermissionsService service = Bukkit.getServicesManager().getRegistration(ZPermissionsService.class).getProvider();
PermissionService internalService;
try {
Field psField = service.getClass().getDeclaredField("permissionService");
psField.setAccessible(true);
@@ -57,7 +57,7 @@ public class VaultPermissionHook extends Permission {
private final String name = "LuckPerms";
private Function<String, String> WORLD_CORRECTION_FUNCTION = s -> isIgnoreWorld() ? null : s;
private Function<String, String> worldCorrectionFunction = s -> isIgnoreWorld() ? null : s;
public VaultPermissionHook(LPBukkitPlugin plugin) {
this.plugin = plugin;
@@ -132,11 +132,11 @@ public class VaultPermissionHook extends Permission {
public void save(PermissionHolder holder) {
if (holder instanceof User) {
User u = (User) holder;
plugin.getStorage().saveUser(u).thenRunAsync(() -> u.getRefreshBuffer().request(), plugin.getAsyncExecutor());
plugin.getStorage().saveUser(u).thenRunAsync(() -> u.getRefreshBuffer().request(), plugin.getScheduler().getAsyncExecutor());
}
if (holder instanceof Group) {
Group g = (Group) holder;
plugin.getStorage().saveGroup(g).thenRunAsync(() -> plugin.getUpdateTaskBuffer().request(), plugin.getAsyncExecutor());
plugin.getStorage().saveGroup(g).thenRunAsync(() -> plugin.getUpdateTaskBuffer().request(), plugin.getScheduler().getAsyncExecutor());
}
}
@@ -151,7 +151,7 @@ public class VaultPermissionHook extends Permission {
@Override
public boolean playerHas(String world, @NonNull String player, @NonNull String permission) {
world = WORLD_CORRECTION_FUNCTION.apply(world);
world = worldCorrectionFunction.apply(world);
log("Checking if player " + player + " has permission: " + permission + " on world " + world + ", server " + getServer());
User user = plugin.getUserManager().getByUsername(player);
@@ -167,7 +167,7 @@ public class VaultPermissionHook extends Permission {
@Override
public boolean playerAdd(String world, @NonNull String player, @NonNull String permission) {
world = WORLD_CORRECTION_FUNCTION.apply(world);
world = worldCorrectionFunction.apply(world);
log("Adding permission to player " + player + ": '" + permission + "' on world " + world + ", server " + getServer());
final User user = plugin.getUserManager().getByUsername(player);
@@ -179,7 +179,7 @@ public class VaultPermissionHook extends Permission {
@Override
public boolean playerRemove(String world, @NonNull String player, @NonNull String permission) {
world = WORLD_CORRECTION_FUNCTION.apply(world);
world = worldCorrectionFunction.apply(world);
log("Removing permission from player " + player + ": '" + permission + "' on world " + world + ", server " + getServer());
final User user = plugin.getUserManager().getByUsername(player);
@@ -191,7 +191,7 @@ public class VaultPermissionHook extends Permission {
@Override
public boolean groupHas(String world, @NonNull String groupName, @NonNull String permission) {
world = WORLD_CORRECTION_FUNCTION.apply(world);
world = worldCorrectionFunction.apply(world);
log("Checking if group " + groupName + " has permission: " + permission + " on world " + world + ", server " + getServer());
final Group group = plugin.getGroupManager().getIfLoaded(groupName);
@@ -204,7 +204,7 @@ public class VaultPermissionHook extends Permission {
@Override
public boolean groupAdd(String world, @NonNull String groupName, @NonNull String permission) {
world = WORLD_CORRECTION_FUNCTION.apply(world);
world = worldCorrectionFunction.apply(world);
log("Adding permission to group " + groupName + ": '" + permission + "' on world " + world + ", server " + getServer());
final Group group = plugin.getGroupManager().getIfLoaded(groupName);
@@ -216,7 +216,7 @@ public class VaultPermissionHook extends Permission {
@Override
public boolean groupRemove(String world, @NonNull String groupName, @NonNull String permission) {
world = WORLD_CORRECTION_FUNCTION.apply(world);
world = worldCorrectionFunction.apply(world);
log("Removing permission from group " + groupName + ": '" + permission + "' on world " + world + ", server " + getServer());
final Group group = plugin.getGroupManager().getIfLoaded(groupName);
@@ -228,7 +228,7 @@ public class VaultPermissionHook extends Permission {
@Override
public boolean playerInGroup(String world, @NonNull String player, @NonNull String group) {
world = WORLD_CORRECTION_FUNCTION.apply(world);
world = worldCorrectionFunction.apply(world);
log("Checking if player " + player + " is in group: " + group + " on world " + world + ", server " + getServer());
final User user = plugin.getUserManager().getByUsername(player);
@@ -245,7 +245,7 @@ public class VaultPermissionHook extends Permission {
@Override
public boolean playerAddGroup(String world, @NonNull String player, @NonNull String groupName) {
world = WORLD_CORRECTION_FUNCTION.apply(world);
world = worldCorrectionFunction.apply(world);
log("Adding player " + player + " to group: '" + groupName + "' on world " + world + ", server " + getServer());
final User user = plugin.getUserManager().getByUsername(player);
@@ -271,7 +271,7 @@ public class VaultPermissionHook extends Permission {
@Override
public boolean playerRemoveGroup(String world, @NonNull String player, @NonNull String groupName) {
world = WORLD_CORRECTION_FUNCTION.apply(world);
world = worldCorrectionFunction.apply(world);
log("Removing player " + player + " from group: '" + groupName + "' on world " + world + ", server " + getServer());
final User user = plugin.getUserManager().getByUsername(player);
@@ -297,7 +297,7 @@ public class VaultPermissionHook extends Permission {
@Override
public String[] getPlayerGroups(String world, @NonNull String player) {
world = WORLD_CORRECTION_FUNCTION.apply(world);
world = worldCorrectionFunction.apply(world);
log("Getting groups of player: " + player + ", on world " + world + ", server " + getServer());
User user = plugin.getUserManager().getByUsername(player);
@@ -314,7 +314,7 @@ public class VaultPermissionHook extends Permission {
@Override
public String getPrimaryGroup(String world, @NonNull String player) {
world = WORLD_CORRECTION_FUNCTION.apply(world);
world = worldCorrectionFunction.apply(world);
log("Getting primary group of player: " + player);
final User user = plugin.getUserManager().getByUsername(player);