Fix permission handler crash on preinit state

This commit is contained in:
IzzelAliz 2021-01-10 16:35:40 +08:00
parent 5c58877273
commit d6bf0f12ea

View File

@ -24,13 +24,13 @@ public class ArclightPermissionHandler implements IPermissionHandler {
public static final ArclightPermissionHandler INSTANCE = new ArclightPermissionHandler(); public static final ArclightPermissionHandler INSTANCE = new ArclightPermissionHandler();
private final List<Permission> list = new LinkedList<>(); private final List<Perm> list = new LinkedList<>();
private final AtomicBoolean initialized = new AtomicBoolean(false); private final AtomicBoolean initialized = new AtomicBoolean(false);
public void initialize() { public void initialize() {
if (!initialized.getAndSet(true)) { if (!initialized.getAndSet(true)) {
for (Permission permission : this.list) { for (Perm permission : this.list) {
DefaultPermissions.registerPermission(permission); DefaultPermissions.registerPermission(permission.toBukkit());
} }
this.list.clear(); this.list.clear();
} }
@ -49,7 +49,7 @@ public class ArclightPermissionHandler implements IPermissionHandler {
if (initialized.get()) { if (initialized.get()) {
DefaultPermissions.registerPermission(node, desc, bukkit); DefaultPermissions.registerPermission(node, desc, bukkit);
} else { } else {
this.list.add(new Permission(node, desc, bukkit)); this.list.add(new Perm(node, desc, bukkit));
} }
} }
@ -58,7 +58,7 @@ public class ArclightPermissionHandler implements IPermissionHandler {
if (initialized.get()) { if (initialized.get()) {
return Bukkit.getPluginManager().getPermissions().stream().map(Permission::getName).collect(Collectors.toList()); return Bukkit.getPluginManager().getPermissions().stream().map(Permission::getName).collect(Collectors.toList());
} else { } else {
return this.list.stream().map(Permission::getName).collect(Collectors.toList()); return this.list.stream().map(it -> it.node).collect(Collectors.toList());
} }
} }
@ -93,4 +93,21 @@ public class ArclightPermissionHandler implements IPermissionHandler {
return permission == null ? "" : permission.getDescription(); return permission == null ? "" : permission.getDescription();
} }
} }
private static class Perm {
private final String node;
private final String desc;
private final PermissionDefault level;
public Perm(String node, String desc, PermissionDefault level) {
this.node = node;
this.desc = desc;
this.level = level;
}
public Permission toBukkit() {
return new Permission(node, desc, level);
}
}
} }