From f9d8a5979097ba60dc72f3e8b4bdda0153ce30a5 Mon Sep 17 00:00:00 2001 From: Hiroku Date: Sun, 20 Mar 2022 22:26:53 +1000 Subject: [PATCH 1/4] Fixed EntitySpawnExtension buffer being unable to be read from, Fix #208 (#220) * Fixed EntitySpawnExtension buffer being unable to read from, #208 * Release the extensions buffer when it is no longer needed * Cleaned the buffer fix for EntitySpawnExtension Co-authored-by: Paul --- .../dev/architectury/networking/fabric/SpawnEntityPacket.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fabric/src/main/java/dev/architectury/networking/fabric/SpawnEntityPacket.java b/fabric/src/main/java/dev/architectury/networking/fabric/SpawnEntityPacket.java index d535f5b2..1183314a 100644 --- a/fabric/src/main/java/dev/architectury/networking/fabric/SpawnEntityPacket.java +++ b/fabric/src/main/java/dev/architectury/networking/fabric/SpawnEntityPacket.java @@ -84,6 +84,8 @@ public class SpawnEntityPacket { var deltaX = buf.readDouble(); var deltaY = buf.readDouble(); var deltaZ = buf.readDouble(); + // Retain this buffer so we can use it in the queued task (EntitySpawnExtension) + buf.retain(); context.queue(() -> { var entityType = Registry.ENTITY_TYPE.byId(entityTypeId); if (entityType == null) { @@ -105,6 +107,7 @@ public class SpawnEntityPacket { if (entity instanceof EntitySpawnExtension ext) { ext.loadAdditionalSpawnData(buf); } + buf.release(); Minecraft.getInstance().level.putNonPlayerEntity(id, entity); entity.lerpMotion(deltaX, deltaY, deltaZ); }); From 03da3e6bfb88271849f19f22bfc4b43febb56cba Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sat, 26 Mar 2022 19:56:31 +0800 Subject: [PATCH 2/4] Fix RegistrySupplier#listen and ArchitecturySpawnEggItem (#228) --- .../core/item/ArchitecturySpawnEggItem.java | 8 ++++++++ .../client/level/entity/EntityRendererRegistry.java | 2 +- .../entity/fabric/EntityRendererRegistryImpl.java | 2 +- .../registry/registries/fabric/RegistriesImpl.java | 5 ++--- .../entity/forge/EntityRendererRegistryImpl.java | 2 +- .../registry/registries/forge/RegistriesImpl.java | 10 ++++------ .../src/main/java/dev/architectury/test/TestMod.java | 5 ++++- .../dev/architectury/test/entity/TestEntity.java | 12 ++++++++---- .../architectury/test/registry/TestRegistries.java | 10 +++++++--- .../models/item/test_spawn_egg_2.json | 3 +++ 10 files changed, 39 insertions(+), 20 deletions(-) create mode 100644 testmod-common/src/main/resources/assets/architectury_test/models/item/test_spawn_egg_2.json 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 From d15fa9fd1be9196ed1bc0520de6ad686073879bf Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sun, 27 Mar 2022 17:01:56 +0800 Subject: [PATCH 3/4] Fix #226 --- fabric/src/main/resources/fabric.mod.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index f5e0a9e3..aca02864 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -39,7 +39,7 @@ "fabric": ">=0.44.0" }, "breaks": { - "optifabric": "*" + "optifabric": "<1.13.0" }, "custom": { "modmenu:api": true From 905407e49c9ffecdaa5f90ba4bd51e40a6bde718 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sat, 2 Apr 2022 22:03:35 +0800 Subject: [PATCH 4/4] Add 1.18.2 version constraints --- fabric/src/main/resources/fabric.mod.json | 2 +- forge/src/main/resources/META-INF/mods.toml | 2 +- gradle.properties | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index aca02864..f38ce4f5 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -34,7 +34,7 @@ }, "icon": "icon.png", "depends": { - "minecraft": "~1.18-", + "minecraft": "~1.18.2-", "fabricloader": ">=0.13.0", "fabric": ">=0.44.0" }, diff --git a/forge/src/main/resources/META-INF/mods.toml b/forge/src/main/resources/META-INF/mods.toml index ce97d39e..5e48548d 100644 --- a/forge/src/main/resources/META-INF/mods.toml +++ b/forge/src/main/resources/META-INF/mods.toml @@ -17,7 +17,7 @@ license = "LGPL-3" [[dependencies.architectury]] modId = "minecraft" mandatory = true -versionRange = "[1.18,)" +versionRange = "[1.18.2,)" ordering = "NONE" side = "BOTH" diff --git a/gradle.properties b/gradle.properties index 6e706ede..b9c909b5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ archives_base_name_snapshot=architectury-snapshot base_version=4.1 maven_group=dev.architectury -fabric_loader_version=0.13.2 +fabric_loader_version=0.13.3 fabric_api_version=0.47.8+1.18.2 mod_menu_version=3.0.0