mirror of
https://github.com/LuckPerms/LuckPerms.git
synced 2024-09-19 09:11:14 +02:00
make SenderFactory nicer & maybe faster
This commit is contained in:
parent
861c1ddd69
commit
cee96d7daa
@ -22,11 +22,13 @@
|
|||||||
|
|
||||||
package me.lucko.luckperms.commands;
|
package me.lucko.luckperms.commands;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableMap;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import me.lucko.luckperms.constants.Permission;
|
import me.lucko.luckperms.constants.Permission;
|
||||||
|
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -35,7 +37,7 @@ import java.util.stream.Collectors;
|
|||||||
*/
|
*/
|
||||||
public abstract class SenderFactory<T> implements Runnable {
|
public abstract class SenderFactory<T> implements Runnable {
|
||||||
private final Map<T, List<String>> messages = new HashMap<>();
|
private final Map<T, List<String>> messages = new HashMap<>();
|
||||||
//private final List<Map.Entry<T, String>> messages = new ArrayList<>();
|
private final AtomicBoolean shouldSend = new AtomicBoolean(false);
|
||||||
private final SenderFactory<T> factory = this;
|
private final SenderFactory<T> factory = this;
|
||||||
|
|
||||||
protected abstract String getName(T t);
|
protected abstract String getName(T t);
|
||||||
@ -48,9 +50,8 @@ public abstract class SenderFactory<T> implements Runnable {
|
|||||||
final WeakReference<T> tRef = new WeakReference<>(t);
|
final WeakReference<T> tRef = new WeakReference<>(t);
|
||||||
|
|
||||||
// Cache these permissions, so they can be accessed async
|
// Cache these permissions, so they can be accessed async
|
||||||
final Map<Permission, Boolean> perms = Arrays.stream(Permission.values())
|
final Map<Permission, Boolean> perms = ImmutableMap.copyOf(Arrays.stream(Permission.values())
|
||||||
.map(p -> new AbstractMap.SimpleEntry<>(p, factory.hasPermission(t, p.getNode())))
|
.collect(Collectors.toMap(p -> p, p -> factory.hasPermission(t, p.getNode()))));
|
||||||
.collect(Collectors.toMap(AbstractMap.SimpleEntry::getKey, AbstractMap.SimpleEntry::getValue));
|
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
final String name = factory.getName(t);
|
final String name = factory.getName(t);
|
||||||
@ -69,25 +70,31 @@ public abstract class SenderFactory<T> implements Runnable {
|
|||||||
|
|
||||||
messages.get(t).add(s);
|
messages.get(t).add(s);
|
||||||
}
|
}
|
||||||
|
shouldSend.set(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasPermission(Permission permission) {
|
public boolean hasPermission(Permission permission) {
|
||||||
synchronized (perms) {
|
return perms.get(permission);
|
||||||
return perms.get(permission);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final void run() {
|
public final void run() {
|
||||||
|
if (!shouldSend.getAndSet(false)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
synchronized (messages) {
|
synchronized (messages) {
|
||||||
if (!messages.isEmpty()) {
|
for (Map.Entry<T, List<String>> e : messages.entrySet()) {
|
||||||
messages.entrySet().forEach(e -> e.getValue().forEach(s -> factory.sendMessage(e.getKey(), s)));
|
for (String s : e.getValue()) {
|
||||||
messages.clear();
|
factory.sendMessage(e.getKey(), s);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
messages.clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user