diff --git a/common/src/main/java/dev/architectury/core/item/ArchitecturySpawnEggItem.java b/common/src/main/java/dev/architectury/core/item/ArchitecturySpawnEggItem.java index a1ccf83f..0b300b20 100644 --- a/common/src/main/java/dev/architectury/core/item/ArchitecturySpawnEggItem.java +++ b/common/src/main/java/dev/architectury/core/item/ArchitecturySpawnEggItem.java @@ -19,9 +19,11 @@ package dev.architectury.core.item; +import dev.architectury.registry.registries.Registries; import dev.architectury.registry.registries.RegistrySupplier; import net.minecraft.core.BlockSource; import net.minecraft.core.Direction; +import net.minecraft.core.Registry; import net.minecraft.core.dispenser.DefaultDispenseItemBehavior; import net.minecraft.core.dispenser.DispenseItemBehavior; import net.minecraft.nbt.CompoundTag; @@ -74,8 +76,14 @@ public class ArchitecturySpawnEggItem extends SpawnEggItem { this.entityType = Objects.requireNonNull(entityType, "entityType"); SpawnEggItem.BY_ID.remove(null); entityType.listen(type -> { + LOGGER.debug("Registering spawn egg {} for {}", Objects.toString(Registries.getId(this, Registry.ITEM_REGISTRY)), + Objects.toString(Registries.getId(type, Registry.ENTITY_TYPE_REGISTRY))); SpawnEggItem.BY_ID.put(type, this); this.defaultType = type; + + if (dispenseItemBehavior != null) { + DispenserBlock.registerBehavior(this, dispenseItemBehavior); + } }); } diff --git a/common/src/main/java/dev/architectury/registry/client/level/entity/EntityRendererRegistry.java b/common/src/main/java/dev/architectury/registry/client/level/entity/EntityRendererRegistry.java index cdcaaf94..786089cc 100644 --- a/common/src/main/java/dev/architectury/registry/client/level/entity/EntityRendererRegistry.java +++ b/common/src/main/java/dev/architectury/registry/client/level/entity/EntityRendererRegistry.java @@ -34,7 +34,7 @@ public final class EntityRendererRegistry { } @ExpectPlatform - public static void register(Supplier> type, EntityRendererProvider provider) { + public static void register(Supplier> type, EntityRendererProvider provider) { throw new AssertionError(); } } diff --git a/fabric/src/main/java/dev/architectury/registry/client/level/entity/fabric/EntityRendererRegistryImpl.java b/fabric/src/main/java/dev/architectury/registry/client/level/entity/fabric/EntityRendererRegistryImpl.java index d47d2cfb..1522dd09 100644 --- a/fabric/src/main/java/dev/architectury/registry/client/level/entity/fabric/EntityRendererRegistryImpl.java +++ b/fabric/src/main/java/dev/architectury/registry/client/level/entity/fabric/EntityRendererRegistryImpl.java @@ -27,7 +27,7 @@ import net.minecraft.world.entity.EntityType; import java.util.function.Supplier; public class EntityRendererRegistryImpl { - public static void register(Supplier> type, EntityRendererProvider provider) { + public static void register(Supplier> type, EntityRendererProvider provider) { EntityRendererRegistry.register(type.get(), provider); } } diff --git a/fabric/src/main/java/dev/architectury/registry/registries/fabric/RegistriesImpl.java b/fabric/src/main/java/dev/architectury/registry/registries/fabric/RegistriesImpl.java index ae7e608f..0f4e9d6f 100644 --- a/fabric/src/main/java/dev/architectury/registry/registries/fabric/RegistriesImpl.java +++ b/fabric/src/main/java/dev/architectury/registry/registries/fabric/RegistriesImpl.java @@ -278,9 +278,8 @@ public class RegistriesImpl { @Override public void listen(ResourceLocation id, Consumer callback) { - T value = get(id); - if (value != null) { - callback.accept(value); + if (contains(id)) { + callback.accept(get(id)); } else { RegistriesImpl.listen(key(), id, callback); } diff --git a/forge/src/main/java/dev/architectury/registry/client/level/entity/forge/EntityRendererRegistryImpl.java b/forge/src/main/java/dev/architectury/registry/client/level/entity/forge/EntityRendererRegistryImpl.java index 49b88fa2..c47d9905 100644 --- a/forge/src/main/java/dev/architectury/registry/client/level/entity/forge/EntityRendererRegistryImpl.java +++ b/forge/src/main/java/dev/architectury/registry/client/level/entity/forge/EntityRendererRegistryImpl.java @@ -34,7 +34,7 @@ import java.util.function.Supplier; public class EntityRendererRegistryImpl { private static final Map>, EntityRendererProvider> RENDERERS = new ConcurrentHashMap<>(); - public static void register(Supplier> type, EntityRendererProvider factory) { + public static void register(Supplier> type, EntityRendererProvider factory) { RENDERERS.put((Supplier>) (Supplier>) type, factory); } diff --git a/forge/src/main/java/dev/architectury/registry/registries/forge/RegistriesImpl.java b/forge/src/main/java/dev/architectury/registry/registries/forge/RegistriesImpl.java index 5be19f36..ec72c755 100644 --- a/forge/src/main/java/dev/architectury/registry/registries/forge/RegistriesImpl.java +++ b/forge/src/main/java/dev/architectury/registry/registries/forge/RegistriesImpl.java @@ -489,9 +489,8 @@ public class RegistriesImpl { @Override public void listen(ResourceLocation id, Consumer callback) { - T value = get(id); - if (value != null) { - callback.accept(value); + if (contains(id)) { + callback.accept(get(id)); } else { RegistriesImpl.listen(key(), id, callback, true); } @@ -680,9 +679,8 @@ public class RegistriesImpl { @Override public void listen(ResourceLocation id, Consumer callback) { - T value = get(id); - if (value != null) { - callback.accept(value); + if (contains(id)) { + callback.accept(get(id)); } else { RegistriesImpl.listen(key(), id, callback, false); } diff --git a/testmod-common/src/main/java/dev/architectury/test/TestMod.java b/testmod-common/src/main/java/dev/architectury/test/TestMod.java index 2d0d31a4..77f82e80 100644 --- a/testmod-common/src/main/java/dev/architectury/test/TestMod.java +++ b/testmod-common/src/main/java/dev/architectury/test/TestMod.java @@ -38,7 +38,9 @@ import dev.architectury.utils.Env; import dev.architectury.utils.EnvExecutor; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; +import net.minecraft.client.renderer.entity.CowRenderer; import net.minecraft.client.renderer.entity.PigRenderer; +import net.minecraft.world.entity.animal.Cow; public class TestMod { public static final MessageSink SINK = EnvExecutor.getEnvSpecific(() -> ClientOverlayMessageSink::new, () -> ConsoleMessageSink::new); @@ -64,7 +66,8 @@ public class TestMod { ClientLifecycleEvent.CLIENT_STOPPING.register((client) -> SINK.accept("Client stopping!")); TestKeybinds.initialize(); TestModNet.initializeClient(); - EntityRendererRegistry.register(() -> TestEntity.TYPE, PigRenderer::new); + EntityRendererRegistry.register(TestRegistries.TEST_ENTITY, CowRenderer::new); + EntityRendererRegistry.register(TestRegistries.TEST_ENTITY_2, CowRenderer::new); } } } diff --git a/testmod-common/src/main/java/dev/architectury/test/entity/TestEntity.java b/testmod-common/src/main/java/dev/architectury/test/entity/TestEntity.java index f65a7eca..fb82101a 100644 --- a/testmod-common/src/main/java/dev/architectury/test/entity/TestEntity.java +++ b/testmod-common/src/main/java/dev/architectury/test/entity/TestEntity.java @@ -19,17 +19,21 @@ package dev.architectury.test.entity; +import com.google.common.base.Suppliers; import dev.architectury.networking.NetworkManager; import net.minecraft.network.protocol.Packet; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.MobCategory; -import net.minecraft.world.entity.animal.Pig; +import net.minecraft.world.entity.animal.Cow; import net.minecraft.world.level.Level; -public class TestEntity extends Pig { - public static final EntityType TYPE = EntityType.Builder.of(TestEntity::new, MobCategory.MISC).sized(0.98F, 0.7F).clientTrackingRange(8).build("test_entity"); +import java.util.function.Supplier; + +public class TestEntity extends Cow { + public static final Supplier> TYPE = Suppliers.memoize(() -> EntityType.Builder.of(TestEntity::new, MobCategory.MISC).sized(0.98F, 0.7F).clientTrackingRange(8).build("test_entity")); + public static final Supplier> TYPE_2 = Suppliers.memoize(() -> EntityType.Builder.of(TestEntity::new, MobCategory.MISC).sized(0.98F, 0.7F).clientTrackingRange(8).build("test_entity_2")); - public TestEntity(EntityType entityType, Level level) { + public TestEntity(EntityType entityType, Level level) { super(entityType, level); } diff --git a/testmod-common/src/main/java/dev/architectury/test/registry/TestRegistries.java b/testmod-common/src/main/java/dev/architectury/test/registry/TestRegistries.java index facd3999..d1418a8d 100644 --- a/testmod-common/src/main/java/dev/architectury/test/registry/TestRegistries.java +++ b/testmod-common/src/main/java/dev/architectury/test/registry/TestRegistries.java @@ -37,7 +37,6 @@ import net.minecraft.world.effect.MobEffect; import net.minecraft.world.effect.MobEffectCategory; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.animal.Pig; import net.minecraft.world.food.FoodProperties; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.Item; @@ -77,6 +76,9 @@ public class TestRegistries { public static final RegistrySupplier TEST_SPAWN_EGG = ITEMS.register("test_spawn_egg", () -> new ArchitecturySpawnEggItem(TestRegistries.TEST_ENTITY, 0xFF000000, 0xFFFFFFFF, new Item.Properties().tab(TestCreativeTabs.TEST_TAB))); + public static final RegistrySupplier TEST_SPAWN_EGG_2 = ITEMS.register("test_spawn_egg_2", () -> + new ArchitecturySpawnEggItem(TestRegistries.TEST_ENTITY_2, 0xFFFFFFFF, 0xFF000000, + new Item.Properties().tab(TestCreativeTabs.TEST_TAB))); public static final RegistrySupplier TEST_BLOCK = BLOCKS.register("test_block", () -> new Block(BlockProperties.copy(Blocks.STONE))); @@ -94,7 +96,8 @@ public class TestRegistries { public static final RegistrySupplier COLLISION_BLOCK_ITEM = ITEMS.register("collision_block", () -> new BlockItem(COLLISION_BLOCK.get(), new Item.Properties().tab(TestCreativeTabs.TEST_TAB))); - public static final RegistrySupplier> TEST_ENTITY = ENTITY_TYPES.register("test_entity", () -> TestEntity.TYPE); + public static final RegistrySupplier> TEST_ENTITY = ENTITY_TYPES.register("test_entity", TestEntity.TYPE); + public static final RegistrySupplier> TEST_ENTITY_2 = ENTITY_TYPES.register("test_entity_2", TestEntity.TYPE_2); public static final RegistrySupplier> TEST_SERIALIZER = RECIPE_SERIALIZERS.register("test_serializer", TestRecipeSerializer::new); @@ -112,7 +115,8 @@ public class TestRegistries { ENTITY_TYPES.register(); RECIPE_TYPES.register(); RECIPE_SERIALIZERS.register(); - EntityAttributeRegistry.register(TEST_ENTITY, Pig::createAttributes); + EntityAttributeRegistry.register(TEST_ENTITY, TestEntity::createAttributes); + EntityAttributeRegistry.register(TEST_ENTITY_2, TestEntity::createAttributes); TEST_BLOCK_ITEM.listen(item -> { System.out.println("Registered item!"); }); diff --git a/testmod-common/src/main/resources/assets/architectury_test/models/item/test_spawn_egg_2.json b/testmod-common/src/main/resources/assets/architectury_test/models/item/test_spawn_egg_2.json new file mode 100644 index 00000000..d1aaa9d6 --- /dev/null +++ b/testmod-common/src/main/resources/assets/architectury_test/models/item/test_spawn_egg_2.json @@ -0,0 +1,3 @@ +{ + "parent": "minecraft:item/template_spawn_egg" +} \ No newline at end of file