TheMikeste1 Posted August 22, 2019 Share Posted August 22, 2019 I've been playing around with Entities and decided to make a spawn egg. However, when I used the spawn egg, I got a NullPointerException when I built my EntityType inside of my event subscriber, like so (note the EntityType is built on line 16): 1 //Entities 2 @ObjectHolder("entity_test") 3 public static final EntityType<CreeperEntity> entity_test = null; 4 5 //SpawnEggs 6 @ObjectHolder("spawn_entity_test") 7 public static final Item spawn_entity_test = null; 8 9 @SubscribeEvent 10 public static void registerEntities(final RegistryEvent.Register<EntityType<?>> event) { 11 LOGGER.debug("Wabbits: Registering Entities..."); 12 event.getRegistry().registerAll( 13 EntityType.Builder 14 .create(CreeperEntity::new, EntityClassification.AMBIENT) 15 .size(0.4F, 0.7F) 16 .build("entity_test").setRegistryName(Constants.MOD_ID, "entity_test") 17 ); 18 } //registerEntities() 19 20 @SubscribeEvent 21 public static void registerSpawnEggs(final RegistryEvent.Register<Item> event) { 22 LOGGER.debug("Wabbits: Registering Spawn Eggs..."); 23 event.getRegistry().registerAll( 24 new SpawnEggItem(entity_test, 0, 0, new Item.Properties().group(ItemGroups.MAIN_GROUP_WABBITS)).setRegistryName(Constants.MOD_ID, "spawn_entity_test") 25 ); 26 } //registerSpawnEggs() After exploring with the debugger, I discovered that Items are registered before Entities, which means the spawn egg is being registered before the ObjectHolder for my EntityType is set (resulting in the egg trying to spawn null). I messed around with SubscribeEvent priorities for a while, but Items always registered first. I then tried building the EntityType and assigning it before the register event (lines 3-6): 1 //Entities 2 @ObjectHolder("entity_test") 3 public static final EntityType<CreeperEntity> entity_test = EntityType.Builder 4 .create(CreeperEntity::new, EntityClassification.AMBIENT) 5 .size(0.4F, 0.7F) 6 .build("entity_test"); 7 8 //SpawnEggs 9 @ObjectHolder("spawn_entity_test") 10 public static final Item spawn_entity_test = null; 11 12 13 @SubscribeEvent 14 public static void registerEntities(final RegistryEvent.Register<EntityType<?>> event) { 15 LOGGER.debug("Wabbits: Registering Entities..."); 16 event.getRegistry().registerAll( 17 entity_test.setRegistryName(Constants.MOD_ID, "entity_test") 18 ); 19 } //registerEntities() 20 21 @SubscribeEvent 22 public static void registerSpawnEggs(final RegistryEvent.Register<Item> event) { 23 LOGGER.debug("Wabbits: Registering Spawn Eggs..."); 24 event.getRegistry().registerAll( 25 new SpawnEggItem(entity_test, 0, 0, new Item.Properties().group(ItemGroups.MAIN_GROUP_WABBITS)).setRegistryName(Constants.MOD_ID, "spawn_entity_test") 26 ); 27 } //registerSpawnEggs() This works, but seems odd since every other object (Blocks, Items, ect.) is built or constructed inside of #registerAll. Is there a better way to set up the Entity and SpawnEgg? Thanks in advance! Quote Link to comment Share on other sites More sharing options...
TheMikeste1 Posted August 22, 2019 Author Share Posted August 22, 2019 11 hours ago, diesieben07 said: You have to create (not register) the EntityTypes beforehand, then register them in the EntityType registry event, like you already do. However you must not create registry entries in static initializers, in this case you can create the entity types in the item registry event. Awesome, thank you! Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.