XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEServerManager

【Java】我的世界XFE服务器管理器

公开
关注 0 Fork 0 Star 0
UTF-8
package com.xfestudio.xfeservermanager.core.policy;

import com.xfestudio.xfeservermanager.api.policy.DecisionEffect;
import com.xfestudio.xfeservermanager.api.policy.PolicyDecision;
import com.xfestudio.xfeservermanager.api.policy.PolicyEvaluationContext;
import com.xfestudio.xfeservermanager.api.policy.PolicySnapshot;
import java.util.EnumMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;

public final class PolicySimulator {
    public PolicySimulationResult simulate(PolicySnapshot snapshot, List<PolicyEvaluationContext> invocations) {
        Objects.requireNonNull(snapshot, "snapshot");
        Objects.requireNonNull(invocations, "invocations");
        CommandPolicyEngine engine = new CommandPolicyEngine(() -> snapshot);
        List<PolicyDecision> decisions = invocations.stream().map(engine::evaluate).toList();
        Map<DecisionEffect, Long> counts = decisions.stream()
                .collect(Collectors.groupingBy(
                        PolicyDecision::effect,
                        () -> new EnumMap<>(DecisionEffect.class),
                        Collectors.counting()));
        return new PolicySimulationResult(snapshot.version(), decisions, counts);
    }
}