mirror of
https://github.com/MinecraftForge/MinecraftForge.git
synced 2026-11-12 08:17:35 +00:00
Cache entity constructors for a small performance optimization
This commit is contained in:
1 parent
926472b359
commit
50bf03b82b
6 files changed
+116
-14
No files matched your search
@@ -18,9 +18,15 @@
|
||||
*/
|
||||
package net.minecraftforge.fml.common.registry;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
|
||||
import com.google.common.base.Throwables;
|
||||
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityList;
|
||||
import net.minecraft.entity.EntityList.EntityEggInfo;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.fml.common.registry.IForgeRegistryEntry.Impl;
|
||||
|
||||
public class EntityEntry extends Impl<EntityEntry>
|
||||
@@ -28,11 +34,30 @@ public class EntityEntry extends Impl<EntityEntry>
|
||||
private Class<? extends Entity> cls;
|
||||
private String name;
|
||||
private EntityEggInfo egg;
|
||||
private Constructor<?> ctr;
|
||||
|
||||
public EntityEntry(Class<? extends Entity> cls, String name)
|
||||
{
|
||||
this.cls = cls;
|
||||
this.name = name;
|
||||
init();
|
||||
}
|
||||
|
||||
//Protected method, to make this optional, in case people subclass this to have a better factory.
|
||||
protected void init()
|
||||
{
|
||||
try
|
||||
{
|
||||
this.ctr = this.cls.getConstructor(World.class);
|
||||
}
|
||||
catch (NoSuchMethodException e)
|
||||
{
|
||||
throw new RuntimeException("Invalid class " + this.cls + " no constructor taking " + World.class.getName());
|
||||
}
|
||||
catch (SecurityException e)
|
||||
{
|
||||
Throwables.propagate(e);
|
||||
}
|
||||
}
|
||||
|
||||
public Class<? extends Entity> getEntityClass(){ return this.cls; }
|
||||
@@ -45,4 +70,17 @@ public class EntityEntry extends Impl<EntityEntry>
|
||||
if (this.getRegistryName() != null)
|
||||
EntityList.ENTITY_EGGS.put(this.getRegistryName(), egg);
|
||||
}
|
||||
|
||||
public Entity newInstance(World world)
|
||||
{
|
||||
try
|
||||
{
|
||||
return (Entity)this.ctr.newInstance(world);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user