PermissionSetUnion.java

net.minecraft.server.permissions.PermissionSetUnion

信息

  • 全限定名:net.minecraft.server.permissions.PermissionSetUnion
  • 类型:public class
  • 包:net.minecraft.server.permissions
  • 源码路径:src/main/java/net/minecraft/server/permissions/PermissionSetUnion.java
  • 起始行号:L7
  • 实现:PermissionSet
  • 职责:

    TODO

字段/常量

  • permissions
    • 类型: ReferenceSet<PermissionSet>
    • 修饰符: private final
    • 源码定位: L8
    • 说明:

      TODO

内部类/嵌套类型

构造器

PermissionSetUnion(PermissionSet first, PermissionSet second) @ L10

  • 构造器名:PermissionSetUnion
  • 源码定位:L10
  • 修饰符:package-private

参数:

  • first: PermissionSet
  • second: PermissionSet

说明:

TODO

private PermissionSetUnion(ReferenceSet<PermissionSet> oldPermissions, PermissionSet other) @ L16

  • 构造器名:PermissionSetUnion
  • 源码定位:L16
  • 修饰符:private

参数:

  • oldPermissions: ReferenceSet
  • other: PermissionSet

说明:

TODO

private PermissionSetUnion(ReferenceSet<PermissionSet> oldPermissions, ReferenceSet<PermissionSet> other) @ L22

  • 构造器名:PermissionSetUnion
  • 源码定位:L22
  • 修饰符:private

参数:

  • oldPermissions: ReferenceSet
  • other: ReferenceSet

说明:

TODO

方法

下面的方法块按源码顺序生成。

public boolean hasPermission(Permission permission) @ L28

  • 方法名:hasPermission
  • 源码定位:L28
  • 返回类型:boolean
  • 修饰符:public

参数:

  • permission: Permission

说明:

TODO

public PermissionSet union(PermissionSet other) @ L39

  • 方法名:union
  • 源码定位:L39
  • 返回类型:PermissionSet
  • 修饰符:public

参数:

  • other: PermissionSet

说明:

TODO

public ReferenceSet<PermissionSet> getPermissions() @ L46

  • 方法名:getPermissions
  • 源码定位:L46
  • 返回类型:ReferenceSet
  • 修饰符:public

参数:

说明:

TODO

private void ensureNoUnionsWithinUnions() @ L51

  • 方法名:ensureNoUnionsWithinUnions
  • 源码定位:L51
  • 返回类型:void
  • 修饰符:private

参数:

说明:

TODO

代码

public class PermissionSetUnion implements PermissionSet {
    private final ReferenceSet<PermissionSet> permissions = new ReferenceArraySet<>();
 
    PermissionSetUnion(PermissionSet first, PermissionSet second) {
        this.permissions.add(first);
        this.permissions.add(second);
        this.ensureNoUnionsWithinUnions();
    }
 
    private PermissionSetUnion(ReferenceSet<PermissionSet> oldPermissions, PermissionSet other) {
        this.permissions.addAll(oldPermissions);
        this.permissions.add(other);
        this.ensureNoUnionsWithinUnions();
    }
 
    private PermissionSetUnion(ReferenceSet<PermissionSet> oldPermissions, ReferenceSet<PermissionSet> other) {
        this.permissions.addAll(oldPermissions);
        this.permissions.addAll(other);
        this.ensureNoUnionsWithinUnions();
    }
 
    @Override
    public boolean hasPermission(Permission permission) {
        for (PermissionSet set : this.permissions) {
            if (set.hasPermission(permission)) {
                return true;
            }
        }
 
        return false;
    }
 
    @Override
    public PermissionSet union(PermissionSet other) {
        return other instanceof PermissionSetUnion otherUnion
            ? new PermissionSetUnion(this.permissions, otherUnion.permissions)
            : new PermissionSetUnion(this.permissions, other);
    }
 
    @VisibleForTesting
    public ReferenceSet<PermissionSet> getPermissions() {
        return new ReferenceArraySet<>(this.permissions);
    }
 
    private void ensureNoUnionsWithinUnions() {
        for (PermissionSet set : this.permissions) {
            if (set instanceof PermissionSetUnion) {
                throw new IllegalArgumentException("Cannot have PermissionSetUnion within another PermissionSetUnion");
            }
        }
    }
}

引用的其他类