SimpleCriterionTrigger.java
net.minecraft.advancements.criterion.SimpleCriterionTrigger
信息
- 全限定名:net.minecraft.advancements.criterion.SimpleCriterionTrigger
- 类型:public abstract class
- 包:net.minecraft.advancements.criterion
- 源码路径:src/main/java/net/minecraft/advancements/criterion/SimpleCriterionTrigger.java
- 起始行号:L19
- 实现:CriterionTrigger
- 职责:
TODO
字段/常量
players- 类型:
Map<PlayerAdvancements,Set<CriterionTrigger.Listener<T>>> - 修饰符:
private final - 源码定位:
L20 - 说明:
TODO
- 类型:
内部类/嵌套类型
net.minecraft.advancements.criterion.SimpleCriterionTrigger.SimpleInstance- 类型:
interface - 修饰符:
public - 源码定位:
L72 - 说明:
TODO
- 类型:
构造器
- 无
方法
下面的方法块按源码顺序生成。
public final void addPlayerListener(PlayerAdvancements player, CriterionTrigger.Listener<T> listener) @ L22
- 方法名:addPlayerListener
- 源码定位:L22
- 返回类型:void
- 修饰符:public final
参数:
- player: PlayerAdvancements
- listener: CriterionTrigger.Listener
说明:
TODO
public final void removePlayerListener(PlayerAdvancements player, CriterionTrigger.Listener<T> listener) @ L27
- 方法名:removePlayerListener
- 源码定位:L27
- 返回类型:void
- 修饰符:public final
参数:
- player: PlayerAdvancements
- listener: CriterionTrigger.Listener
说明:
TODO
public final void removePlayerListeners(PlayerAdvancements player) @ L38
- 方法名:removePlayerListeners
- 源码定位:L38
- 返回类型:void
- 修饰符:public final
参数:
- player: PlayerAdvancements
说明:
TODO
protected void trigger(ServerPlayer player, Predicate<T> matcher) @ L43
- 方法名:trigger
- 源码定位:L43
- 返回类型:void
- 修饰符:protected
参数:
- player: ServerPlayer
- matcher: Predicate
说明:
TODO
代码
public abstract class SimpleCriterionTrigger<T extends SimpleCriterionTrigger.SimpleInstance> implements CriterionTrigger<T> {
private final Map<PlayerAdvancements, Set<CriterionTrigger.Listener<T>>> players = Maps.newIdentityHashMap();
@Override
public final void addPlayerListener(PlayerAdvancements player, CriterionTrigger.Listener<T> listener) {
this.players.computeIfAbsent(player, k -> Sets.newHashSet()).add(listener);
}
@Override
public final void removePlayerListener(PlayerAdvancements player, CriterionTrigger.Listener<T> listener) {
Set<CriterionTrigger.Listener<T>> listeners = this.players.get(player);
if (listeners != null) {
listeners.remove(listener);
if (listeners.isEmpty()) {
this.players.remove(player);
}
}
}
@Override
public final void removePlayerListeners(PlayerAdvancements player) {
this.players.remove(player);
}
protected void trigger(ServerPlayer player, Predicate<T> matcher) {
PlayerAdvancements advancements = player.getAdvancements();
Set<CriterionTrigger.Listener<T>> allListeners = this.players.get(advancements);
if (allListeners != null && !allListeners.isEmpty()) {
LootContext playerContext = EntityPredicate.createContext(player, player);
List<CriterionTrigger.Listener<T>> listeners = null;
for (CriterionTrigger.Listener<T> listener : allListeners) {
T triggerInstance = listener.trigger();
if (matcher.test(triggerInstance)) {
Optional<ContextAwarePredicate> predicate = triggerInstance.player();
if (predicate.isEmpty() || predicate.get().matches(playerContext)) {
if (listeners == null) {
listeners = Lists.newArrayList();
}
listeners.add(listener);
}
}
}
if (listeners != null) {
for (CriterionTrigger.Listener<T> listenerx : listeners) {
listenerx.run(advancements);
}
}
}
}
public interface SimpleInstance extends CriterionTriggerInstance {
@Override
default void validate(ValidationContextSource validator) {
Validatable.validate(validator.entityContext(), "player", this.player());
}
Optional<ContextAwarePredicate> player();
}
}引用的其他类
-
- 引用位置:
参数/字段/实现
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
EntityPredicate.createContext()
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Validatable.validate()
- 引用位置: