Advertisement
Guest User

EntityRegistry.java

a guest
Jul 21st, 2018
386
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.72 KB | None | 0 0
  1. @SuppressWarnings("rawtypes")
  2. public class EntityRegistry extends RegistryMaterials
  3. {
  4.  
  5.     private static EntityRegistry instance = null;
  6.  
  7.     private final BiMap<MinecraftKey, Class<? extends Entity>> customEntities = HashBiMap.create();
  8.     private final BiMap<Class<? extends Entity>, MinecraftKey> customEntityClasses = this.customEntities.inverse();
  9.     private final Map<Class<? extends Entity>, Integer> customEntityIds = new HashMap<>();
  10.  
  11.     private final RegistryMaterials wrapped;
  12.  
  13.     private EntityRegistry(RegistryMaterials original)
  14.     {
  15.         this.wrapped = original;
  16.     }
  17.  
  18.     private static EntityRegistry getInstance()
  19.     {
  20.         if (instance != null)
  21.             return instance;
  22.  
  23.         instance = new EntityRegistry(EntityTypes.b);
  24.  
  25.         try
  26.         {
  27.             Field registryMaterialsField = EntityTypes.class.getDeclaredField("b");
  28.             registryMaterialsField.setAccessible(true);
  29.  
  30.             Field modifiersField = Field.class.getDeclaredField("modifiers");
  31.             modifiersField.setAccessible(true);
  32.             modifiersField.setInt(registryMaterialsField, registryMaterialsField.getModifiers() & ~Modifier.FINAL);
  33.  
  34.             registryMaterialsField.set(null, instance);
  35.         }
  36.         catch (Exception e)
  37.         {
  38.             instance = null;
  39.  
  40.             throw new RuntimeException("Unable to override the old entity RegistryMaterials", e);
  41.         }
  42.  
  43.         return instance;
  44.     }
  45.  
  46.     static void registerCustomEntity(int entityId, String entityName, Class<? extends Entity> entityClass)
  47.     {
  48.         getInstance().putCustomEntity(entityId, entityName, entityClass);
  49.     }
  50.  
  51.     private void putCustomEntity(int entityId, String entityName, Class<? extends Entity> entityClass)
  52.     {
  53.         MinecraftKey minecraftKey = new MinecraftKey(entityName);
  54.  
  55.         this.customEntities.put(minecraftKey, entityClass);
  56.         this.customEntityIds.put(entityClass, entityId);
  57.     }
  58.  
  59.     @SuppressWarnings("unchecked")
  60.     @Override
  61.     public Class<? extends Entity> get(Object key)
  62.     {
  63.         if (this.customEntities.containsKey(key))
  64.             return this.customEntities.get(key);
  65.  
  66.         return (Class<? extends Entity>) wrapped.get(key);
  67.     }
  68.  
  69.     @SuppressWarnings("unchecked")
  70.     @Override
  71.     public int a(Object key)
  72.     {
  73.         if (this.customEntityIds.containsKey(key))
  74.             return this.customEntityIds.get(key);
  75.  
  76.         return this.wrapped.a(key);
  77.     }
  78.  
  79.     @SuppressWarnings("unchecked")
  80.     @Override
  81.     public MinecraftKey b(Object value)
  82.     {
  83.         if (this.customEntityClasses.containsKey(value))
  84.             return this.customEntityClasses.get(value);
  85.  
  86.         return (MinecraftKey) wrapped.b(value);
  87.     }
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement