Misc cleanup
This commit is contained in:
parent
ad5299d0cd
commit
f86bdb7619
@ -39,7 +39,6 @@ abstract class AbstractContextSet implements ContextSet {
|
|||||||
|
|
||||||
protected abstract Multimap<String, String> backing();
|
protected abstract Multimap<String, String> backing();
|
||||||
|
|
||||||
@Nonnull
|
|
||||||
@Override
|
@Override
|
||||||
public boolean containsKey(@Nonnull String key) {
|
public boolean containsKey(@Nonnull String key) {
|
||||||
return backing().containsKey(sanitizeKey(key));
|
return backing().containsKey(sanitizeKey(key));
|
||||||
@ -52,13 +51,11 @@ abstract class AbstractContextSet implements ContextSet {
|
|||||||
return values != null ? ImmutableSet.copyOf(values) : ImmutableSet.of();
|
return values != null ? ImmutableSet.copyOf(values) : ImmutableSet.of();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nonnull
|
|
||||||
@Override
|
@Override
|
||||||
public boolean has(@Nonnull String key, @Nonnull String value) {
|
public boolean has(@Nonnull String key, @Nonnull String value) {
|
||||||
return backing().containsEntry(sanitizeKey(key), sanitizeValue(value));
|
return backing().containsEntry(sanitizeKey(key), sanitizeValue(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nonnull
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasIgnoreCase(@Nonnull String key, @Nonnull String value) {
|
public boolean hasIgnoreCase(@Nonnull String key, @Nonnull String value) {
|
||||||
String v = sanitizeValue(value);
|
String v = sanitizeValue(value);
|
||||||
@ -90,6 +87,28 @@ abstract class AbstractContextSet implements ContextSet {
|
|||||||
return backing().size();
|
return backing().size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (o == this) return true;
|
||||||
|
if (!(o instanceof ContextSet)) return false;
|
||||||
|
final ContextSet other = (ContextSet) o;
|
||||||
|
|
||||||
|
final Multimap<String, String> otherContexts;
|
||||||
|
|
||||||
|
if (other instanceof MutableContextSet) {
|
||||||
|
otherContexts = ((MutableContextSet) other).backing();
|
||||||
|
} else {
|
||||||
|
otherContexts = other.toMultimap();
|
||||||
|
}
|
||||||
|
|
||||||
|
return backing().equals(otherContexts);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return backing().hashCode();
|
||||||
|
}
|
||||||
|
|
||||||
static String sanitizeKey(String key) {
|
static String sanitizeKey(String key) {
|
||||||
return checkNotNull(key, "key is null").toLowerCase().intern();
|
return checkNotNull(key, "key is null").toLowerCase().intern();
|
||||||
}
|
}
|
||||||
|
@ -277,7 +277,7 @@ public interface ContextSet {
|
|||||||
* @since 3.1
|
* @since 3.1
|
||||||
*/
|
*/
|
||||||
default boolean isSatisfiedBy(@Nonnull ContextSet other) {
|
default boolean isSatisfiedBy(@Nonnull ContextSet other) {
|
||||||
return isSatisfiedBy(other, true);
|
return this == other || isSatisfiedBy(other, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -289,6 +289,10 @@ public interface ContextSet {
|
|||||||
* @since 3.4
|
* @since 3.4
|
||||||
*/
|
*/
|
||||||
default boolean isSatisfiedBy(@Nonnull ContextSet other, boolean caseSensitive) {
|
default boolean isSatisfiedBy(@Nonnull ContextSet other, boolean caseSensitive) {
|
||||||
|
if (this == other) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
Preconditions.checkNotNull(other, "other");
|
Preconditions.checkNotNull(other, "other");
|
||||||
if (this.isEmpty()) {
|
if (this.isEmpty()) {
|
||||||
// this is empty, so is therefore always satisfied.
|
// this is empty, so is therefore always satisfied.
|
||||||
|
@ -40,9 +40,6 @@ import static com.google.common.base.Preconditions.checkNotNull;
|
|||||||
/**
|
/**
|
||||||
* An immutable implementation of {@link ContextSet}.
|
* An immutable implementation of {@link ContextSet}.
|
||||||
*
|
*
|
||||||
* <p>On construction, all keys/values are {@link String#intern()}ed, in order to increase
|
|
||||||
* comparison speed.</p>
|
|
||||||
*
|
|
||||||
* @since 2.16
|
* @since 2.16
|
||||||
*/
|
*/
|
||||||
public final class ImmutableContextSet extends AbstractContextSet implements ContextSet {
|
public final class ImmutableContextSet extends AbstractContextSet implements ContextSet {
|
||||||
@ -164,9 +161,11 @@ public final class ImmutableContextSet extends AbstractContextSet implements Con
|
|||||||
}
|
}
|
||||||
|
|
||||||
private final ImmutableSetMultimap<String, String> map;
|
private final ImmutableSetMultimap<String, String> map;
|
||||||
|
private final int hashCode;
|
||||||
|
|
||||||
ImmutableContextSet(ImmutableSetMultimap<String, String> contexts) {
|
ImmutableContextSet(ImmutableSetMultimap<String, String> contexts) {
|
||||||
this.map = contexts;
|
this.map = contexts;
|
||||||
|
this.hashCode = map.hashCode();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -216,26 +215,9 @@ public final class ImmutableContextSet extends AbstractContextSet implements Con
|
|||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object o) {
|
|
||||||
if (o == this) return true;
|
|
||||||
if (!(o instanceof ContextSet)) return false;
|
|
||||||
final ContextSet other = (ContextSet) o;
|
|
||||||
|
|
||||||
final Multimap<String, String> otherContexts;
|
|
||||||
|
|
||||||
if (other instanceof MutableContextSet) {
|
|
||||||
otherContexts = ((MutableContextSet) other).backing();
|
|
||||||
} else {
|
|
||||||
otherContexts = other.toMultimap();
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.map.equals(otherContexts);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return map.hashCode();
|
return hashCode;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -45,9 +45,6 @@ import static com.google.common.base.Preconditions.checkNotNull;
|
|||||||
/**
|
/**
|
||||||
* A mutable implementation of {@link ContextSet}.
|
* A mutable implementation of {@link ContextSet}.
|
||||||
*
|
*
|
||||||
* <p>On construction, all keys/values are {@link String#intern()}ed, in order to increase
|
|
||||||
* comparison speed.</p>
|
|
||||||
*
|
|
||||||
* @since 2.16
|
* @since 2.16
|
||||||
*/
|
*/
|
||||||
public final class MutableContextSet extends AbstractContextSet implements ContextSet {
|
public final class MutableContextSet extends AbstractContextSet implements ContextSet {
|
||||||
@ -338,28 +335,6 @@ public final class MutableContextSet extends AbstractContextSet implements Conte
|
|||||||
map.clear();
|
map.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean equals(Object o) {
|
|
||||||
if (o == this) return true;
|
|
||||||
if (!(o instanceof ContextSet)) return false;
|
|
||||||
final ContextSet other = (ContextSet) o;
|
|
||||||
|
|
||||||
final Multimap<String, String> otherContexts;
|
|
||||||
|
|
||||||
if (other instanceof MutableContextSet) {
|
|
||||||
otherContexts = ((MutableContextSet) other).map;
|
|
||||||
} else {
|
|
||||||
otherContexts = other.toMultimap();
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.map.equals(otherContexts);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int hashCode() {
|
|
||||||
return map.hashCode();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "MutableContextSet(contexts=" + this.map + ")";
|
return "MutableContextSet(contexts=" + this.map + ")";
|
||||||
|
@ -51,8 +51,6 @@ import ru.tehkode.permissions.PermissionGroup;
|
|||||||
import ru.tehkode.permissions.PermissionManager;
|
import ru.tehkode.permissions.PermissionManager;
|
||||||
import ru.tehkode.permissions.bukkit.PermissionsEx;
|
import ru.tehkode.permissions.bukkit.PermissionsEx;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -125,9 +123,9 @@ public class MigrationPermissionsEx extends SubCommand<Object> {
|
|||||||
|
|
||||||
// Get a list of all groups in a ladder
|
// Get a list of all groups in a ladder
|
||||||
List<String> ladder = manager.getRankLadder(rankLadder).entrySet().stream()
|
List<String> ladder = manager.getRankLadder(rankLadder).entrySet().stream()
|
||||||
.sorted(Comparator.<Map.Entry<Integer, PermissionGroup>>comparingInt(e -> e.getKey()).reversed())
|
.sorted(Comparator.<Map.Entry<Integer, PermissionGroup>>comparingInt(Map.Entry::getKey).reversed())
|
||||||
.map(e -> MigrationUtils.standardizeName(e.getValue().getName()))
|
.map(e -> MigrationUtils.standardizeName(e.getValue().getName()))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
track.setGroups(ladder);
|
track.setGroups(ladder);
|
||||||
plugin.getStorage().saveTrack(track);
|
plugin.getStorage().saveTrack(track);
|
||||||
|
@ -74,7 +74,8 @@ public class LPSubscriptionMap extends HashMap<String, Map<Permissible, Boolean>
|
|||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The get method is the only one which is actually used by SimplePluginManager
|
/*
|
||||||
|
* The get method is the only one which is actually used by SimplePluginManager
|
||||||
* we override it to always return a value - which means the null check in
|
* we override it to always return a value - which means the null check in
|
||||||
* subscribeToDefaultPerms always fails - soo, we don't have to worry too much
|
* subscribeToDefaultPerms always fails - soo, we don't have to worry too much
|
||||||
* about implementing #put.
|
* about implementing #put.
|
||||||
|
@ -47,7 +47,7 @@ public class PermissibleInjector {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* All permission checks made on standard Bukkit objects are effectively proxied to a
|
* All permission checks made on standard Bukkit objects are effectively proxied to a
|
||||||
* {@link PermissibleBase} object, held as a parameter on the object.
|
* {@link PermissibleBase} object, held as a variable on the object.
|
||||||
*
|
*
|
||||||
* This field is where the permissible is stored on a HumanEntity.
|
* This field is where the permissible is stored on a HumanEntity.
|
||||||
*/
|
*/
|
||||||
|
@ -249,7 +249,7 @@ public class CommandManager {
|
|||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
String permission = (String) c.getPermission().map(p -> ((CommandPermission) p).getPermission()).orElse("None");
|
String permission = (String) c.getPermission().map(p -> ((CommandPermission) p).getPermission()).orElse("None");
|
||||||
|
|
||||||
TextComponent component = TextUtils.fromLegacy("&3> &a" + String.format(c.getUsage(), label), Constants.FORMAT_CHAR)
|
TextComponent component = TextUtils.fromLegacy("&3> &a" + String.format(c.getUsage(), label), Constants.AMPERSAND_CHAR)
|
||||||
.toBuilder().applyDeep(comp -> {
|
.toBuilder().applyDeep(comp -> {
|
||||||
comp.hoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextUtils.fromLegacy(TextUtils.joinNewline(
|
comp.hoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextUtils.fromLegacy(TextUtils.joinNewline(
|
||||||
"&bCommand: &2" + c.getName(),
|
"&bCommand: &2" + c.getName(),
|
||||||
@ -258,7 +258,7 @@ public class CommandManager {
|
|||||||
"&bPermission: &2" + permission,
|
"&bPermission: &2" + permission,
|
||||||
" ",
|
" ",
|
||||||
"&7Click to auto-complete."
|
"&7Click to auto-complete."
|
||||||
), Constants.FORMAT_CHAR)));
|
), Constants.AMPERSAND_CHAR)));
|
||||||
comp.clickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, String.format(c.getUsage(), label)));
|
comp.clickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, String.format(c.getUsage(), label)));
|
||||||
}).build();
|
}).build();
|
||||||
sender.sendMessage(component);
|
sender.sendMessage(component);
|
||||||
|
@ -84,7 +84,7 @@ public class MetaAddChatMeta extends SharedSubCommand {
|
|||||||
|
|
||||||
DataMutateResult result = holder.setPermission(NodeFactory.makeChatMetaNode(type, priority, meta).withExtraContext(context).build());
|
DataMutateResult result = holder.setPermission(NodeFactory.makeChatMetaNode(type, priority, meta).withExtraContext(context).build());
|
||||||
if (result.asBoolean()) {
|
if (result.asBoolean()) {
|
||||||
TextComponent.Builder builder = TextUtils.fromLegacy(Message.ADD_CHATMETA_SUCCESS.asString(plugin.getLocaleManager(), holder.getFriendlyName(), type.name().toLowerCase(), meta, priority, CommandUtils.contextSetToString(context)), Constants.COLOR_CHAR).toBuilder();
|
TextComponent.Builder builder = TextUtils.fromLegacy(Message.ADD_CHATMETA_SUCCESS.asString(plugin.getLocaleManager(), holder.getFriendlyName(), type.name().toLowerCase(), meta, priority, CommandUtils.contextSetToString(context)), Constants.SECTION_CHAR).toBuilder();
|
||||||
HoverEvent event = new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextUtils.fromLegacy(
|
HoverEvent event = new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextUtils.fromLegacy(
|
||||||
"¥3Raw " + type.name().toLowerCase() + ": ¥r" + meta,
|
"¥3Raw " + type.name().toLowerCase() + ": ¥r" + meta,
|
||||||
'¥'
|
'¥'
|
||||||
|
@ -94,7 +94,7 @@ public class MetaAddTempChatMeta extends SharedSubCommand {
|
|||||||
if (ret.getKey().asBoolean()) {
|
if (ret.getKey().asBoolean()) {
|
||||||
duration = ret.getValue().getExpiryUnixTime();
|
duration = ret.getValue().getExpiryUnixTime();
|
||||||
|
|
||||||
TextComponent.Builder builder = TextUtils.fromLegacy(Message.ADD_TEMP_CHATMETA_SUCCESS.asString(plugin.getLocaleManager(), holder.getFriendlyName(), type.name().toLowerCase(), meta, priority, DateUtil.formatDateDiff(duration), CommandUtils.contextSetToString(context)), Constants.COLOR_CHAR).toBuilder();
|
TextComponent.Builder builder = TextUtils.fromLegacy(Message.ADD_TEMP_CHATMETA_SUCCESS.asString(plugin.getLocaleManager(), holder.getFriendlyName(), type.name().toLowerCase(), meta, priority, DateUtil.formatDateDiff(duration), CommandUtils.contextSetToString(context)), Constants.SECTION_CHAR).toBuilder();
|
||||||
HoverEvent event = new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextUtils.fromLegacy(
|
HoverEvent event = new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextUtils.fromLegacy(
|
||||||
"¥3Raw " + type.name().toLowerCase() + ": ¥r" + meta,
|
"¥3Raw " + type.name().toLowerCase() + ": ¥r" + meta,
|
||||||
'¥'
|
'¥'
|
||||||
|
@ -125,11 +125,11 @@ public class MetaInfo extends SharedSubCommand {
|
|||||||
String location = processLocation(m, holder);
|
String location = processLocation(m, holder);
|
||||||
if (m.hasSpecificContext()) {
|
if (m.hasSpecificContext()) {
|
||||||
String context = CommandUtils.getAppendableNodeContextString(m);
|
String context = CommandUtils.getAppendableNodeContextString(m);
|
||||||
TextComponent.Builder builder = TextUtils.fromLegacy(Message.META_ENTRY_WITH_CONTEXT.asString(sender.getPlatform().getLocaleManager(), m.getMeta().getKey(), m.getMeta().getValue(), location, context), Constants.COLOR_CHAR).toBuilder();
|
TextComponent.Builder builder = TextUtils.fromLegacy(Message.META_ENTRY_WITH_CONTEXT.asString(sender.getPlatform().getLocaleManager(), m.getMeta().getKey(), m.getMeta().getValue(), location, context), Constants.SECTION_CHAR).toBuilder();
|
||||||
builder.applyDeep(makeFancy(holder, label, m));
|
builder.applyDeep(makeFancy(holder, label, m));
|
||||||
sender.sendMessage(builder.build());
|
sender.sendMessage(builder.build());
|
||||||
} else {
|
} else {
|
||||||
TextComponent.Builder builder = TextUtils.fromLegacy(Message.META_ENTRY.asString(sender.getPlatform().getLocaleManager(), m.getMeta().getKey(), m.getMeta().getValue(), location), Constants.COLOR_CHAR).toBuilder();
|
TextComponent.Builder builder = TextUtils.fromLegacy(Message.META_ENTRY.asString(sender.getPlatform().getLocaleManager(), m.getMeta().getKey(), m.getMeta().getValue(), location), Constants.SECTION_CHAR).toBuilder();
|
||||||
builder.applyDeep(makeFancy(holder, label, m));
|
builder.applyDeep(makeFancy(holder, label, m));
|
||||||
sender.sendMessage(builder.build());
|
sender.sendMessage(builder.build());
|
||||||
}
|
}
|
||||||
@ -141,11 +141,11 @@ public class MetaInfo extends SharedSubCommand {
|
|||||||
String location = processLocation(e.getValue(), holder);
|
String location = processLocation(e.getValue(), holder);
|
||||||
if (e.getValue().hasSpecificContext()) {
|
if (e.getValue().hasSpecificContext()) {
|
||||||
String context = CommandUtils.getAppendableNodeContextString(e.getValue());
|
String context = CommandUtils.getAppendableNodeContextString(e.getValue());
|
||||||
TextComponent.Builder builder = TextUtils.fromLegacy(Message.CHAT_META_ENTRY_WITH_CONTEXT.asString(sender.getPlatform().getLocaleManager(), e.getKey(), type.getEntry(e.getValue()).getValue(), location, context), Constants.COLOR_CHAR).toBuilder();
|
TextComponent.Builder builder = TextUtils.fromLegacy(Message.CHAT_META_ENTRY_WITH_CONTEXT.asString(sender.getPlatform().getLocaleManager(), e.getKey(), type.getEntry(e.getValue()).getValue(), location, context), Constants.SECTION_CHAR).toBuilder();
|
||||||
builder.applyDeep(makeFancy(type, holder, label, e.getValue()));
|
builder.applyDeep(makeFancy(type, holder, label, e.getValue()));
|
||||||
sender.sendMessage(builder.build());
|
sender.sendMessage(builder.build());
|
||||||
} else {
|
} else {
|
||||||
TextComponent.Builder builder = TextUtils.fromLegacy(Message.CHAT_META_ENTRY.asString(sender.getPlatform().getLocaleManager(), e.getKey(), type.getEntry(e.getValue()).getValue(), location), Constants.COLOR_CHAR).toBuilder();
|
TextComponent.Builder builder = TextUtils.fromLegacy(Message.CHAT_META_ENTRY.asString(sender.getPlatform().getLocaleManager(), e.getKey(), type.getEntry(e.getValue()).getValue(), location), Constants.SECTION_CHAR).toBuilder();
|
||||||
builder.applyDeep(makeFancy(type, holder, label, e.getValue()));
|
builder.applyDeep(makeFancy(type, holder, label, e.getValue()));
|
||||||
sender.sendMessage(builder.build());
|
sender.sendMessage(builder.build());
|
||||||
}
|
}
|
||||||
|
@ -103,7 +103,7 @@ public class MetaRemoveChatMeta extends SharedSubCommand {
|
|||||||
DataMutateResult result = holder.unsetPermission(NodeFactory.makeChatMetaNode(type, priority, meta).withExtraContext(context).build());
|
DataMutateResult result = holder.unsetPermission(NodeFactory.makeChatMetaNode(type, priority, meta).withExtraContext(context).build());
|
||||||
|
|
||||||
if (result.asBoolean()) {
|
if (result.asBoolean()) {
|
||||||
TextComponent.Builder builder = TextUtils.fromLegacy(Message.REMOVE_CHATMETA_SUCCESS.asString(plugin.getLocaleManager(), holder.getFriendlyName(), type.name().toLowerCase(), meta, priority, CommandUtils.contextSetToString(context)), Constants.COLOR_CHAR).toBuilder();
|
TextComponent.Builder builder = TextUtils.fromLegacy(Message.REMOVE_CHATMETA_SUCCESS.asString(plugin.getLocaleManager(), holder.getFriendlyName(), type.name().toLowerCase(), meta, priority, CommandUtils.contextSetToString(context)), Constants.SECTION_CHAR).toBuilder();
|
||||||
HoverEvent event = new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextUtils.fromLegacy(
|
HoverEvent event = new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextUtils.fromLegacy(
|
||||||
"¥3Raw " + type.name().toLowerCase() + ": ¥r" + meta,
|
"¥3Raw " + type.name().toLowerCase() + ": ¥r" + meta,
|
||||||
'¥'
|
'¥'
|
||||||
|
@ -103,7 +103,7 @@ public class MetaRemoveTempChatMeta extends SharedSubCommand {
|
|||||||
DataMutateResult result = holder.unsetPermission(NodeFactory.makeChatMetaNode(type, priority, meta).setExpiry(10L).withExtraContext(context).build());
|
DataMutateResult result = holder.unsetPermission(NodeFactory.makeChatMetaNode(type, priority, meta).setExpiry(10L).withExtraContext(context).build());
|
||||||
|
|
||||||
if (result.asBoolean()) {
|
if (result.asBoolean()) {
|
||||||
TextComponent.Builder builder = TextUtils.fromLegacy(Message.REMOVE_TEMP_CHATMETA_SUCCESS.asString(plugin.getLocaleManager(), holder.getFriendlyName(), type.name().toLowerCase(), meta, priority, CommandUtils.contextSetToString(context)), Constants.COLOR_CHAR).toBuilder();
|
TextComponent.Builder builder = TextUtils.fromLegacy(Message.REMOVE_TEMP_CHATMETA_SUCCESS.asString(plugin.getLocaleManager(), holder.getFriendlyName(), type.name().toLowerCase(), meta, priority, CommandUtils.contextSetToString(context)), Constants.SECTION_CHAR).toBuilder();
|
||||||
HoverEvent event = new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextUtils.fromLegacy(
|
HoverEvent event = new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextUtils.fromLegacy(
|
||||||
"¥3Raw " + type.name().toLowerCase() + ": ¥r" + meta,
|
"¥3Raw " + type.name().toLowerCase() + ": ¥r" + meta,
|
||||||
'¥'
|
'¥'
|
||||||
|
@ -92,7 +92,7 @@ public class MetaSetTemp extends SharedSubCommand {
|
|||||||
holder.clearMetaKeys(key, context, true);
|
holder.clearMetaKeys(key, context, true);
|
||||||
duration = holder.setPermission(n, modifier).getValue().getExpiryUnixTime();
|
duration = holder.setPermission(n, modifier).getValue().getExpiryUnixTime();
|
||||||
|
|
||||||
TextComponent.Builder builder = TextUtils.fromLegacy(Message.SET_META_TEMP_SUCCESS.asString(plugin.getLocaleManager(), key, value, holder.getFriendlyName(), DateUtil.formatDateDiff(duration), CommandUtils.contextSetToString(context)), Constants.COLOR_CHAR).toBuilder();
|
TextComponent.Builder builder = TextUtils.fromLegacy(Message.SET_META_TEMP_SUCCESS.asString(plugin.getLocaleManager(), key, value, holder.getFriendlyName(), DateUtil.formatDateDiff(duration), CommandUtils.contextSetToString(context)), Constants.SECTION_CHAR).toBuilder();
|
||||||
HoverEvent event = new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextUtils.fromLegacy(
|
HoverEvent event = new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextUtils.fromLegacy(
|
||||||
TextUtils.joinNewline("¥3Raw key: ¥r" + key, "¥3Raw value: ¥r" + value),
|
TextUtils.joinNewline("¥3Raw key: ¥r" + key, "¥3Raw value: ¥r" + value),
|
||||||
'¥'
|
'¥'
|
||||||
|
@ -118,7 +118,7 @@ public class ParentInfo extends SharedSubCommand {
|
|||||||
s += "\n&2 expires in " + DateUtil.formatDateDiff(node.getExpiryUnixTime());
|
s += "\n&2 expires in " + DateUtil.formatDateDiff(node.getExpiryUnixTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
TextComponent message = TextUtils.fromLegacy(s, Constants.FORMAT_CHAR).toBuilder().applyDeep(makeFancy(holder, label, node)).build();
|
TextComponent message = TextUtils.fromLegacy(s, Constants.AMPERSAND_CHAR).toBuilder().applyDeep(makeFancy(holder, label, node)).build();
|
||||||
sender.sendMessage(message);
|
sender.sendMessage(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -140,7 +140,7 @@ public class ParentInfo extends SharedSubCommand {
|
|||||||
"&3> &f" + node.getGroupName(),
|
"&3> &f" + node.getGroupName(),
|
||||||
" ",
|
" ",
|
||||||
"&7Click to remove this parent from " + holder.getFriendlyName()
|
"&7Click to remove this parent from " + holder.getFriendlyName()
|
||||||
), Constants.FORMAT_CHAR));
|
), Constants.AMPERSAND_CHAR));
|
||||||
|
|
||||||
String command = "/" + label + " " + NodeFactory.nodeAsCommand(node, holder.getType().isGroup() ? holder.getObjectName() : holder.getFriendlyName(), holder.getType(), false);
|
String command = "/" + label + " " + NodeFactory.nodeAsCommand(node, holder.getType().isGroup() ? holder.getObjectName() : holder.getFriendlyName(), holder.getType(), false);
|
||||||
ClickEvent clickEvent = new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, command);
|
ClickEvent clickEvent = new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, command);
|
||||||
|
@ -123,7 +123,7 @@ public class PermissionInfo extends SharedSubCommand {
|
|||||||
s += "\n&2- expires in " + DateUtil.formatDateDiff(node.getExpiryUnixTime());
|
s += "\n&2- expires in " + DateUtil.formatDateDiff(node.getExpiryUnixTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
TextComponent message = TextUtils.fromLegacy(s, Constants.FORMAT_CHAR).toBuilder().applyDeep(makeFancy(holder, label, node)).build();
|
TextComponent message = TextUtils.fromLegacy(s, Constants.AMPERSAND_CHAR).toBuilder().applyDeep(makeFancy(holder, label, node)).build();
|
||||||
sender.sendMessage(message);
|
sender.sendMessage(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -140,7 +140,7 @@ public class GroupListMembers extends SubCommand<Group> {
|
|||||||
|
|
||||||
for (Map.Entry<String, HeldPermission<T>> ent : mappedContent) {
|
for (Map.Entry<String, HeldPermission<T>> ent : mappedContent) {
|
||||||
String s = "&3> &b" + ent.getKey() + " " + getNodeExpiryString(ent.getValue().asNode()) + CommandUtils.getAppendableNodeContextString(ent.getValue().asNode());
|
String s = "&3> &b" + ent.getKey() + " " + getNodeExpiryString(ent.getValue().asNode()) + CommandUtils.getAppendableNodeContextString(ent.getValue().asNode());
|
||||||
TextComponent message = TextUtils.fromLegacy(s, Constants.FORMAT_CHAR).toBuilder().applyDeep(makeFancy(ent.getKey(), holderType, label, ent.getValue())).build();
|
TextComponent message = TextUtils.fromLegacy(s, Constants.AMPERSAND_CHAR).toBuilder().applyDeep(makeFancy(ent.getKey(), holderType, label, ent.getValue())).build();
|
||||||
sender.sendMessage(message);
|
sender.sendMessage(message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -158,7 +158,7 @@ public class GroupListMembers extends SubCommand<Group> {
|
|||||||
"&3> &b" + perm.asNode().getGroupName(),
|
"&3> &b" + perm.asNode().getGroupName(),
|
||||||
" ",
|
" ",
|
||||||
"&7Click to remove this parent from " + holderName
|
"&7Click to remove this parent from " + holderName
|
||||||
), Constants.FORMAT_CHAR));
|
), Constants.AMPERSAND_CHAR));
|
||||||
|
|
||||||
String command = "/" + label + " " + NodeFactory.nodeAsCommand(perm.asNode(), holderName, holderType, false);
|
String command = "/" + label + " " + NodeFactory.nodeAsCommand(perm.asNode(), holderName, holderType, false);
|
||||||
ClickEvent clickEvent = new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, command);
|
ClickEvent clickEvent = new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, command);
|
||||||
|
@ -73,13 +73,13 @@ public class ListGroups extends SingleCommand {
|
|||||||
component = TextUtils.fromLegacy(Message.GROUPS_LIST_ENTRY.asString(plugin.getLocaleManager(),
|
component = TextUtils.fromLegacy(Message.GROUPS_LIST_ENTRY.asString(plugin.getLocaleManager(),
|
||||||
group.getFriendlyName(),
|
group.getFriendlyName(),
|
||||||
group.getWeight().orElse(0)
|
group.getWeight().orElse(0)
|
||||||
), Constants.COLOR_CHAR);
|
), Constants.SECTION_CHAR);
|
||||||
} else {
|
} else {
|
||||||
component = TextUtils.fromLegacy(Message.GROUPS_LIST_ENTRY_WITH_TRACKS.asString(plugin.getLocaleManager(),
|
component = TextUtils.fromLegacy(Message.GROUPS_LIST_ENTRY_WITH_TRACKS.asString(plugin.getLocaleManager(),
|
||||||
group.getFriendlyName(),
|
group.getFriendlyName(),
|
||||||
group.getWeight().orElse(0),
|
group.getWeight().orElse(0),
|
||||||
CommandUtils.toCommaSep(tracks)
|
CommandUtils.toCommaSep(tracks)
|
||||||
), Constants.COLOR_CHAR);
|
), Constants.SECTION_CHAR);
|
||||||
}
|
}
|
||||||
|
|
||||||
component = component.toBuilder().applyDeep(c -> {
|
component = component.toBuilder().applyDeep(c -> {
|
||||||
|
@ -139,7 +139,7 @@ public class SearchCommand extends SingleCommand {
|
|||||||
|
|
||||||
for (Map.Entry<String, HeldPermission<T>> ent : mappedContent) {
|
for (Map.Entry<String, HeldPermission<T>> ent : mappedContent) {
|
||||||
String s = "&3> &b" + ent.getKey() + " &7- " + (ent.getValue().getValue() ? "&a" : "&c") + ent.getValue().getValue() + getNodeExpiryString(ent.getValue().asNode()) + CommandUtils.getAppendableNodeContextString(ent.getValue().asNode());
|
String s = "&3> &b" + ent.getKey() + " &7- " + (ent.getValue().getValue() ? "&a" : "&c") + ent.getValue().getValue() + getNodeExpiryString(ent.getValue().asNode()) + CommandUtils.getAppendableNodeContextString(ent.getValue().asNode());
|
||||||
TextComponent message = TextUtils.fromLegacy(s, Constants.FORMAT_CHAR).toBuilder().applyDeep(makeFancy(ent.getKey(), holderType, label, ent.getValue())).build();
|
TextComponent message = TextUtils.fromLegacy(s, Constants.AMPERSAND_CHAR).toBuilder().applyDeep(makeFancy(ent.getKey(), holderType, label, ent.getValue())).build();
|
||||||
sender.sendMessage(message);
|
sender.sendMessage(message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -157,7 +157,7 @@ public class SearchCommand extends SingleCommand {
|
|||||||
"&3> " + (perm.asNode().getValuePrimitive() ? "&a" : "&c") + perm.asNode().getPermission(),
|
"&3> " + (perm.asNode().getValuePrimitive() ? "&a" : "&c") + perm.asNode().getPermission(),
|
||||||
" ",
|
" ",
|
||||||
"&7Click to remove this node from " + holderName
|
"&7Click to remove this node from " + holderName
|
||||||
), Constants.FORMAT_CHAR));
|
), Constants.AMPERSAND_CHAR));
|
||||||
|
|
||||||
String command = "/" + label + " " + NodeFactory.nodeAsCommand(perm.asNode(), holderName, holderType, false);
|
String command = "/" + label + " " + NodeFactory.nodeAsCommand(perm.asNode(), holderName, holderType, false);
|
||||||
ClickEvent clickEvent = new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, command);
|
ClickEvent clickEvent = new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, command);
|
||||||
|
@ -41,7 +41,7 @@ public class Constants {
|
|||||||
public static final UUID IMPORT_UUID = UUID.fromString("11111111-1111-1111-1111-111111111111");
|
public static final UUID IMPORT_UUID = UUID.fromString("11111111-1111-1111-1111-111111111111");
|
||||||
public static final String IMPORT_NAME = "Import";
|
public static final String IMPORT_NAME = "Import";
|
||||||
|
|
||||||
public static final char COLOR_CHAR = '\u00A7';
|
public static final char SECTION_CHAR = '\u00A7'; // §
|
||||||
public static final char FORMAT_CHAR = '&';
|
public static final char AMPERSAND_CHAR = '&';
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -46,98 +46,24 @@ public class DataConstraints {
|
|||||||
public static final int MAX_SERVER_LENGTH = 36;
|
public static final int MAX_SERVER_LENGTH = 36;
|
||||||
public static final int MAX_WORLD_LENGTH = 36;
|
public static final int MAX_WORLD_LENGTH = 36;
|
||||||
|
|
||||||
public static final Predicate<String> PERMISSION_TEST = s -> {
|
public static final Predicate<String> PERMISSION_TEST = s -> s.length() > 0 && s.length() <= MAX_PERMISSION_LENGTH;
|
||||||
if (s.length() <= 0 || s.length() > MAX_PERMISSION_LENGTH) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
public static final Predicate<String> PLAYER_USERNAME_TEST = s -> s.length() > 0 && s.length() <= MAX_PLAYER_USERNAME_LENGTH && !PLAYER_USERNAME_INVALID_CHAR_MATCHER.matcher(s).find();
|
||||||
};
|
|
||||||
|
|
||||||
public static final Predicate<String> PLAYER_USERNAME_TEST = s -> {
|
public static final Predicate<String> PLAYER_USERNAME_TEST_LENIENT = s -> s.length() > 0 && s.length() <= MAX_PLAYER_USERNAME_LENGTH;
|
||||||
if (s.length() <= 0 || s.length() > MAX_PLAYER_USERNAME_LENGTH) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PLAYER_USERNAME_INVALID_CHAR_MATCHER.matcher(s).find()) {
|
public static final Predicate<String> GROUP_NAME_TEST = s -> s.length() > 0 && s.length() <= MAX_GROUP_NAME_LENGTH && !s.contains(" ");
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
public static final Predicate<String> GROUP_NAME_TEST_ALLOW_SPACE = s -> s.length() > 0 && s.length() <= MAX_GROUP_NAME_LENGTH;
|
||||||
};
|
|
||||||
|
|
||||||
public static final Predicate<String> PLAYER_USERNAME_TEST_LENIENT = s -> {
|
public static final Predicate<String> TRACK_NAME_TEST = s -> s.length() > 0 && s.length() <= MAX_TRACK_NAME_LENGTH && !s.contains(" ");
|
||||||
if (s.length() <= 0 || s.length() > MAX_PLAYER_USERNAME_LENGTH) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
public static final Predicate<String> TRACK_NAME_TEST_ALLOW_SPACE = s -> s.length() > 0 && s.length() <= MAX_TRACK_NAME_LENGTH;
|
||||||
};
|
|
||||||
|
|
||||||
public static final Predicate<String> GROUP_NAME_TEST = s -> {
|
|
||||||
if (s.length() <= 0 || s.length() > MAX_GROUP_NAME_LENGTH) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (s.contains(" ")) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
|
|
||||||
public static final Predicate<String> GROUP_NAME_TEST_ALLOW_SPACE = s -> {
|
|
||||||
if (s.length() <= 0 || s.length() > MAX_GROUP_NAME_LENGTH) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
|
|
||||||
public static final Predicate<String> TRACK_NAME_TEST = s -> {
|
|
||||||
if (s.length() <= 0 || s.length() > MAX_TRACK_NAME_LENGTH) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (s.contains(" ")) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
|
|
||||||
public static final Predicate<String> TRACK_NAME_TEST_ALLOW_SPACE = s -> {
|
|
||||||
if (s.length() <= 0 || s.length() > MAX_TRACK_NAME_LENGTH) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
|
|
||||||
public static final Predicate<Long> TIME_TEST = unixTime -> !DateUtil.shouldExpire(unixTime);
|
public static final Predicate<Long> TIME_TEST = unixTime -> !DateUtil.shouldExpire(unixTime);
|
||||||
|
|
||||||
public static final Predicate<String> SERVER_NAME_TEST = s -> {
|
public static final Predicate<String> SERVER_NAME_TEST = s -> s.length() > 0 && s.length() <= MAX_SERVER_LENGTH && !s.contains(" ");
|
||||||
if (s.length() <= 0 || s.length() > MAX_SERVER_LENGTH) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (s.contains(" ")) {
|
public static final Predicate<String> WORLD_NAME_TEST = s -> s.length() > 0 && s.length() <= MAX_WORLD_LENGTH && !s.contains(" ");
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
|
|
||||||
public static final Predicate<String> WORLD_NAME_TEST = s -> {
|
|
||||||
if (s.length() <= 0 || s.length() > MAX_WORLD_LENGTH) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (s.contains(" ")) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -57,7 +57,7 @@ public abstract class AbstractContextManager<T> implements ContextManager<T> {
|
|||||||
protected final LuckPermsPlugin plugin;
|
protected final LuckPermsPlugin plugin;
|
||||||
private final Class<T> subjectClass;
|
private final Class<T> subjectClass;
|
||||||
|
|
||||||
private final List<ContextCalculator<T>> calculators = new CopyOnWriteArrayList<>();
|
private final List<ContextCalculator<? super T>> calculators = new CopyOnWriteArrayList<>();
|
||||||
private final List<StaticContextCalculator> staticCalculators = new CopyOnWriteArrayList<>();
|
private final List<StaticContextCalculator> staticCalculators = new CopyOnWriteArrayList<>();
|
||||||
|
|
||||||
// caches context lookups
|
// caches context lookups
|
||||||
@ -140,16 +140,14 @@ public abstract class AbstractContextManager<T> implements ContextManager<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerCalculator(ContextCalculator<T> calculator) {
|
public void registerCalculator(ContextCalculator<? super T> calculator) {
|
||||||
// calculators registered first should have priority (and be checked last.)
|
// calculators registered first should have priority (and be checked last.)
|
||||||
calculators.add(0, calculator);
|
calculators.add(0, calculator);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerStaticCalculator(StaticContextCalculator calculator) {
|
public void registerStaticCalculator(StaticContextCalculator calculator) {
|
||||||
//noinspection unchecked
|
registerCalculator(calculator);
|
||||||
registerCalculator((ContextCalculator<T>) calculator);
|
|
||||||
|
|
||||||
staticCalculators.add(0, calculator);
|
staticCalculators.add(0, calculator);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -168,7 +166,7 @@ public abstract class AbstractContextManager<T> implements ContextManager<T> {
|
|||||||
public Contexts load(T subject) {
|
public Contexts load(T subject) {
|
||||||
MutableContextSet accumulator = MutableContextSet.create();
|
MutableContextSet accumulator = MutableContextSet.create();
|
||||||
|
|
||||||
for (ContextCalculator<T> calculator : calculators) {
|
for (ContextCalculator<? super T> calculator : calculators) {
|
||||||
try {
|
try {
|
||||||
MutableContextSet ret = calculator.giveApplicableContext(subject, accumulator);
|
MutableContextSet ret = calculator.giveApplicableContext(subject, accumulator);
|
||||||
//noinspection ConstantConditions
|
//noinspection ConstantConditions
|
||||||
|
@ -108,7 +108,7 @@ public interface ContextManager<T> {
|
|||||||
*
|
*
|
||||||
* @param calculator the calculator
|
* @param calculator the calculator
|
||||||
*/
|
*/
|
||||||
void registerCalculator(ContextCalculator<T> calculator);
|
void registerCalculator(ContextCalculator<? super T> calculator);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Registers a static context calculator with the manager.
|
* Registers a static context calculator with the manager.
|
||||||
|
@ -134,6 +134,7 @@ public final class NodeModel {
|
|||||||
return of(permission, value, server, world, expiry, contexts);
|
return of(permission, value, server, world, expiry, contexts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean equals(Object o) {
|
public boolean equals(Object o) {
|
||||||
if (o == this) return true;
|
if (o == this) return true;
|
||||||
if (!(o instanceof NodeModel)) return false;
|
if (!(o instanceof NodeModel)) return false;
|
||||||
@ -147,6 +148,7 @@ public final class NodeModel {
|
|||||||
this.getContexts().equals(other.getContexts());
|
this.getContexts().equals(other.getContexts());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
final int PRIME = 59;
|
final int PRIME = 59;
|
||||||
int result = 1;
|
int result = 1;
|
||||||
@ -159,6 +161,7 @@ public final class NodeModel {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "NodeModel(" +
|
return "NodeModel(" +
|
||||||
"permission=" + this.getPermission() + ", " +
|
"permission=" + this.getPermission() + ", " +
|
||||||
|
@ -95,5 +95,4 @@ public class NodeWithContextComparator implements Comparator<LocalizedNode> {
|
|||||||
return CollationKeyCache.compareStrings(o1.getPermission(), o2.getPermission()) == 1 ? -1 : 1;
|
return CollationKeyCache.compareStrings(o1.getPermission(), o2.getPermission()) == 1 ? -1 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -47,10 +47,6 @@ public class ShorthandParser {
|
|||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static Set<String> parseShorthand(String s) {
|
public static Set<String> parseShorthand(String s) {
|
||||||
return parseShorthand(s, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Set<String> parseShorthand(String s, boolean removeSelf) {
|
|
||||||
Set<String> results = new HashSet<>();
|
Set<String> results = new HashSet<>();
|
||||||
results.add(s);
|
results.add(s);
|
||||||
|
|
||||||
@ -75,9 +71,8 @@ public class ShorthandParser {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (removeSelf) {
|
// remove self
|
||||||
results.remove(s);
|
results.remove(s);
|
||||||
}
|
|
||||||
|
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
@ -151,7 +151,7 @@ public class VerboseListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// send the message
|
// send the message
|
||||||
HoverEvent e = new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextUtils.fromLegacy(TextUtils.joinNewline(hover.stream()), Constants.FORMAT_CHAR));
|
HoverEvent e = new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextUtils.fromLegacy(TextUtils.joinNewline(hover.stream()), Constants.AMPERSAND_CHAR));
|
||||||
TextComponent msg = textComponent.toBuilder().applyDeep(comp -> comp.hoverEvent(e)).build();
|
TextComponent msg = textComponent.toBuilder().applyDeep(comp -> comp.hoverEvent(e)).build();
|
||||||
notifiedSender.sendMessage(msg);
|
notifiedSender.sendMessage(msg);
|
||||||
}
|
}
|
||||||
|
@ -40,6 +40,7 @@ import java.util.stream.Collectors;
|
|||||||
* @deprecated Because this format is no longer being used to store data.
|
* @deprecated Because this format is no longer being used to store data.
|
||||||
* @see SubjectStorageModel
|
* @see SubjectStorageModel
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("DeprecatedIsStillUsed")
|
||||||
@ToString
|
@ToString
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public class SubjectDataHolder {
|
public class SubjectDataHolder {
|
||||||
|
Loading…
Reference in New Issue
Block a user