From 8fa629a2436b222d14b424e13fdaf685fe478493 Mon Sep 17 00:00:00 2001 From: Luck Date: Sat, 25 Jan 2020 12:59:41 +0000 Subject: [PATCH] Fix/catch IllegalArgumentException when estimating potential world contexts (#1951) --- .../bukkit/context/WorldCalculator.java | 5 ++- .../common/context/ContextManager.java | 31 +++++++++++-------- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/context/WorldCalculator.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/context/WorldCalculator.java index c3ce17e6b..a7ac2569a 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/context/WorldCalculator.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/context/WorldCalculator.java @@ -64,7 +64,10 @@ public class WorldCalculator implements ContextCalculator { List worlds = this.plugin.getBootstrap().getServer().getWorlds(); ImmutableContextSet.Builder builder = ImmutableContextSet.builder(); for (World world : worlds) { - builder.add(DefaultContextKeys.WORLD_KEY, world.getName().toLowerCase()); + String name = world.getName().toLowerCase(); + if (!name.trim().isEmpty()) { + builder.add(DefaultContextKeys.WORLD_KEY, name); + } } return builder.build(); } diff --git a/common/src/main/java/me/lucko/luckperms/common/context/ContextManager.java b/common/src/main/java/me/lucko/luckperms/common/context/ContextManager.java index 24ffb939c..3e423673d 100644 --- a/common/src/main/java/me/lucko/luckperms/common/context/ContextManager.java +++ b/common/src/main/java/me/lucko/luckperms/common/context/ContextManager.java @@ -31,6 +31,7 @@ import me.lucko.luckperms.common.context.contextset.ImmutableContextSetImpl; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import net.luckperms.api.context.ContextCalculator; +import net.luckperms.api.context.ContextSet; import net.luckperms.api.context.ImmutableContextSet; import net.luckperms.api.context.StaticContextCalculator; import net.luckperms.api.query.QueryOptions; @@ -62,14 +63,6 @@ public abstract class ContextManager { this.subjectClass = subjectClass; } - public ImmutableContextSet getPotentialContexts() { - ImmutableContextSet.Builder builder = ImmutableContextSet.builder(); - for (ContextCalculator calculator : this.calculators) { - builder.addAll(calculator.estimatePotentialContexts()); - } - return builder.build(); - } - public Class getSubjectClass() { return this.subjectClass; } @@ -119,22 +112,19 @@ public abstract class ContextManager { protected QueryOptions calculate(T subject) { ImmutableContextSet.Builder accumulator = new ImmutableContextSetImpl.BuilderImpl(); - for (ContextCalculator calculator : this.calculators) { try { calculator.calculate(subject, accumulator::add); } catch (Throwable e) { - ContextManager.this.plugin.getLogger().warn("An exception was thrown by " + getCalculatorClass(calculator) + " whilst calculating the context of subject " + subject); + this.plugin.getLogger().warn("An exception was thrown by " + getCalculatorClass(calculator) + " whilst calculating the context of subject " + subject); e.printStackTrace(); } } - return formQueryOptions(subject, accumulator.build()); } private QueryOptions calculateStatic() { ImmutableContextSet.Builder accumulator = new ImmutableContextSetImpl.BuilderImpl(); - for (StaticContextCalculator calculator : this.staticCalculators) { try { calculator.calculate(accumulator::add); @@ -143,10 +133,25 @@ public abstract class ContextManager { e.printStackTrace(); } } - return formQueryOptions(accumulator.build()); } + public ImmutableContextSet getPotentialContexts() { + ImmutableContextSet.Builder builder = ImmutableContextSet.builder(); + for (ContextCalculator calculator : this.calculators) { + ContextSet potentialContexts; + try { + potentialContexts = calculator.estimatePotentialContexts(); + } catch (Throwable e) { + this.plugin.getLogger().warn("An exception was thrown by " + getCalculatorClass(calculator) + " whilst estimating potential contexts"); + e.printStackTrace(); + continue; + } + builder.addAll(potentialContexts); + } + return builder.build(); + } + private final class StaticLookupCache extends ExpiringCache { StaticLookupCache() { super(50L, TimeUnit.MILLISECONDS);