public interface ContextCalculator<T extends Contextual>
Context
s applicable for a Contextual
.
Implementations of this interface should satisfy the following requirements:
Contextual.getActiveContexts()
.Calculators should be registered with the corresponding
ContextualService
using
ContextualService.registerContextCalculator(ContextCalculator)
.
Context lookups for instances provided by the platform,
(e.g. Player
) are delegated to the active PermissionService
.
Plugins wishing to provide contexts for these instances should register
calculators here.
When the provider of a ContextualService
changes, calculators must
be registered again. Plugins should listen to the
ChangeServiceProviderEvent
to ensure their calculators are registered
with any replacement providers.
Modifier and Type | Method and Description |
---|---|
void |
accumulateContexts(T target,
Set<Context> accumulator)
Adds any
Context s this calculator determines to be applicable to
the target contextual. |
static <T extends Contextual> |
forSingleContext(String key,
Function<T,String> valueFunction)
Creates a new
ContextCalculator that provides a single context. |
default boolean |
matches(Context context,
T target)
Checks if a
Context is currently applicable to a
Contextual . |
static <T extends Contextual> ContextCalculator<T> forSingleContext(String key, Function<T,String> valueFunction)
ContextCalculator
that provides a single context.T
- The contextual typekey
- The key of the context provided by the calculatorvalueFunction
- The function used to compute the corresponding value
for each query. A context will not be "accumulated"
if the value returned is null.void accumulateContexts(T target, Set<Context> accumulator)
Context
s this calculator determines to be applicable to
the target
contextual.
Care should be taken to ensure implementations of this method meet the
general requirements for ContextCalculator
, defined in the class
doc.
Calculators should not rely on the state of accumulator
during
this call, and also shouldn't make calls to remove contexts added by
other calculators.
target
- the target Contextual
for this operationaccumulator
- a Set
of Context
s this operation
will accumulate to.default boolean matches(Context context, T target)
Context
is currently applicable to a
Contextual
.
If this calculator does not handle the given type of context, this method should return false.
For the given set of contexts which would be accumulated using
accumulateContexts(Contextual, Set)
, this method should return
true if the given context would be included in the accumulated set.
context
- the Context
being checkedtarget
- the Contextual
that is being checked againstContext
is handled by this calculator
and is applicable to the given Contextual
. Otherwise
false.