From 74c3aab72027ca5746228b834d3defeeaf3fd10a Mon Sep 17 00:00:00 2001 From: LexManos Date: Wed, 27 Jun 2018 12:51:06 -0700 Subject: [PATCH] Fix FML entity network spawning not using EntityBuilder's facctory. Closes #4845 and #4846 --- jsons/1.12.2.json | 12 +++++----- .../network/internal/EntitySpawnHandler.java | 3 +-- .../common/registry/EntityEntryBuilder.java | 22 ++++++++++--------- .../fml/common/registry/EntityRegistry.java | 22 +++++++++++++++++++ 4 files changed, 41 insertions(+), 18 deletions(-) diff --git a/jsons/1.12.2.json b/jsons/1.12.2.json index d69577f2a..6b755e17c 100644 --- a/jsons/1.12.2.json +++ b/jsons/1.12.2.json @@ -266,13 +266,13 @@ } }, { - "name": "com.mojang:realms:1.10.21", + "name": "com.mojang:realms:1.10.22", "downloads": { "artifact": { - "size": 7134971, - "sha1": "cfc457545a482027c066f13c262b9a4df64bc3f3", - "path": "com/mojang/realms/1.10.21/realms-1.10.21.jar", - "url": "https://libraries.minecraft.net/com/mojang/realms/1.10.21/realms-1.10.21.jar" + "size": 7135057, + "sha1": "bd0dccebdf3744c75f1ca20063f16e8f7d5e663f", + "path": "com/mojang/realms/1.10.22/realms-1.10.22.jar", + "url": "https://libraries.minecraft.net/com/mojang/realms/1.10.22/realms-1.10.22.jar" } } }, @@ -719,6 +719,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}", "minimumLauncherVersion": 18, "releaseTime": "2017-09-18T08:39:46+00:00", - "time": "2018-05-25T15:20:02+00:00", + "time": "2018-06-25T15:37:20+00:00", "type": "release" } diff --git a/src/main/java/net/minecraftforge/fml/common/network/internal/EntitySpawnHandler.java b/src/main/java/net/minecraftforge/fml/common/network/internal/EntitySpawnHandler.java index cc7dc3cbf..9422096a1 100644 --- a/src/main/java/net/minecraftforge/fml/common/network/internal/EntitySpawnHandler.java +++ b/src/main/java/net/minecraftforge/fml/common/network/internal/EntitySpawnHandler.java @@ -76,7 +76,6 @@ public class EntitySpawnHandler extends SimpleChannelInboundHandler cls = er.getEntityClass(); try { Entity entity; @@ -85,7 +84,7 @@ public class EntitySpawnHandler extends SimpleChannelInboundHandler return entry; } - @Nonnull - private EntityRegistry.EntityRegistration createRegistration() - { - return EntityRegistry.instance().new EntityRegistration( - this.mod, this.id, this.entity, this.name, this.network, - this.trackingRange, this.trackingUpdateFrequency, this.trackingVelocityUpdates - ); - } - private void registerStatistics() { if (!this.statisticsRegistered && (this.killEntityStatistic != null && this.entityKilledByStatistic != null)) @@ -340,7 +331,7 @@ public final class EntityEntryBuilder if (this.added) return; this.added = true; EntityEntryBuilder.this.registerStatistics(); - EntityRegistry.instance().insert(EntityEntryBuilder.this.entity, EntityEntryBuilder.this.createRegistration()); + EntityRegistry.instance().insert(EntityEntryBuilder.this.entity, createRegistration()); if (EntityEntryBuilder.this.spawns != null) { for (final Spawn spawn : EntityEntryBuilder.this.spawns) @@ -350,6 +341,17 @@ public final class EntityEntryBuilder EntityEntryBuilder.this.spawns = null; } } + + @Nonnull + private EntityRegistry.EntityRegistration createRegistration() + { + EntityEntryBuilder builder = EntityEntryBuilder.this; + return EntityRegistry.instance().new EntityRegistration( + builder.mod, builder.id, builder.entity, builder.name, builder.network, + builder.trackingRange, builder.trackingUpdateFrequency, builder.trackingVelocityUpdates, this.factory + ); + } + } public final class Spawn diff --git a/src/main/java/net/minecraftforge/fml/common/registry/EntityRegistry.java b/src/main/java/net/minecraftforge/fml/common/registry/EntityRegistry.java index a1de924ab..7885df3f3 100644 --- a/src/main/java/net/minecraftforge/fml/common/registry/EntityRegistry.java +++ b/src/main/java/net/minecraftforge/fml/common/registry/EntityRegistry.java @@ -29,6 +29,7 @@ import net.minecraft.entity.EntityLiving; import net.minecraft.entity.EntityTracker; import net.minecraft.entity.EnumCreatureType; import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.Biome.SpawnListEntry; import net.minecraftforge.fml.common.FMLCommonHandler; @@ -48,7 +49,9 @@ public class EntityRegistry { public class EntityRegistration { + @Deprecated private Class entityClass; + private Function factory; private ModContainer container; private ResourceLocation regName; private String entityName; @@ -58,7 +61,14 @@ public class EntityRegistry private boolean sendsVelocityUpdates; private Function customSpawnCallback; private boolean usesVanillaSpawning; + + @Deprecated //1.13 public EntityRegistration(ModContainer mc, ResourceLocation registryName, Class entityClass, String entityName, int id, int trackingRange, int updateFrequency, boolean sendsVelocityUpdates) + { + this(mc, registryName, entityClass, entityName, id, trackingRange, updateFrequency, sendsVelocityUpdates, null); + } + + public EntityRegistration(ModContainer mc, ResourceLocation registryName, Class entityClass, String entityName, int id, int trackingRange, int updateFrequency, boolean sendsVelocityUpdates, Function factory) { this.container = mc; this.regName = registryName; @@ -68,15 +78,27 @@ public class EntityRegistry this.trackingRange = trackingRange; this.updateFrequency = updateFrequency; this.sendsVelocityUpdates = sendsVelocityUpdates; + this.factory = factory != null ? factory : + new EntityEntryBuilder.ConstructorFactory(entityClass) { + @Override + protected String describeEntity() { + return String.valueOf(EntityRegistration.this.getRegistryName()); + } + }; } public ResourceLocation getRegistryName() { return regName; } + @Deprecated //Used only for creating a new instance in EntitySpawnHandler, use newInstance(world) instead. public Class getEntityClass() { return entityClass; } + public Entity newInstance(World world) + { + return this.factory.apply(world); + } public ModContainer getContainer() { return container;