ClassTreeIdRegistry.java

net.minecraft.util.ClassTreeIdRegistry

信息

  • 全限定名:net.minecraft.util.ClassTreeIdRegistry
  • 类型:public class
  • 包:net.minecraft.util
  • 源码路径:src/main/java/net/minecraft/util/ClassTreeIdRegistry.java
  • 起始行号:L6
  • 职责:

    TODO

字段/常量

  • NO_ID_VALUE

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

      TODO

  • classToLastIdCache

    • 类型: Object2IntMap<Class<?>>
    • 修饰符: private final
    • 源码定位: L8
    • 说明:

      TODO

内部类/嵌套类型

构造器

方法

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

public int getLastIdFor(Class<?> clazz) @ L10

  • 方法名:getLastIdFor
  • 源码定位:L10
  • 返回类型:int
  • 修饰符:public

参数:

  • clazz: Class<?>

说明:

TODO

public int getCount(Class<?> clazz) @ L28

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

参数:

  • clazz: Class<?>

说明:

TODO

public int define(Class<?> clazz) @ L32

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

参数:

  • clazz: Class<?>

说明:

TODO

代码

public class ClassTreeIdRegistry {
    public static final int NO_ID_VALUE = -1;
    private final Object2IntMap<Class<?>> classToLastIdCache = Util.make(new Object2IntOpenHashMap<>(), map -> map.defaultReturnValue(-1));
 
    public int getLastIdFor(Class<?> clazz) {
        int id = this.classToLastIdCache.getInt(clazz);
        if (id != -1) {
            return id;
        } else {
            Class<?> superclass = clazz;
 
            while ((superclass = superclass.getSuperclass()) != Object.class) {
                int newId = this.classToLastIdCache.getInt(superclass);
                if (newId != -1) {
                    return newId;
                }
            }
 
            return -1;
        }
    }
 
    public int getCount(Class<?> clazz) {
        return this.getLastIdFor(clazz) + 1;
    }
 
    public int define(Class<?> clazz) {
        int id = this.getLastIdFor(clazz);
        int nextId = id == -1 ? 0 : id + 1;
        this.classToLastIdCache.put(clazz, nextId);
        return nextId;
    }
}

引用的其他类

  • Util
    • 引用位置: 方法调用
    • 关联成员: Util.make()