Cache entity constructors for a small performance optimization
This commit is contained in:
parent
926472b359
commit
50bf03b82b
6 changed files with 116 additions and 14 deletions
|
@ -242,13 +242,13 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "com.mojang:realms:1.10.8",
|
"name": "com.mojang:realms:1.10.10",
|
||||||
"downloads": {
|
"downloads": {
|
||||||
"artifact": {
|
"artifact": {
|
||||||
"size": 3025164,
|
"size": 3031435,
|
||||||
"sha1": "67560bbd6a83d48ae8b956f1feac09010bde879c",
|
"sha1": "92d9ba93e1e99b75f2776062a5515f6aa88d9f10",
|
||||||
"path": "com/mojang/realms/1.10.8/realms-1.10.8.jar",
|
"path": "com/mojang/realms/1.10.10/realms-1.10.10.jar",
|
||||||
"url": "https://libraries.minecraft.net/com/mojang/realms/1.10.8/realms-1.10.8.jar"
|
"url": "https://libraries.minecraft.net/com/mojang/realms/1.10.10/realms-1.10.10.jar"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -558,6 +558,6 @@
|
||||||
"minecraftArguments": "--username ${auth_player_name} --version ${version_name} --gameDir ${game_directory} --assetsDir ${assets_root} --assetIndex ${assets_index_name} --uuid ${auth_uuid} --accessToken ${auth_access_token} --userType ${user_type} --versionType ${version_type}",
|
"minecraftArguments": "--username ${auth_player_name} --version ${version_name} --gameDir ${game_directory} --assetsDir ${assets_root} --assetIndex ${assets_index_name} --uuid ${auth_uuid} --accessToken ${auth_access_token} --userType ${user_type} --versionType ${version_type}",
|
||||||
"minimumLauncherVersion": 18,
|
"minimumLauncherVersion": 18,
|
||||||
"releaseTime": "2016-12-21T09:29:12+00:00",
|
"releaseTime": "2016-12-21T09:29:12+00:00",
|
||||||
"time": "2016-12-21T09:42:21+00:00",
|
"time": "2017-01-12T10:44:50+00:00",
|
||||||
"type": "release"
|
"type": "release"
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,16 +63,25 @@
|
||||||
@Nullable
|
@Nullable
|
||||||
public static Entity func_191304_a(@Nullable Class <? extends Entity > p_191304_0_, World p_191304_1_)
|
public static Entity func_191304_a(@Nullable Class <? extends Entity > p_191304_0_, World p_191304_1_)
|
||||||
{
|
{
|
||||||
@@ -174,7 +186,7 @@
|
@@ -168,13 +180,15 @@
|
||||||
|
@SideOnly(Side.CLIENT)
|
||||||
|
public static Entity func_75616_a(int p_75616_0_, World p_75616_1_)
|
||||||
|
{
|
||||||
|
- return func_191304_a(func_90035_a(p_75616_0_), p_75616_1_);
|
||||||
|
+ net.minecraftforge.fml.common.registry.EntityEntry entry = net.minecraftforge.fml.common.registry.GameData.getEntityRegistry().func_148754_a(p_75616_0_);
|
||||||
|
+ return entry == null ? null : entry.newInstance(p_75616_1_);
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public static Entity func_188429_b(ResourceLocation p_188429_0_, World p_188429_1_)
|
public static Entity func_188429_b(ResourceLocation p_188429_0_, World p_188429_1_)
|
||||||
{
|
{
|
||||||
- return func_191304_a((Class)field_191308_b.func_82594_a(p_188429_0_), p_188429_1_);
|
- return func_191304_a((Class)field_191308_b.func_82594_a(p_188429_0_), p_188429_1_);
|
||||||
+ return func_191304_a(getClass(p_188429_0_), p_188429_1_);
|
+ net.minecraftforge.fml.common.registry.EntityEntry entry = net.minecraftforge.fml.common.registry.ForgeRegistries.ENTITIES.getValue(p_188429_0_);
|
||||||
|
+ return entry == null ? null : entry.newInstance(p_188429_1_);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@@ -189,7 +201,17 @@
|
@@ -189,7 +203,17 @@
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -90,7 +99,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
return entity;
|
return entity;
|
||||||
@@ -197,7 +219,7 @@
|
@@ -197,7 +221,7 @@
|
||||||
|
|
||||||
public static Set<ResourceLocation> func_180124_b()
|
public static Set<ResourceLocation> func_180124_b()
|
||||||
{
|
{
|
||||||
|
@ -99,7 +108,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean func_180123_a(Entity p_180123_0_, ResourceLocation p_180123_1_)
|
public static boolean func_180123_a(Entity p_180123_0_, ResourceLocation p_180123_1_)
|
||||||
@@ -336,7 +358,7 @@
|
@@ -336,7 +360,7 @@
|
||||||
func_191305_a("zombie_horse", 3232308, 9945732);
|
func_191305_a("zombie_horse", 3232308, 9945732);
|
||||||
func_191305_a("zombie_pigman", 15373203, 5009705);
|
func_191305_a("zombie_pigman", 15373203, 5009705);
|
||||||
func_191305_a("zombie_villager", 5651507, 7969893);
|
func_191305_a("zombie_villager", 5651507, 7969893);
|
||||||
|
@ -108,7 +117,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void func_191303_a(int p_191303_0_, String p_191303_1_, Class <? extends Entity > p_191303_2_, String p_191303_3_)
|
private static void func_191303_a(int p_191303_0_, String p_191303_1_, Class <? extends Entity > p_191303_2_, String p_191303_3_)
|
||||||
@@ -357,22 +379,19 @@
|
@@ -357,22 +381,19 @@
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ResourceLocation resourcelocation = new ResourceLocation(p_191303_1_);
|
ResourceLocation resourcelocation = new ResourceLocation(p_191303_1_);
|
||||||
|
|
|
@ -20,6 +20,15 @@
|
||||||
{
|
{
|
||||||
BlockPos blockpos = func_180621_a(p_77192_1_, chunkpos1.field_77276_a, chunkpos1.field_77275_b);
|
BlockPos blockpos = func_180621_a(p_77192_1_, chunkpos1.field_77276_a, chunkpos1.field_77275_b);
|
||||||
int k1 = blockpos.func_177958_n();
|
int k1 = blockpos.func_177958_n();
|
||||||
|
@@ -136,7 +138,7 @@
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
- entityliving = (EntityLiving)biome$spawnlistentry.field_76300_b.getConstructor(new Class[] {World.class}).newInstance(new Object[] {p_77192_1_});
|
||||||
|
+ entityliving = (EntityLiving)biome$spawnlistentry.newInstance(p_77192_1_);
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
@@ -146,8 +148,10 @@
|
@@ -146,8 +148,10 @@
|
||||||
|
|
||||||
entityliving.func_70012_b((double)f, (double)i3, (double)f1, p_77192_1_.field_73012_v.nextFloat() * 360.0F, 0.0F);
|
entityliving.func_70012_b((double)f, (double)i3, (double)f1, p_77192_1_.field_73012_v.nextFloat() * 360.0F, 0.0F);
|
||||||
|
@ -52,3 +61,12 @@
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -258,7 +263,7 @@
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
- entityliving = (EntityLiving)biome$spawnlistentry.field_76300_b.getConstructor(new Class[] {World.class}).newInstance(new Object[] {p_77191_0_});
|
||||||
|
+ entityliving = (EntityLiving)biome$spawnlistentry.newInstance(p_77191_0_);
|
||||||
|
}
|
||||||
|
catch (Exception exception)
|
||||||
|
{
|
||||||
|
|
|
@ -154,3 +154,40 @@
|
||||||
public static void func_185358_q()
|
public static void func_185358_q()
|
||||||
{
|
{
|
||||||
func_185354_a(0, "ocean", new BiomeOcean((new Biome.BiomeProperties("Ocean")).func_185398_c(-1.0F).func_185400_d(0.1F)));
|
func_185354_a(0, "ocean", new BiomeOcean((new Biome.BiomeProperties("Ocean")).func_185398_c(-1.0F).func_185400_d(0.1F)));
|
||||||
|
@@ -549,6 +631,7 @@
|
||||||
|
public Class <? extends EntityLiving > field_76300_b;
|
||||||
|
public int field_76301_c;
|
||||||
|
public int field_76299_d;
|
||||||
|
+ private final java.lang.reflect.Constructor<?> ctr;
|
||||||
|
|
||||||
|
public SpawnListEntry(Class <? extends EntityLiving > p_i1970_1_, int p_i1970_2_, int p_i1970_3_, int p_i1970_4_)
|
||||||
|
{
|
||||||
|
@@ -556,12 +639,28 @@
|
||||||
|
this.field_76300_b = p_i1970_1_;
|
||||||
|
this.field_76301_c = p_i1970_3_;
|
||||||
|
this.field_76299_d = p_i1970_4_;
|
||||||
|
+
|
||||||
|
+ java.lang.reflect.Constructor<?> tmp = null;
|
||||||
|
+ try
|
||||||
|
+ {
|
||||||
|
+ tmp = p_i1970_1_.getConstructor(World.class);
|
||||||
|
+ }
|
||||||
|
+ catch (NoSuchMethodException e)
|
||||||
|
+ {
|
||||||
|
+ com.google.common.base.Throwables.propagate(e);
|
||||||
|
+ }
|
||||||
|
+ ctr = tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString()
|
||||||
|
{
|
||||||
|
return this.field_76300_b.getSimpleName() + "*(" + this.field_76301_c + "-" + this.field_76299_d + "):" + this.field_76292_a;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ public EntityLiving newInstance(World world) throws Exception
|
||||||
|
+ {
|
||||||
|
+ return (EntityLiving)ctr.newInstance(world);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
public static enum TempCategory
|
||||||
|
|
|
@ -18,9 +18,15 @@
|
||||||
*/
|
*/
|
||||||
package net.minecraftforge.fml.common.registry;
|
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.Entity;
|
||||||
import net.minecraft.entity.EntityList;
|
import net.minecraft.entity.EntityList;
|
||||||
import net.minecraft.entity.EntityList.EntityEggInfo;
|
import net.minecraft.entity.EntityList.EntityEggInfo;
|
||||||
|
import net.minecraft.world.World;
|
||||||
import net.minecraftforge.fml.common.registry.IForgeRegistryEntry.Impl;
|
import net.minecraftforge.fml.common.registry.IForgeRegistryEntry.Impl;
|
||||||
|
|
||||||
public class EntityEntry extends Impl<EntityEntry>
|
public class EntityEntry extends Impl<EntityEntry>
|
||||||
|
@ -28,11 +34,30 @@ public class EntityEntry extends Impl<EntityEntry>
|
||||||
private Class<? extends Entity> cls;
|
private Class<? extends Entity> cls;
|
||||||
private String name;
|
private String name;
|
||||||
private EntityEggInfo egg;
|
private EntityEggInfo egg;
|
||||||
|
private Constructor<?> ctr;
|
||||||
|
|
||||||
public EntityEntry(Class<? extends Entity> cls, String name)
|
public EntityEntry(Class<? extends Entity> cls, String name)
|
||||||
{
|
{
|
||||||
this.cls = cls;
|
this.cls = cls;
|
||||||
this.name = name;
|
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; }
|
public Class<? extends Entity> getEntityClass(){ return this.cls; }
|
||||||
|
@ -45,4 +70,17 @@ public class EntityEntry extends Impl<EntityEntry>
|
||||||
if (this.getRegistryName() != null)
|
if (this.getRegistryName() != null)
|
||||||
EntityList.ENTITY_EGGS.put(this.getRegistryName(), egg);
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,7 @@ import java.io.IOException;
|
||||||
/**
|
/**
|
||||||
* Test for {@link TextureStitchEvent.Pre}.
|
* Test for {@link TextureStitchEvent.Pre}.
|
||||||
*/
|
*/
|
||||||
@Mod(modid = CustomSpriteTest.MOD_ID, name = CustomSpriteTest.NAME, version = "1.0")
|
@Mod(modid = CustomSpriteTest.MOD_ID, name = CustomSpriteTest.NAME, version = "1.0", clientSideOnly = true)
|
||||||
public class CustomSpriteTest
|
public class CustomSpriteTest
|
||||||
{
|
{
|
||||||
static final String MOD_ID = "custom_sprite_test";
|
static final String MOD_ID = "custom_sprite_test";
|
||||||
|
@ -95,4 +95,4 @@ public class CustomSpriteTest
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue