VisibilitySet.java

net.minecraft.client.renderer.chunk.VisibilitySet

信息

  • 全限定名:net.minecraft.client.renderer.chunk.VisibilitySet
  • 类型:public class
  • 包:net.minecraft.client.renderer.chunk
  • 源码路径:src/main/java/net/minecraft/client/renderer/chunk/VisibilitySet.java
  • 起始行号:L11
  • 职责:

    TODO

字段/常量

  • FACINGS

    • 类型: int
    • 修饰符: private static final
    • 源码定位: L12
    • 说明:

      TODO

  • data

    • 类型: BitSet
    • 修饰符: private final
    • 源码定位: L13
    • 说明:

      TODO

内部类/嵌套类型

构造器

方法

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

public void add(Set<Direction> directions) @ L15

  • 方法名:add
  • 源码定位:L15
  • 返回类型:void
  • 修饰符:public

参数:

  • directions: Set

说明:

TODO

public void set(Direction direction1, Direction direction2, boolean value) @ L23

  • 方法名:set
  • 源码定位:L23
  • 返回类型:void
  • 修饰符:public

参数:

  • direction1: Direction
  • direction2: Direction
  • value: boolean

说明:

TODO

public void setAll(boolean visible) @ L28

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

参数:

  • visible: boolean

说明:

TODO

public boolean visibilityBetween(Direction direction1, Direction direction2) @ L32

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

参数:

  • direction1: Direction
  • direction2: Direction

说明:

TODO

public String toString() @ L36

  • 方法名:toString
  • 源码定位:L36
  • 返回类型:String
  • 修饰符:public

参数:

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class VisibilitySet {
    private static final int FACINGS = Direction.values().length;
    private final BitSet data = new BitSet(FACINGS * FACINGS);
 
    public void add(Set<Direction> directions) {
        for (Direction direction1 : directions) {
            for (Direction direction2 : directions) {
                this.set(direction1, direction2, true);
            }
        }
    }
 
    public void set(Direction direction1, Direction direction2, boolean value) {
        this.data.set(direction1.ordinal() + direction2.ordinal() * FACINGS, value);
        this.data.set(direction2.ordinal() + direction1.ordinal() * FACINGS, value);
    }
 
    public void setAll(boolean visible) {
        this.data.set(0, this.data.size(), visible);
    }
 
    public boolean visibilityBetween(Direction direction1, Direction direction2) {
        return this.data.get(direction1.ordinal() + direction2.ordinal() * FACINGS);
    }
 
    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append(' ');
 
        for (Direction direction : Direction.values()) {
            builder.append(' ').append(direction.toString().toUpperCase(Locale.ROOT).charAt(0));
        }
 
        builder.append('\n');
 
        for (Direction direction1 : Direction.values()) {
            builder.append(direction1.toString().toUpperCase(Locale.ROOT).charAt(0));
 
            for (Direction direction2 : Direction.values()) {
                if (direction1 == direction2) {
                    builder.append("  ");
                } else {
                    boolean ok = this.visibilityBetween(direction1, direction2);
                    builder.append(' ').append((char)(ok ? 'Y' : 'n'));
                }
            }
 
            builder.append('\n');
        }
 
        return builder.toString();
    }
}

引用的其他类

  • Direction
    • 引用位置: 参数/方法调用
    • 关联成员: Direction.values()