mirror of
https://github.com/LuckPerms/LuckPerms.git
synced 2024-11-28 05:35:26 +01:00
Fix some issues with the recent import/export changes
This commit is contained in:
parent
479bd91b74
commit
8faa4d137b
@ -30,6 +30,7 @@ import me.lucko.luckperms.common.commands.sender.Sender;
|
|||||||
import me.lucko.luckperms.common.commands.utils.Util;
|
import me.lucko.luckperms.common.commands.utils.Util;
|
||||||
import me.lucko.luckperms.common.locale.Message;
|
import me.lucko.luckperms.common.locale.Message;
|
||||||
import me.lucko.luckperms.common.logging.ProgressLogger;
|
import me.lucko.luckperms.common.logging.ProgressLogger;
|
||||||
|
import me.lucko.luckperms.common.model.Group;
|
||||||
import me.lucko.luckperms.common.model.Track;
|
import me.lucko.luckperms.common.model.Track;
|
||||||
import me.lucko.luckperms.common.model.User;
|
import me.lucko.luckperms.common.model.User;
|
||||||
import me.lucko.luckperms.common.node.NodeFactory;
|
import me.lucko.luckperms.common.node.NodeFactory;
|
||||||
@ -54,6 +55,7 @@ import java.util.concurrent.CompletableFuture;
|
|||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
import java.util.concurrent.locks.ReentrantLock;
|
import java.util.concurrent.locks.ReentrantLock;
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handles export operations
|
* Handles export operations
|
||||||
@ -102,31 +104,31 @@ public class Exporter implements Runnable {
|
|||||||
|
|
||||||
AtomicInteger groupCount = new AtomicInteger(0);
|
AtomicInteger groupCount = new AtomicInteger(0);
|
||||||
|
|
||||||
plugin.getGroupManager().getAll().values().stream()
|
List<? extends Group> groups = plugin.getGroupManager().getAll().values().stream()
|
||||||
// export groups in order of weight
|
// export groups in order of weight
|
||||||
.sorted((o1, o2) -> {
|
.sorted((o1, o2) -> {
|
||||||
int i = Integer.compare(o2.getWeight().orElse(0), o1.getWeight().orElse(0));
|
int i = Integer.compare(o2.getWeight().orElse(0), o1.getWeight().orElse(0));
|
||||||
return i != 0 ? i : o1.getName().compareToIgnoreCase(o2.getName());
|
return i != 0 ? i : o1.getName().compareToIgnoreCase(o2.getName());
|
||||||
})
|
}).collect(Collectors.toList());
|
||||||
// create all groups initially
|
|
||||||
.peek(group -> {
|
|
||||||
if (!group.getName().equals("default")) {
|
|
||||||
write(writer, "/luckperms creategroup " + group.getName());
|
|
||||||
}
|
|
||||||
})
|
|
||||||
// then export the content of each group
|
|
||||||
.forEach(group -> {
|
|
||||||
if (groupCount.get() == 0) {
|
|
||||||
write(writer, "");
|
|
||||||
}
|
|
||||||
|
|
||||||
write(writer, "# Export group: " + group.getName());
|
for (Group group : groups) {
|
||||||
for (Node node : group.getEnduringNodes().values()) {
|
if (!group.getName().equals("default")) {
|
||||||
write(writer, NodeFactory.nodeAsCommand(node, group.getName(), true, true));
|
write(writer, "/luckperms creategroup " + group.getName());
|
||||||
}
|
}
|
||||||
write(writer, "");
|
}
|
||||||
log.logAllProgress("Exported {} groups so far.", groupCount.incrementAndGet());
|
|
||||||
});
|
for (Group group : groups) {
|
||||||
|
if (groupCount.get() == 0) {
|
||||||
|
write(writer, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
write(writer, "# Export group: " + group.getName());
|
||||||
|
for (Node node : group.getEnduringNodes().values()) {
|
||||||
|
write(writer, NodeFactory.nodeAsCommand(node, group.getName(), true, true));
|
||||||
|
}
|
||||||
|
write(writer, "");
|
||||||
|
log.logAllProgress("Exported {} groups so far.", groupCount.incrementAndGet());
|
||||||
|
}
|
||||||
|
|
||||||
log.log("Exported " + groupCount.get() + " groups.");
|
log.log("Exported " + groupCount.get() + " groups.");
|
||||||
|
|
||||||
@ -178,7 +180,7 @@ public class Exporter implements Runnable {
|
|||||||
write(writer, "# Export users");
|
write(writer, "# Export users");
|
||||||
|
|
||||||
// divide into 16 pools.
|
// divide into 16 pools.
|
||||||
Cycle<List<UUID>> userPools = new Cycle<>(Util.nInstances(16, ArrayList::new));
|
Cycle<List<UUID>> userPools = new Cycle<>(Util.nInstances(32, ArrayList::new));
|
||||||
for (UUID uuid : users) {
|
for (UUID uuid : users) {
|
||||||
userPools.next().add(uuid);
|
userPools.next().add(uuid);
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,6 @@ import me.lucko.luckperms.common.commands.CommandResult;
|
|||||||
import me.lucko.luckperms.common.commands.sender.Sender;
|
import me.lucko.luckperms.common.commands.sender.Sender;
|
||||||
import me.lucko.luckperms.common.commands.utils.Util;
|
import me.lucko.luckperms.common.commands.utils.Util;
|
||||||
import me.lucko.luckperms.common.locale.Message;
|
import me.lucko.luckperms.common.locale.Message;
|
||||||
import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
|
|
||||||
import me.lucko.luckperms.common.utils.Cycle;
|
import me.lucko.luckperms.common.utils.Cycle;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -89,12 +88,18 @@ public class Importer implements Runnable {
|
|||||||
// form instances for all commands, and register them
|
// form instances for all commands, and register them
|
||||||
int index = 1;
|
int index = 1;
|
||||||
for (String command : commands) {
|
for (String command : commands) {
|
||||||
toExecute.add(new ImportCommand(commandManager.getPlugin(), index, command));
|
ImportCommand cmd = new ImportCommand(commandManager, index, command);
|
||||||
|
toExecute.add(cmd);
|
||||||
|
|
||||||
|
if (cmd.getCommand().startsWith("creategroup ") || cmd.getCommand().startsWith("createtrack")) {
|
||||||
|
cmd.process(); // process immediately
|
||||||
|
}
|
||||||
|
|
||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// divide commands up into pools
|
// divide commands up into pools
|
||||||
Cycle<List<ImportCommand>> commandPools = new Cycle<>(Util.nInstances(16, ArrayList::new));
|
Cycle<List<ImportCommand>> commandPools = new Cycle<>(Util.nInstances(128, ArrayList::new));
|
||||||
|
|
||||||
String lastTarget = null;
|
String lastTarget = null;
|
||||||
for (ImportCommand cmd : toExecute) {
|
for (ImportCommand cmd : toExecute) {
|
||||||
@ -120,19 +125,7 @@ public class Importer implements Runnable {
|
|||||||
|
|
||||||
// iterate through each user in the sublist, and grab their data.
|
// iterate through each user in the sublist, and grab their data.
|
||||||
for (ImportCommand cmd : subList) {
|
for (ImportCommand cmd : subList) {
|
||||||
try {
|
cmd.process();
|
||||||
CommandResult result = commandManager.onCommand(
|
|
||||||
cmd,
|
|
||||||
"lp",
|
|
||||||
Util.stripQuotes(Splitter.on(CommandManager.COMMAND_SEPARATOR_PATTERN).omitEmptyStrings().splitToList(cmd.getCommand()))
|
|
||||||
).get();
|
|
||||||
cmd.setResult(result);
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
|
||||||
cmd.setResult(CommandResult.FAILURE);
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
processedCount.incrementAndGet();
|
processedCount.incrementAndGet();
|
||||||
}
|
}
|
||||||
}, commandManager.getPlugin().getScheduler().async()));
|
}, commandManager.getPlugin().getScheduler().async()));
|
||||||
@ -190,7 +183,7 @@ public class Importer implements Runnable {
|
|||||||
|
|
||||||
private void sendProgress(int processedCount) {
|
private void sendProgress(int processedCount) {
|
||||||
int percent = (processedCount * 100) / commands.size();
|
int percent = (processedCount * 100) / commands.size();
|
||||||
int errors = (int) toExecute.stream().filter(v -> !v.getResult().asBoolean()).count();
|
int errors = (int) toExecute.stream().filter(v -> v.isCompleted() && !v.getResult().asBoolean()).count();
|
||||||
|
|
||||||
if (errors == 1) {
|
if (errors == 1) {
|
||||||
notify.forEach(s -> Message.IMPORT_PROGRESS_SIN.send(s, percent, processedCount, commands.size(), errors));
|
notify.forEach(s -> Message.IMPORT_PROGRESS_SIN.send(s, percent, processedCount, commands.size(), errors));
|
||||||
@ -203,18 +196,23 @@ public class Importer implements Runnable {
|
|||||||
private static class ImportCommand extends ImporterSender {
|
private static class ImportCommand extends ImporterSender {
|
||||||
private static final Splitter SPACE_SPLIT = Splitter.on(" ");
|
private static final Splitter SPACE_SPLIT = Splitter.on(" ");
|
||||||
|
|
||||||
|
private final CommandManager commandManager;
|
||||||
private final int id;
|
private final int id;
|
||||||
private final String command;
|
private final String command;
|
||||||
|
|
||||||
private final String target;
|
private final String target;
|
||||||
|
|
||||||
|
@Setter
|
||||||
|
private boolean completed = false;
|
||||||
|
|
||||||
private final List<String> output = new ArrayList<>();
|
private final List<String> output = new ArrayList<>();
|
||||||
|
|
||||||
@Setter
|
@Setter
|
||||||
private CommandResult result = CommandResult.FAILURE;
|
private CommandResult result = CommandResult.FAILURE;
|
||||||
|
|
||||||
ImportCommand(LuckPermsPlugin plugin, int id, String command) {
|
ImportCommand(CommandManager commandManager, int id, String command) {
|
||||||
super(plugin);
|
super(commandManager.getPlugin());
|
||||||
|
this.commandManager = commandManager;
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.command = command;
|
this.command = command;
|
||||||
this.target = determineTarget(command);
|
this.target = determineTarget(command);
|
||||||
@ -225,6 +223,27 @@ public class Importer implements Runnable {
|
|||||||
output.add(s);
|
output.add(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void process() {
|
||||||
|
if (isCompleted()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
CommandResult result = commandManager.onCommand(
|
||||||
|
this,
|
||||||
|
"lp",
|
||||||
|
Util.stripQuotes(Splitter.on(CommandManager.COMMAND_SEPARATOR_PATTERN).omitEmptyStrings().splitToList(getCommand()))
|
||||||
|
).get();
|
||||||
|
setResult(result);
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
setResult(CommandResult.FAILURE);
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
setCompleted(true);
|
||||||
|
}
|
||||||
|
|
||||||
private static String determineTarget(String command) {
|
private static String determineTarget(String command) {
|
||||||
if (command.startsWith("user ") && command.length() > "user ".length()) {
|
if (command.startsWith("user ") && command.length() > "user ".length()) {
|
||||||
String subCmd = command.substring("user ".length());
|
String subCmd = command.substring("user ".length());
|
||||||
@ -256,6 +275,16 @@ public class Importer implements Runnable {
|
|||||||
return "t:" + targetTrack;
|
return "t:" + targetTrack;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (command.startsWith("creategroup ") && command.length() > "creategroup ".length()) {
|
||||||
|
String targetGroup = command.substring("creategroup ".length());
|
||||||
|
return "g:" + targetGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (command.startsWith("createtrack ") && command.length() > "createtrack ".length()) {
|
||||||
|
String targetTrack = command.substring("createtrack ".length());
|
||||||
|
return "t:" + targetTrack;
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -392,8 +392,8 @@ public enum Message {
|
|||||||
IMPORT_LOG_NOT_READABLE("Error: File {0} is not readable.", true),
|
IMPORT_LOG_NOT_READABLE("Error: File {0} is not readable.", true),
|
||||||
IMPORT_LOG_FAILURE("An unexpected error occured whilst reading from the log file.", true),
|
IMPORT_LOG_FAILURE("An unexpected error occured whilst reading from the log file.", true),
|
||||||
|
|
||||||
IMPORT_PROGRESS("&b(Import) &b-> &f{0} &fpercent complete &7- &b{1}&f/&b{2} &foperations complete with &c{3} &ferrors.", true),
|
IMPORT_PROGRESS("&b(Import) &b-> &f{0}&f% complete &7- &b{1}&f/&b{2} &foperations complete with &c{3} &ferrors.", true),
|
||||||
IMPORT_PROGRESS_SIN("&b(Import) &b-> &f{0} &fpercent complete &7- &b{1}&f/&b{2} &foperations complete with &c{3} &ferror.", true),
|
IMPORT_PROGRESS_SIN("&b(Import) &b-> &f{0}&f% complete &7- &b{1}&f/&b{2} &foperations complete with &c{3} &ferror.", true),
|
||||||
IMPORT_START("&b(Import) &b-> &fStarting import process.", true),
|
IMPORT_START("&b(Import) &b-> &fStarting import process.", true),
|
||||||
|
|
||||||
IMPORT_END_COMPLETE("&b(Import) &a&lCOMPLETED &7- took &b{0} &7seconds - &7No errors.", true),
|
IMPORT_END_COMPLETE("&b(Import) &a&lCOMPLETED &7- took &b{0} &7seconds - &7No errors.", true),
|
||||||
|
@ -55,6 +55,7 @@ import java.util.stream.Collectors;
|
|||||||
*/
|
*/
|
||||||
@ToString(of = {"permission", "value", "override", "server", "world", "expireAt", "contexts"})
|
@ToString(of = {"permission", "value", "override", "server", "world", "expireAt", "contexts"})
|
||||||
public final class ImmutableNode implements Node {
|
public final class ImmutableNode implements Node {
|
||||||
|
private static final int NODE_SEPARATOR_CHAR = Character.getNumericValue('.');
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private final String permission;
|
private final String permission;
|
||||||
@ -149,7 +150,7 @@ public final class ImmutableNode implements Node {
|
|||||||
}
|
}
|
||||||
|
|
||||||
isWildcard = this.permission.endsWith(".*");
|
isWildcard = this.permission.endsWith(".*");
|
||||||
wildcardLevel = (int) this.permission.chars().filter(num -> num == Character.getNumericValue('.')).count();
|
wildcardLevel = this.permission.chars().filter(num -> num == NODE_SEPARATOR_CHAR).sum();
|
||||||
|
|
||||||
isMeta = NodeFactory.isMetaNode(this.permission);
|
isMeta = NodeFactory.isMetaNode(this.permission);
|
||||||
if (isMeta) {
|
if (isMeta) {
|
||||||
|
Loading…
Reference in New Issue
Block a user