41 lines
		
	
	
	
		
			1,015 B
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
	
		
			1,015 B
		
	
	
	
		
			Java
		
	
	
	
	
	
| package net.minecraft.util;
 | |
| 
 | |
| import it.unimi.dsi.fastutil.objects.Object2IntMap;
 | |
| import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
 | |
| import net.minecraft.Util;
 | |
| 
 | |
| public class ClassTreeIdRegistry {
 | |
| 	public static final int NO_ID_VALUE = -1;
 | |
| 	private final Object2IntMap<Class<?>> classToLastIdCache = Util.make(
 | |
| 		new Object2IntOpenHashMap<>(), object2IntOpenHashMap -> object2IntOpenHashMap.defaultReturnValue(-1)
 | |
| 	);
 | |
| 
 | |
| 	public int getLastIdFor(Class<?> clazz) {
 | |
| 		int i = this.classToLastIdCache.getInt(clazz);
 | |
| 		if (i != -1) {
 | |
| 			return i;
 | |
| 		} else {
 | |
| 			Class<?> class_ = clazz;
 | |
| 
 | |
| 			while ((class_ = class_.getSuperclass()) != Object.class) {
 | |
| 				int j = this.classToLastIdCache.getInt(class_);
 | |
| 				if (j != -1) {
 | |
| 					return j;
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 			return -1;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	public int getCount(Class<?> clazz) {
 | |
| 		return this.getLastIdFor(clazz) + 1;
 | |
| 	}
 | |
| 
 | |
| 	public int define(Class<?> clazz) {
 | |
| 		int i = this.getLastIdFor(clazz);
 | |
| 		int j = i == -1 ? 0 : i + 1;
 | |
| 		this.classToLastIdCache.put(clazz, j);
 | |
| 		return j;
 | |
| 	}
 | |
| }
 |