diff --git a/deprecated/fabric-command-api-v1/src/main/resources/fabric.mod.json b/deprecated/fabric-command-api-v1/src/main/resources/fabric.mod.json index 2929c9ad4c..ecdfd746b1 100644 --- a/deprecated/fabric-command-api-v1/src/main/resources/fabric.mod.json +++ b/deprecated/fabric-command-api-v1/src/main/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "fabric-api-base": "*", "fabric-command-api-v2": "*" }, diff --git a/deprecated/fabric-commands-v0/src/main/resources/fabric.mod.json b/deprecated/fabric-commands-v0/src/main/resources/fabric.mod.json index bb34d8803d..ef65101d81 100644 --- a/deprecated/fabric-commands-v0/src/main/resources/fabric.mod.json +++ b/deprecated/fabric-commands-v0/src/main/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "fabric-api-base": "*", "fabric-command-api-v2": "*" }, diff --git a/deprecated/fabric-convention-tags-v1/src/main/resources/fabric.mod.json b/deprecated/fabric-convention-tags-v1/src/main/resources/fabric.mod.json index e2c8bb1b26..7f2e09da98 100644 --- a/deprecated/fabric-convention-tags-v1/src/main/resources/fabric.mod.json +++ b/deprecated/fabric-convention-tags-v1/src/main/resources/fabric.mod.json @@ -21,7 +21,7 @@ ] }, "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "minecraft": ">=1.18.2" }, "description": "Contains common tags used by mods for vanilla things.", diff --git a/deprecated/fabric-keybindings-v0/src/client/resources/fabric.mod.json b/deprecated/fabric-keybindings-v0/src/client/resources/fabric.mod.json index bc7a8cfebd..7892ae6ac8 100644 --- a/deprecated/fabric-keybindings-v0/src/client/resources/fabric.mod.json +++ b/deprecated/fabric-keybindings-v0/src/client/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "fabric-key-binding-api-v1": "*" }, "description": "Keybinding registry API.", diff --git a/deprecated/fabric-loot-api-v2/src/main/resources/fabric.mod.json b/deprecated/fabric-loot-api-v2/src/main/resources/fabric.mod.json index c5d49bef50..8d517d0a40 100644 --- a/deprecated/fabric-loot-api-v2/src/main/resources/fabric.mod.json +++ b/deprecated/fabric-loot-api-v2/src/main/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "fabric-api-base": "*", "fabric-resource-loader-v0": "*" }, diff --git a/deprecated/fabric-rendering-data-attachment-v1/src/main/resources/fabric.mod.json b/deprecated/fabric-rendering-data-attachment-v1/src/main/resources/fabric.mod.json index 3ac55181d0..6ff101299e 100644 --- a/deprecated/fabric-rendering-data-attachment-v1/src/main/resources/fabric.mod.json +++ b/deprecated/fabric-rendering-data-attachment-v1/src/main/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "fabric-block-view-api-v2": "*" }, "description": "Thread-safe hooks for block entity data use during terrain rendering.", diff --git a/deprecated/fabric-rendering-v0/src/client/resources/fabric.mod.json b/deprecated/fabric-rendering-v0/src/client/resources/fabric.mod.json index 8d13cd65ed..1d69e9ce91 100644 --- a/deprecated/fabric-rendering-v0/src/client/resources/fabric.mod.json +++ b/deprecated/fabric-rendering-v0/src/client/resources/fabric.mod.json @@ -21,7 +21,7 @@ ] }, "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "minecraft": ">=1.15-alpha.19.39.a", "fabric-api-base": "*", "fabric-rendering-v1": "*" diff --git a/fabric-api-base/src/main/resources/fabric.mod.json b/fabric-api-base/src/main/resources/fabric.mod.json index f4eb9cc9b7..d56c05ac04 100644 --- a/fabric-api-base/src/main/resources/fabric.mod.json +++ b/fabric-api-base/src/main/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3" + "fabricloader": ">=0.16.4" }, "description": "Contains the essentials for Fabric API modules.", "custom": { diff --git a/fabric-api-lookup-api-v1/src/main/resources/fabric.mod.json b/fabric-api-lookup-api-v1/src/main/resources/fabric.mod.json index 3e1b741295..e993752d4c 100644 --- a/fabric-api-lookup-api-v1/src/main/resources/fabric.mod.json +++ b/fabric-api-lookup-api-v1/src/main/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "fabric-api-base": "*", "fabric-lifecycle-events-v1": "*" }, diff --git a/fabric-api-lookup-api-v1/src/testmod/java/net/fabricmc/fabric/test/lookup/FabricApiLookupTest.java b/fabric-api-lookup-api-v1/src/testmod/java/net/fabricmc/fabric/test/lookup/FabricApiLookupTest.java index e431ea8f3d..48097ba86d 100644 --- a/fabric-api-lookup-api-v1/src/testmod/java/net/fabricmc/fabric/test/lookup/FabricApiLookupTest.java +++ b/fabric-api-lookup-api-v1/src/testmod/java/net/fabricmc/fabric/test/lookup/FabricApiLookupTest.java @@ -46,19 +46,19 @@ public class FabricApiLookupTest implements ModInitializer { // It's meant to work with unsided containers: chests, dispensers, droppers and hoppers. public static final RegistryKey CHUTE_BLOCK_KEY = keyOf("chute"); public static final ChuteBlock CHUTE_BLOCK = new ChuteBlock(AbstractBlock.Settings.create().registryKey(CHUTE_BLOCK_KEY)); - public static final BlockItem CHUTE_ITEM = new BlockItem(CHUTE_BLOCK, new Item.Settings()); + public static final BlockItem CHUTE_ITEM = new BlockItem(CHUTE_BLOCK, new Item.Settings().registryKey(RegistryKey.of(RegistryKeys.ITEM, CHUTE_BLOCK_KEY.getValue()))); public static BlockEntityType CHUTE_BLOCK_ENTITY_TYPE; // Cobble gen - Block without model that can generate infinite cobblestone when placed above a chute. // It's meant to test BlockApiLookup#registerSelf. public static final RegistryKey COBBLE_GEN_BLOCK_KEY = keyOf("cobble_gen"); public static final CobbleGenBlock COBBLE_GEN_BLOCK = new CobbleGenBlock(AbstractBlock.Settings.create().registryKey(COBBLE_GEN_BLOCK_KEY)); - public static final BlockItem COBBLE_GEN_ITEM = new BlockItem(COBBLE_GEN_BLOCK, new Item.Settings()); + public static final BlockItem COBBLE_GEN_ITEM = new BlockItem(COBBLE_GEN_BLOCK, new Item.Settings().registryKey(RegistryKey.of(RegistryKeys.ITEM, COBBLE_GEN_BLOCK_KEY.getValue()))); public static BlockEntityType COBBLE_GEN_BLOCK_ENTITY_TYPE; // Testing for item api lookups is done in the `item` package. public static final RegistryKey INSPECTOR_BLOCK_KEY = keyOf("inspector"); public static final InspectorBlock INSPECTOR_BLOCK = new InspectorBlock(AbstractBlock.Settings.create().registryKey(INSPECTOR_BLOCK_KEY)); - public static final BlockItem INSPECTOR_ITEM = new BlockItem(INSPECTOR_BLOCK, new Item.Settings()); + public static final BlockItem INSPECTOR_ITEM = new BlockItem(INSPECTOR_BLOCK, new Item.Settings().registryKey(RegistryKey.of(RegistryKeys.ITEM, INSPECTOR_BLOCK_KEY.getValue()))); private static RegistryKey keyOf(String id) { return RegistryKey.of(RegistryKeys.BLOCK, Identifier.of(MOD_ID, id)); diff --git a/fabric-api-lookup-api-v1/src/testmod/java/net/fabricmc/fabric/test/lookup/item/FabricItemApiLookupTest.java b/fabric-api-lookup-api-v1/src/testmod/java/net/fabricmc/fabric/test/lookup/item/FabricItemApiLookupTest.java index c119c1706d..4bfae7217c 100644 --- a/fabric-api-lookup-api-v1/src/testmod/java/net/fabricmc/fabric/test/lookup/item/FabricItemApiLookupTest.java +++ b/fabric-api-lookup-api-v1/src/testmod/java/net/fabricmc/fabric/test/lookup/item/FabricItemApiLookupTest.java @@ -19,9 +19,12 @@ import static net.fabricmc.fabric.test.lookup.FabricApiLookupTest.ensureException; import net.minecraft.component.DataComponentTypes; +import net.minecraft.item.Item; import net.minecraft.item.Items; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.RegistryKeys; import net.minecraft.text.Text; import net.minecraft.util.Identifier; @@ -33,10 +36,11 @@ public class FabricItemApiLookupTest { public static final ItemApiLookup INSPECTABLE = ItemApiLookup.get(Identifier.of("testmod", "inspectable"), Inspectable.class, Void.class); - public static final InspectableItem HELLO_ITEM = new InspectableItem("Hello Fabric API tester!"); + public static final RegistryKey HELLO_ITEM_KEY = RegistryKey.of(RegistryKeys.ITEM, Identifier.of(FabricApiLookupTest.MOD_ID, "hello")); + public static final InspectableItem HELLO_ITEM = new InspectableItem("Hello Fabric API tester!", new Item.Settings().registryKey(HELLO_ITEM_KEY)); public static void onInitialize() { - Registry.register(Registries.ITEM, Identifier.of(FabricApiLookupTest.MOD_ID, "hello"), HELLO_ITEM); + Registry.register(Registries.ITEM, HELLO_ITEM_KEY, HELLO_ITEM); // Diamonds and diamond blocks can be inspected and will also print their name. INSPECTABLE.registerForItems((stack, ignored) -> () -> { diff --git a/fabric-api-lookup-api-v1/src/testmod/java/net/fabricmc/fabric/test/lookup/item/InspectableItem.java b/fabric-api-lookup-api-v1/src/testmod/java/net/fabricmc/fabric/test/lookup/item/InspectableItem.java index 9cf89887a0..793b486661 100644 --- a/fabric-api-lookup-api-v1/src/testmod/java/net/fabricmc/fabric/test/lookup/item/InspectableItem.java +++ b/fabric-api-lookup-api-v1/src/testmod/java/net/fabricmc/fabric/test/lookup/item/InspectableItem.java @@ -24,8 +24,8 @@ public class InspectableItem extends Item implements Inspectable { private final String inspectionResult; - public InspectableItem(String inspectionResult) { - super(new Settings()); + public InspectableItem(String inspectionResult, Item.Settings settings) { + super(settings); this.inspectionResult = inspectionResult; } diff --git a/fabric-biome-api-v1/src/main/resources/fabric.mod.json b/fabric-biome-api-v1/src/main/resources/fabric.mod.json index accee65c57..a3a9ade69c 100644 --- a/fabric-biome-api-v1/src/main/resources/fabric.mod.json +++ b/fabric-biome-api-v1/src/main/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "minecraft": ">=1.16.2" }, "description": "Hooks for adding biomes to the default world generator.", diff --git a/fabric-block-api-v1/src/main/resources/fabric.mod.json b/fabric-block-api-v1/src/main/resources/fabric.mod.json index 561310576d..2b6a45b7c7 100644 --- a/fabric-block-api-v1/src/main/resources/fabric.mod.json +++ b/fabric-block-api-v1/src/main/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3" + "fabricloader": ">=0.16.4" }, "entrypoints": { }, diff --git a/fabric-block-view-api-v2/src/main/resources/fabric.mod.json b/fabric-block-view-api-v2/src/main/resources/fabric.mod.json index 910985ca23..24cc008311 100644 --- a/fabric-block-view-api-v2/src/main/resources/fabric.mod.json +++ b/fabric-block-view-api-v2/src/main/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3" + "fabricloader": ">=0.16.4" }, "description": "Hooks for block views", "mixins": [ diff --git a/fabric-blockrenderlayer-v1/src/client/resources/fabric.mod.json b/fabric-blockrenderlayer-v1/src/client/resources/fabric.mod.json index e53837afa2..32b20eed10 100644 --- a/fabric-blockrenderlayer-v1/src/client/resources/fabric.mod.json +++ b/fabric-blockrenderlayer-v1/src/client/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "minecraft": ">=1.15-alpha.19.38.b", "fabric-api-base": "*" }, diff --git a/fabric-client-tags-api-v1/src/client/resources/fabric.mod.json b/fabric-client-tags-api-v1/src/client/resources/fabric.mod.json index 75dca850b2..cf6c0eaca5 100644 --- a/fabric-client-tags-api-v1/src/client/resources/fabric.mod.json +++ b/fabric-client-tags-api-v1/src/client/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3" + "fabricloader": ">=0.16.4" }, "description": "Adds the ability to load tags from the local mods.", "custom": { diff --git a/fabric-command-api-v2/src/main/resources/fabric.mod.json b/fabric-command-api-v2/src/main/resources/fabric.mod.json index da10fff3e7..6c4aab461a 100644 --- a/fabric-command-api-v2/src/main/resources/fabric.mod.json +++ b/fabric-command-api-v2/src/main/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "fabric-api-base": "*", "minecraft": ">1.19-alpha.22.11.a" }, diff --git a/fabric-content-registries-v0/src/main/resources/fabric.mod.json b/fabric-content-registries-v0/src/main/resources/fabric.mod.json index af9c807a1c..acddaae547 100644 --- a/fabric-content-registries-v0/src/main/resources/fabric.mod.json +++ b/fabric-content-registries-v0/src/main/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "fabric-api-base": "*", "fabric-lifecycle-events-v1": "*", "fabric-resource-loader-v0": "*" diff --git a/fabric-content-registries-v0/src/testmod/java/net/fabricmc/fabric/test/content/registry/ContentRegistryTest.java b/fabric-content-registries-v0/src/testmod/java/net/fabricmc/fabric/test/content/registry/ContentRegistryTest.java index 56590d07da..ca520bc743 100644 --- a/fabric-content-registries-v0/src/testmod/java/net/fabricmc/fabric/test/content/registry/ContentRegistryTest.java +++ b/fabric-content-registries-v0/src/testmod/java/net/fabricmc/fabric/test/content/registry/ContentRegistryTest.java @@ -150,9 +150,9 @@ public void onInitialize() { LOGGER.info("SculkSensorFrequencyRegistry test passed!"); } - var dirtyPotion = new DirtyPotionItem(new Item.Settings().maxCount(1)); - Registry.register(Registries.ITEM, Identifier.of("fabric-content-registries-v0-testmod", "dirty_potion"), - dirtyPotion); + RegistryKey dirtyPotionKey = RegistryKey.of(RegistryKeys.ITEM, Identifier.of("fabric-content-registries-v0-testmod", "dirty_potion")); + var dirtyPotion = new DirtyPotionItem(new Item.Settings().maxCount(1).registryKey(dirtyPotionKey)); + Registry.register(Registries.ITEM, dirtyPotionKey, dirtyPotion); /* Mods should use BrewingRecipeRegistry.registerPotionType(Item), which is access widened by fabric-transitive-access-wideners-v1 * This testmod uses an accessor due to Loom limitations that prevent TAWs from applying across Gradle subproject boundaries */ FabricBrewingRecipeRegistryBuilder.BUILD.register(builder -> { diff --git a/fabric-convention-tags-v2/src/datagen/resources/fabric.mod.json b/fabric-convention-tags-v2/src/datagen/resources/fabric.mod.json index a72b60e4ce..5ca790a8f6 100644 --- a/fabric-convention-tags-v2/src/datagen/resources/fabric.mod.json +++ b/fabric-convention-tags-v2/src/datagen/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "minecraft": ">=1.18.2" }, "description": "Contains common tags used by mods for vanilla things.", diff --git a/fabric-convention-tags-v2/src/main/resources/fabric.mod.json b/fabric-convention-tags-v2/src/main/resources/fabric.mod.json index 4a6fc12849..51b3869ca9 100644 --- a/fabric-convention-tags-v2/src/main/resources/fabric.mod.json +++ b/fabric-convention-tags-v2/src/main/resources/fabric.mod.json @@ -21,7 +21,7 @@ ] }, "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "minecraft": ">=1.20.5-beta.1", "fabric-lifecycle-events-v1": "*" }, diff --git a/fabric-crash-report-info-v1/src/main/resources/fabric.mod.json b/fabric-crash-report-info-v1/src/main/resources/fabric.mod.json index cd02dfc071..57abf77152 100644 --- a/fabric-crash-report-info-v1/src/main/resources/fabric.mod.json +++ b/fabric-crash-report-info-v1/src/main/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3" + "fabricloader": ">=0.16.4" }, "description": "Adds Fabric-related debug info to crash reports.", "mixins": [ diff --git a/fabric-data-attachment-api-v1/src/main/resources/fabric.mod.json b/fabric-data-attachment-api-v1/src/main/resources/fabric.mod.json index 60c0507b65..5bb53cd750 100644 --- a/fabric-data-attachment-api-v1/src/main/resources/fabric.mod.json +++ b/fabric-data-attachment-api-v1/src/main/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "fabric-entity-events-v1": "*", "fabric-object-builder-api-v1": "*" }, diff --git a/fabric-data-attachment-api-v1/src/testmod/java/net/fabricmc/fabric/test/attachment/gametest/AttachmentCopyTests.java b/fabric-data-attachment-api-v1/src/testmod/java/net/fabricmc/fabric/test/attachment/gametest/AttachmentCopyTests.java index d4f114a0cd..7f36e5c339 100644 --- a/fabric-data-attachment-api-v1/src/testmod/java/net/fabricmc/fabric/test/attachment/gametest/AttachmentCopyTests.java +++ b/fabric-data-attachment-api-v1/src/testmod/java/net/fabricmc/fabric/test/attachment/gametest/AttachmentCopyTests.java @@ -16,19 +16,22 @@ package net.fabricmc.fabric.test.attachment.gametest; +import java.util.List; import java.util.Objects; import java.util.function.IntSupplier; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.SpawnReason; -import net.minecraft.entity.mob.MobEntity; +import net.minecraft.entity.mob.DrownedEntity; +import net.minecraft.entity.mob.ZombieEntity; import net.minecraft.server.MinecraftServer; import net.minecraft.server.world.ServerWorld; import net.minecraft.test.GameTest; import net.minecraft.test.GameTestException; import net.minecraft.test.TestContext; import net.minecraft.util.Identifier; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.TeleportTarget; import net.minecraft.world.World; @@ -36,6 +39,7 @@ import net.fabricmc.fabric.api.attachment.v1.AttachmentType; import net.fabricmc.fabric.api.gametest.v1.FabricGameTest; import net.fabricmc.fabric.test.attachment.AttachmentTestMod; +import net.fabricmc.fabric.test.attachment.mixin.ZombieEntityAccessor; public class AttachmentCopyTests implements FabricGameTest { // using a lambda type because serialization shouldn't play a role in this @@ -74,10 +78,19 @@ public void testCrossWorldTeleport(TestContext context) { @GameTest(templateName = FabricGameTest.EMPTY_STRUCTURE) public void testMobConversion(TestContext context) { - MobEntity mob = Objects.requireNonNull(EntityType.ZOMBIE.create(context.getWorld(), SpawnReason.SPAWN_EGG)); + ZombieEntity mob = context.spawnEntity(EntityType.ZOMBIE, BlockPos.ORIGIN); mob.setAttached(DUMMY, () -> 42); mob.setAttached(COPY_ON_DEATH, () -> 42); - MobEntity converted = mob.convertTo(EntityType.DROWNED, false); + + ZombieEntityAccessor zombieEntityAccessor = (ZombieEntityAccessor) mob; + zombieEntityAccessor.invokeConvertTo(EntityType.DROWNED); + List drowned = context.getEntities(EntityType.DROWNED); + + if (drowned.size() != 1) { + throw new GameTestException("Conversion failed"); + } + + DrownedEntity converted = drowned.getFirst(); if (converted == null) throw new GameTestException("Conversion failed"); if (converted.hasAttached(DUMMY)) { diff --git a/fabric-entity-events-v1/src/testmod/java/net/fabricmc/fabric/test/entity/event/DiamondElytraItem.java b/fabric-data-attachment-api-v1/src/testmod/java/net/fabricmc/fabric/test/attachment/mixin/ZombieEntityAccessor.java similarity index 61% rename from fabric-entity-events-v1/src/testmod/java/net/fabricmc/fabric/test/entity/event/DiamondElytraItem.java rename to fabric-data-attachment-api-v1/src/testmod/java/net/fabricmc/fabric/test/attachment/mixin/ZombieEntityAccessor.java index d844dba596..5190079119 100644 --- a/fabric-entity-events-v1/src/testmod/java/net/fabricmc/fabric/test/entity/event/DiamondElytraItem.java +++ b/fabric-data-attachment-api-v1/src/testmod/java/net/fabricmc/fabric/test/attachment/mixin/ZombieEntityAccessor.java @@ -14,15 +14,16 @@ * limitations under the License. */ -package net.fabricmc.fabric.test.entity.event; +package net.fabricmc.fabric.test.attachment.mixin; -import net.minecraft.item.ArmorItem; -import net.minecraft.item.ArmorMaterials; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; -import net.fabricmc.fabric.api.entity.event.v1.FabricElytraItem; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.mob.ZombieEntity; -public class DiamondElytraItem extends ArmorItem implements FabricElytraItem { - public DiamondElytraItem() { - super(ArmorMaterials.DIAMOND, Type.CHESTPLATE, new Settings().maxCount(1).maxDamage(100)); - } +@Mixin(ZombieEntity.class) +public interface ZombieEntityAccessor { + @Invoker("convertTo") + void invokeConvertTo(EntityType entityType); } diff --git a/fabric-data-attachment-api-v1/src/testmod/resources/fabric-data-attachment-api-v1-testmod.mixins.json b/fabric-data-attachment-api-v1/src/testmod/resources/fabric-data-attachment-api-v1-testmod.mixins.json index 156ced7510..1c6dc87cbf 100644 --- a/fabric-data-attachment-api-v1/src/testmod/resources/fabric-data-attachment-api-v1-testmod.mixins.json +++ b/fabric-data-attachment-api-v1/src/testmod/resources/fabric-data-attachment-api-v1-testmod.mixins.json @@ -3,7 +3,8 @@ "package": "net.fabricmc.fabric.test.attachment.mixin", "compatibilityLevel": "JAVA_21", "mixins": [ - "BlockEntityTypeAccessor" + "BlockEntityTypeAccessor", + "ZombieEntityAccessor" ], "injectors": { "defaultRequire": 1 diff --git a/fabric-data-generation-api-v1/src/main/resources/fabric-data-generation-api-v1.accesswidener b/fabric-data-generation-api-v1/src/main/resources/fabric-data-generation-api-v1.accesswidener index a255793ea5..be4e30fe78 100644 --- a/fabric-data-generation-api-v1/src/main/resources/fabric-data-generation-api-v1.accesswidener +++ b/fabric-data-generation-api-v1/src/main/resources/fabric-data-generation-api-v1.accesswidener @@ -317,8 +317,8 @@ transitive-accessible method net/minecraft/data/client/ItemModelGenerator regist transitive-accessible method net/minecraft/data/client/ItemModelGenerator uploadArmor (Lnet/minecraft/util/Identifier;Lnet/minecraft/util/Identifier;Lnet/minecraft/util/Identifier;)V transitive-accessible method net/minecraft/data/client/ItemModelGenerator uploadArmor (Lnet/minecraft/util/Identifier;Lnet/minecraft/util/Identifier;Lnet/minecraft/util/Identifier;Lnet/minecraft/util/Identifier;)V transitive-accessible method net/minecraft/data/client/ItemModelGenerator suffixTrim (Lnet/minecraft/util/Identifier;Ljava/lang/String;)Lnet/minecraft/util/Identifier; -transitive-accessible method net/minecraft/data/client/ItemModelGenerator createArmorJson (Lnet/minecraft/util/Identifier;Ljava/util/Map;Lnet/minecraft/registry/entry/RegistryEntry;)Lcom/google/gson/JsonObject; -transitive-accessible method net/minecraft/data/client/ItemModelGenerator registerArmor (Lnet/minecraft/item/ArmorItem;)V +transitive-accessible method net/minecraft/data/client/ItemModelGenerator createArmorJson (Lnet/minecraft/util/Identifier;Ljava/util/Map;Lnet/minecraft/util/Identifier;)Lcom/google/gson/JsonObject; +transitive-accessible method net/minecraft/data/client/ItemModelGenerator registerArmor (Lnet/minecraft/item/Item;Lnet/minecraft/util/Identifier;Lnet/minecraft/item/equipment/EquipmentModel;Lnet/minecraft/entity/EquipmentSlot;)V transitive-extendable method net/minecraft/data/MetadataProvider getName ()Ljava/lang/String; transitive-extendable method net/minecraft/data/SnbtProvider getName ()Ljava/lang/String; transitive-extendable method net/minecraft/data/client/ModelProvider getName ()Ljava/lang/String; diff --git a/fabric-data-generation-api-v1/src/main/resources/fabric.mod.json b/fabric-data-generation-api-v1/src/main/resources/fabric.mod.json index b39477efe7..e9a3481d37 100644 --- a/fabric-data-generation-api-v1/src/main/resources/fabric.mod.json +++ b/fabric-data-generation-api-v1/src/main/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3" + "fabricloader": ">=0.16.4" }, "description": "Allows for automatic data generation.", "mixins": [ diff --git a/fabric-data-generation-api-v1/src/testmod/java/net/fabricmc/fabric/test/datagen/DataGeneratorTestContent.java b/fabric-data-generation-api-v1/src/testmod/java/net/fabricmc/fabric/test/datagen/DataGeneratorTestContent.java index 3c99bc692d..bd24be8a81 100644 --- a/fabric-data-generation-api-v1/src/testmod/java/net/fabricmc/fabric/test/datagen/DataGeneratorTestContent.java +++ b/fabric-data-generation-api-v1/src/testmod/java/net/fabricmc/fabric/test/datagen/DataGeneratorTestContent.java @@ -88,7 +88,7 @@ private static Block createBlock(String name, boolean hasItem, AbstractBlock.Set Block block = Registry.register(Registries.BLOCK, identifier, new Block(settings.registryKey(RegistryKey.of(RegistryKeys.BLOCK, identifier)))); if (hasItem) { - Registry.register(Registries.ITEM, identifier, new BlockItem(block, new Item.Settings())); + Registry.register(Registries.ITEM, identifier, new BlockItem(block, new Item.Settings().registryKey(RegistryKey.of(RegistryKeys.ITEM, identifier)))); } return block; diff --git a/fabric-dimensions-v1/src/main/resources/fabric.mod.json b/fabric-dimensions-v1/src/main/resources/fabric.mod.json index c17222110a..a66ad94020 100644 --- a/fabric-dimensions-v1/src/main/resources/fabric.mod.json +++ b/fabric-dimensions-v1/src/main/resources/fabric.mod.json @@ -15,7 +15,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "minecraft": ">=1.16-rc.3", "fabric-api-base": "*" }, diff --git a/fabric-entity-events-v1/src/client/java/net/fabricmc/fabric/mixin/client/entity/event/elytra/ClientPlayerEntityMixin.java b/fabric-entity-events-v1/src/client/java/net/fabricmc/fabric/mixin/client/entity/event/elytra/ClientPlayerEntityMixin.java deleted file mode 100644 index 8fbae914b6..0000000000 --- a/fabric-entity-events-v1/src/client/java/net/fabricmc/fabric/mixin/client/entity/event/elytra/ClientPlayerEntityMixin.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (c) 2016, 2017, 2018, 2019 FabricMC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.fabricmc.fabric.mixin.client.entity.event.elytra; - -import com.mojang.authlib.GameProfile; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.Slice; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import net.minecraft.client.network.AbstractClientPlayerEntity; -import net.minecraft.client.network.ClientPlayNetworkHandler; -import net.minecraft.client.network.ClientPlayerEntity; -import net.minecraft.client.world.ClientWorld; -import net.minecraft.item.Items; -import net.minecraft.network.packet.c2s.play.ClientCommandC2SPacket; - -@SuppressWarnings("unused") -@Mixin(ClientPlayerEntity.class) -abstract class ClientPlayerEntityMixin extends AbstractClientPlayerEntity { - ClientPlayerEntityMixin(ClientWorld world, GameProfile profile) { - super(world, profile); - throw new AssertionError(); - } - - @Shadow - @Final - private ClientPlayNetworkHandler networkHandler; - - /** - * Call {@link #checkFallFlying()} even if the player is not wearing {@link Items#ELYTRA} to allow custom elytra flight. - */ - @Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/entity/EquipmentSlot;CHEST:Lnet/minecraft/entity/EquipmentSlot;"), method = "tickMovement", slice = @Slice(from = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;isClimbing()Z"), to = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;checkFallFlying()Z")), allow = 1) - void injectElytraStart(CallbackInfo info) { - // Note that if fall flying is not ALLOWed, checkFallFlying will return false and nothing will happen. - if (this.checkFallFlying()) { - networkHandler.sendPacket(new ClientCommandC2SPacket(this, ClientCommandC2SPacket.Mode.START_FALL_FLYING)); - } - } -} diff --git a/fabric-entity-events-v1/src/client/resources/fabric-entity-events-v1.client.mixins.json b/fabric-entity-events-v1/src/client/resources/fabric-entity-events-v1.client.mixins.json deleted file mode 100644 index f39270ec87..0000000000 --- a/fabric-entity-events-v1/src/client/resources/fabric-entity-events-v1.client.mixins.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "required": true, - "package": "net.fabricmc.fabric.mixin.client.entity.event", - "compatibilityLevel": "JAVA_21", - "client": [ - "elytra.ClientPlayerEntityMixin" - ], - "injectors": { - "defaultRequire": 1, - "maxShiftBy": 3 - } -} diff --git a/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/api/entity/event/v1/EntityElytraEvents.java b/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/api/entity/event/v1/EntityElytraEvents.java index ad444a7a88..986f7bdb9a 100644 --- a/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/api/entity/event/v1/EntityElytraEvents.java +++ b/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/api/entity/event/v1/EntityElytraEvents.java @@ -16,9 +16,8 @@ package net.fabricmc.fabric.api.entity.event.v1; -import net.minecraft.entity.EquipmentSlot; +import net.minecraft.component.DataComponentTypes; import net.minecraft.entity.LivingEntity; -import net.minecraft.item.ItemStack; import net.fabricmc.fabric.api.event.Event; import net.fabricmc.fabric.api.event.EventFactory; @@ -45,7 +44,7 @@ public final class EntityElytraEvents { * An event to grant elytra flight to living entities when some condition is met. * Will be called when players try to start elytra flight by pressing space in mid-air, and every tick for all flying living entities to check if elytra flight is still allowed. * - *

Items that wish to enable custom elytra flight when worn in the chest equipment slot can simply implement {@link FabricElytraItem} instead of registering a listener. + *

Items that wish to enable custom elytra flight when worn in the chest equipment slot can add the {@link DataComponentTypes#GLIDER} component to an item. */ public static final Event CUSTOM = EventFactory.createArrayBacked(Custom.class, listeners -> (entity, tickElytra) -> { for (Custom listener : listeners) { @@ -57,18 +56,6 @@ public final class EntityElytraEvents { return false; }); - static { - CUSTOM.register((entity, tickElytra) -> { - ItemStack chestStack = entity.getEquippedStack(EquipmentSlot.CHEST); - - if (chestStack.getItem() instanceof FabricElytraItem fabricElytraItem) { - return fabricElytraItem.useCustomElytra(entity, chestStack, tickElytra); - } - - return false; - }); - } - @FunctionalInterface public interface Allow { /** diff --git a/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/api/entity/event/v1/FabricElytraItem.java b/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/api/entity/event/v1/FabricElytraItem.java deleted file mode 100644 index 0d7fee1e66..0000000000 --- a/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/api/entity/event/v1/FabricElytraItem.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (c) 2016, 2017, 2018, 2019 FabricMC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.fabricmc.fabric.api.entity.event.v1; - -import net.minecraft.entity.EquipmentSlot; -import net.minecraft.entity.LivingEntity; -import net.minecraft.item.ElytraItem; -import net.minecraft.item.ItemStack; -import net.minecraft.world.event.GameEvent; - -/** - * An interface that can be implemented on an item to provide custom elytra flight when it is worn in the {@link EquipmentSlot#CHEST} slot. - * - *

To disable cape rendering when this item is worn (like the vanilla elytra item), have a look at {@code LivingEntityFeatureRenderEvents}. - */ -public interface FabricElytraItem { - /** - * Try to use this custom elytra. - * - * @param entity the entity - * @param chestStack the stack currently worn in the chest slot, will always be of this item - * @param tickElytra true to tick the elytra, false to only perform the check; vanilla-like elytras can use {@link #doVanillaElytraTick} to handle ticking - * @return true to enable elytra flight for the entity - */ - default boolean useCustomElytra(LivingEntity entity, ItemStack chestStack, boolean tickElytra) { - if (ElytraItem.isUsable(chestStack)) { - if (tickElytra) { - doVanillaElytraTick(entity, chestStack); - } - - return true; - } - - return false; - } - - /** - * A helper to perform the default vanilla elytra tick logic: damage the elytra every 20 ticks, and send a game event every 10 ticks. - */ - default void doVanillaElytraTick(LivingEntity entity, ItemStack chestStack) { - int nextRoll = entity.getFallFlyingTicks() + 1; - - if (!entity.getWorld().isClient && nextRoll % 10 == 0) { - if ((nextRoll / 10) % 2 == 0) { - chestStack.damage(1, entity, EquipmentSlot.CHEST); - } - - entity.emitGameEvent(GameEvent.ELYTRA_GLIDE); - } - } -} diff --git a/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/api/entity/event/v1/ServerLivingEntityEvents.java b/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/api/entity/event/v1/ServerLivingEntityEvents.java index 82f5b481ba..f00126d533 100644 --- a/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/api/entity/event/v1/ServerLivingEntityEvents.java +++ b/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/api/entity/event/v1/ServerLivingEntityEvents.java @@ -17,6 +17,7 @@ package net.fabricmc.fabric.api.entity.event.v1; import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.conversion.EntityConversionContext; import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.mob.MobEntity; @@ -166,9 +167,9 @@ public interface MobConversion { * * @param previous the previous entity instance * @param converted the new instance for the converted entity - * @param keepEquipment whether the converted entity should keep the previous one's equipment, like armor + * @param conversionContext the context used for the conversion */ - void onConversion(MobEntity previous, MobEntity converted, boolean keepEquipment); + void onConversion(MobEntity previous, MobEntity converted, EntityConversionContext conversionContext); } private ServerLivingEntityEvents() { diff --git a/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/mixin/entity/event/MobEntityMixin.java b/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/mixin/entity/event/MobEntityMixin.java index eb026aac11..b03c0affcb 100644 --- a/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/mixin/entity/event/MobEntityMixin.java +++ b/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/mixin/entity/event/MobEntityMixin.java @@ -22,15 +22,16 @@ import org.spongepowered.asm.mixin.injection.ModifyArg; import net.minecraft.entity.Entity; +import net.minecraft.entity.conversion.EntityConversionContext; import net.minecraft.entity.mob.MobEntity; import net.fabricmc.fabric.api.entity.event.v1.ServerLivingEntityEvents; @Mixin(MobEntity.class) public class MobEntityMixin { - @ModifyArg(method = "convertTo", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;spawnEntity(Lnet/minecraft/entity/Entity;)Z")) - private Entity afterEntityConverted(Entity converted, @Local(argsOnly = true) boolean keepEquipment) { - ServerLivingEntityEvents.MOB_CONVERSION.invoker().onConversion((MobEntity) (Object) this, (MobEntity) converted, keepEquipment); + @ModifyArg(method = "convertTo", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/world/ServerWorld;spawnEntityAndPassengers(Lnet/minecraft/entity/Entity;)V")) + private Entity afterEntityConverted(Entity converted, @Local(argsOnly = true) EntityConversionContext conversionContext) { + ServerLivingEntityEvents.MOB_CONVERSION.invoker().onConversion((MobEntity) (Object) this, (MobEntity) converted, conversionContext); return converted; } } diff --git a/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/mixin/entity/event/MooshroomEntityMixin.java b/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/mixin/entity/event/MooshroomEntityMixin.java deleted file mode 100644 index 4f5d6e74f2..0000000000 --- a/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/mixin/entity/event/MooshroomEntityMixin.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2016, 2017, 2018, 2019 FabricMC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.fabricmc.fabric.mixin.entity.event; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyArg; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.mob.MobEntity; -import net.minecraft.entity.passive.MooshroomEntity; - -import net.fabricmc.fabric.api.entity.event.v1.ServerLivingEntityEvents; - -@Mixin(MooshroomEntity.class) -class MooshroomEntityMixin { - @ModifyArg( - method = "sheared", - at = @At(ordinal = 0, value = "INVOKE", target = "Lnet/minecraft/world/World;spawnEntity(Lnet/minecraft/entity/Entity;)Z") - ) - private Entity afterMooshroomConversion(Entity converted) { - ServerLivingEntityEvents.MOB_CONVERSION.invoker().onConversion((MooshroomEntity) (Object) this, (MobEntity) converted, false); - return converted; - } -} diff --git a/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/mixin/entity/event/PigEntityMixin.java b/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/mixin/entity/event/PigEntityMixin.java deleted file mode 100644 index 789c58ede0..0000000000 --- a/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/mixin/entity/event/PigEntityMixin.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2016, 2017, 2018, 2019 FabricMC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.fabricmc.fabric.mixin.entity.event; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyArg; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.mob.MobEntity; -import net.minecraft.entity.passive.AnimalEntity; -import net.minecraft.entity.passive.PigEntity; -import net.minecraft.world.World; - -import net.fabricmc.fabric.api.entity.event.v1.ServerLivingEntityEvents; - -@Mixin(PigEntity.class) -abstract class PigEntityMixin extends AnimalEntity { - protected PigEntityMixin(EntityType entityType, World world) { - super(entityType, world); - } - - @ModifyArg( - method = "onStruckByLightning", - at = @At(value = "INVOKE", target = "Lnet/minecraft/server/world/ServerWorld;spawnEntity(Lnet/minecraft/entity/Entity;)Z") - ) - private Entity afterPiglinConversion(Entity converted) { - ServerLivingEntityEvents.MOB_CONVERSION.invoker().onConversion(this, (MobEntity) converted, false); - return converted; - } -} diff --git a/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/mixin/entity/event/TadpoleEntityMixin.java b/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/mixin/entity/event/TadpoleEntityMixin.java deleted file mode 100644 index e33cfc26e1..0000000000 --- a/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/mixin/entity/event/TadpoleEntityMixin.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2016, 2017, 2018, 2019 FabricMC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.fabricmc.fabric.mixin.entity.event; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyArg; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.mob.MobEntity; -import net.minecraft.entity.passive.FishEntity; -import net.minecraft.entity.passive.TadpoleEntity; -import net.minecraft.world.World; - -import net.fabricmc.fabric.api.entity.event.v1.ServerLivingEntityEvents; - -@Mixin(TadpoleEntity.class) -abstract class TadpoleEntityMixin extends FishEntity { - TadpoleEntityMixin(EntityType entityType, World world) { - super(entityType, world); - } - - @ModifyArg( - method = "growUp", - at = @At(value = "INVOKE", target = "Lnet/minecraft/server/world/ServerWorld;spawnEntityAndPassengers(Lnet/minecraft/entity/Entity;)V") - ) - private Entity afterGrowingUpToFrog(Entity converted) { - ServerLivingEntityEvents.MOB_CONVERSION.invoker().onConversion(this, (MobEntity) converted, false); - return converted; - } -} diff --git a/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/mixin/entity/event/VillagerEntityMixin.java b/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/mixin/entity/event/VillagerEntityMixin.java deleted file mode 100644 index 4c3e32f36b..0000000000 --- a/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/mixin/entity/event/VillagerEntityMixin.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2016, 2017, 2018, 2019 FabricMC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.fabricmc.fabric.mixin.entity.event; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.ModifyArg; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityType; -import net.minecraft.entity.mob.MobEntity; -import net.minecraft.entity.passive.MerchantEntity; -import net.minecraft.entity.passive.VillagerEntity; -import net.minecraft.world.World; - -import net.fabricmc.fabric.api.entity.event.v1.ServerLivingEntityEvents; - -@Mixin(VillagerEntity.class) -abstract class VillagerEntityMixin extends MerchantEntity { - VillagerEntityMixin(EntityType entityType, World world) { - super(entityType, world); - } - - @ModifyArg( - method = "onStruckByLightning", - at = @At(value = "INVOKE", target = "Lnet/minecraft/server/world/ServerWorld;spawnEntityAndPassengers(Lnet/minecraft/entity/Entity;)V") - ) - private Entity afterWitchConversion(Entity converted) { - ServerLivingEntityEvents.MOB_CONVERSION.invoker().onConversion(this, (MobEntity) converted, false); - return converted; - } -} diff --git a/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/mixin/entity/event/elytra/ElytraFlightControllerMixin.java b/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/mixin/entity/event/elytra/ElytraFlightControllerMixin.java deleted file mode 100644 index b4e2e0241f..0000000000 --- a/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/mixin/entity/event/elytra/ElytraFlightControllerMixin.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2016, 2017, 2018, 2019 FabricMC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.fabricmc.fabric.mixin.entity.event.elytra; - -import com.llamalad7.mixinextras.injector.wrapoperation.Operation; -import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; - -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.mob.ElytraFlightController; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; - -import net.fabricmc.fabric.api.entity.event.v1.EntityElytraEvents; - -@Mixin(ElytraFlightController.class) -public class ElytraFlightControllerMixin { - @Shadow - @Final - private LivingEntity entity; - - @WrapOperation(method = "update", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;isOf(Lnet/minecraft/item/Item;)Z")) - private boolean checkAllowEvent(ItemStack instance, Item item, Operation original) { - // ALLOW event is checked by LivingEntityMixin. - return original.call(instance, item) || EntityElytraEvents.CUSTOM.invoker().useCustomElytra(this.entity, false); - } -} diff --git a/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/mixin/entity/event/elytra/LivingEntityMixin.java b/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/mixin/entity/event/elytra/LivingEntityMixin.java index 27cc7137e9..9b0ad57ef0 100644 --- a/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/mixin/entity/event/elytra/LivingEntityMixin.java +++ b/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/mixin/entity/event/elytra/LivingEntityMixin.java @@ -20,10 +20,12 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityType; import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; import net.minecraft.world.World; import net.fabricmc.fabric.api.entity.event.v1.EntityElytraEvents; @@ -40,14 +42,14 @@ abstract class LivingEntityMixin extends Entity { * Handle ALLOW and CUSTOM {@link EntityElytraEvents} when an entity is fall flying. */ @SuppressWarnings("ConstantConditions") - @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;getEquippedStack(Lnet/minecraft/entity/EquipmentSlot;)Lnet/minecraft/item/ItemStack;"), method = "tickFallFlying()V", allow = 1, cancellable = true) + @Inject(at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;getEquippedStack(Lnet/minecraft/entity/EquipmentSlot;)Lnet/minecraft/item/ItemStack;"), method = "tickGliding()V", allow = 1, cancellable = true) void injectElytraTick(CallbackInfo info) { LivingEntity self = (LivingEntity) (Object) this; if (!EntityElytraEvents.ALLOW.invoker().allowElytraFlight(self)) { // The entity is already fall flying by now, we just need to stop it. if (!getWorld().isClient) { - setFlag(Entity.FALL_FLYING_FLAG_INDEX, false); + setFlag(Entity.GLIDING_FLAG_INDEX, false); } info.cancel(); @@ -58,4 +60,19 @@ void injectElytraTick(CallbackInfo info) { info.cancel(); } } + + @SuppressWarnings("ConstantConditions") + @Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/entity/EquipmentSlot;VALUES:Ljava/util/List;"), method = "canGlide", allow = 1, cancellable = true) + void injectElytraCheck(CallbackInfoReturnable cir) { + PlayerEntity self = (PlayerEntity) (Object) this; + + if (!EntityElytraEvents.ALLOW.invoker().allowElytraFlight(self)) { + cir.setReturnValue(false); + return; // Return to prevent the rest of this injector from running. + } + + if (EntityElytraEvents.CUSTOM.invoker().useCustomElytra(self, false)) { + cir.setReturnValue(true); + } + } } diff --git a/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/mixin/entity/event/elytra/PlayerEntityMixin.java b/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/mixin/entity/event/elytra/PlayerEntityMixin.java deleted file mode 100644 index bbbd355290..0000000000 --- a/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/mixin/entity/event/elytra/PlayerEntityMixin.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2016, 2017, 2018, 2019 FabricMC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.fabricmc.fabric.mixin.entity.event.elytra; - -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import net.minecraft.entity.EntityType; -import net.minecraft.entity.LivingEntity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.world.World; - -import net.fabricmc.fabric.api.entity.event.v1.EntityElytraEvents; - -@SuppressWarnings("unused") -@Mixin(PlayerEntity.class) -abstract class PlayerEntityMixin extends LivingEntity { - PlayerEntityMixin(EntityType entityType, World world) { - super(entityType, world); - throw new AssertionError(); - } - - @Shadow - public abstract void startFallFlying(); - - /** - * Allow the server-side and client-side elytra checks to fail when {@link EntityElytraEvents#ALLOW} blocks flight, - * and otherwise to succeed for elytra flight through {@link EntityElytraEvents#CUSTOM}. - */ - @SuppressWarnings("ConstantConditions") - @Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/entity/EquipmentSlot;CHEST:Lnet/minecraft/entity/EquipmentSlot;"), method = "checkFallFlying()Z", allow = 1, cancellable = true) - void injectElytraCheck(CallbackInfoReturnable cir) { - PlayerEntity self = (PlayerEntity) (Object) this; - - if (!EntityElytraEvents.ALLOW.invoker().allowElytraFlight(self)) { - cir.setReturnValue(false); - return; // Return to prevent the rest of this injector from running. - } - - if (EntityElytraEvents.CUSTOM.invoker().useCustomElytra(self, false)) { - startFallFlying(); - cir.setReturnValue(true); - } - } -} diff --git a/fabric-entity-events-v1/src/main/resources/fabric-entity-events-v1.mixins.json b/fabric-entity-events-v1/src/main/resources/fabric-entity-events-v1.mixins.json index 0b89cc7c6b..59b4ee9a8b 100644 --- a/fabric-entity-events-v1/src/main/resources/fabric-entity-events-v1.mixins.json +++ b/fabric-entity-events-v1/src/main/resources/fabric-entity-events-v1.mixins.json @@ -6,16 +6,10 @@ "EntityMixin", "LivingEntityMixin", "MobEntityMixin", - "MooshroomEntityMixin", - "PigEntityMixin", "PlayerEntityMixin", "PlayerManagerMixin", "ServerPlayerEntityMixin", - "TadpoleEntityMixin", - "VillagerEntityMixin", - "elytra.ElytraFlightControllerMixin", - "elytra.LivingEntityMixin", - "elytra.PlayerEntityMixin" + "elytra.LivingEntityMixin" ], "injectors": { "defaultRequire": 1, diff --git a/fabric-entity-events-v1/src/main/resources/fabric.mod.json b/fabric-entity-events-v1/src/main/resources/fabric.mod.json index 7856a96148..7a577993f0 100644 --- a/fabric-entity-events-v1/src/main/resources/fabric.mod.json +++ b/fabric-entity-events-v1/src/main/resources/fabric.mod.json @@ -16,15 +16,11 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3" + "fabricloader": ">=0.16.4" }, "description": "Events to hook into entities.", "mixins": [ - "fabric-entity-events-v1.mixins.json", - { - "config": "fabric-entity-events-v1.client.mixins.json", - "environment": "client" - } + "fabric-entity-events-v1.mixins.json" ], "custom": { "fabric-api:module-lifecycle": "stable" diff --git a/fabric-entity-events-v1/src/testmod/java/net/fabricmc/fabric/test/entity/event/EntityEventTests.java b/fabric-entity-events-v1/src/testmod/java/net/fabricmc/fabric/test/entity/event/EntityEventTests.java index fee1d46141..989216a74e 100644 --- a/fabric-entity-events-v1/src/testmod/java/net/fabricmc/fabric/test/entity/event/EntityEventTests.java +++ b/fabric-entity-events-v1/src/testmod/java/net/fabricmc/fabric/test/entity/event/EntityEventTests.java @@ -23,6 +23,7 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.component.DataComponentTypes; +import net.minecraft.entity.EquipmentSlot; import net.minecraft.entity.damage.DamageTypes; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.PlayerInventory; @@ -30,15 +31,18 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; +import net.minecraft.item.equipment.EquipmentModels; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; import net.minecraft.registry.RegistryKey; import net.minecraft.registry.RegistryKeys; import net.minecraft.server.command.CommandManager; +import net.minecraft.sound.SoundEvents; import net.minecraft.text.Text; import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; import net.minecraft.util.Identifier; +import net.minecraft.util.Unit; import net.minecraft.util.math.Direction; import net.minecraft.util.math.Vec3d; @@ -58,13 +62,14 @@ public final class EntityEventTests implements ModInitializer { Identifier.of("fabric-entity-events-v1-testmod", "test_bed") ); public static final Block TEST_BED = new TestBedBlock(AbstractBlock.Settings.create().strength(1, 1).registryKey(TEST_BED_KEY)); - public static final Item DIAMOND_ELYTRA = new DiamondElytraItem(); + public static final RegistryKey DIAMOND_ELYTRA_KEY = RegistryKey.of(RegistryKeys.ITEM, Identifier.of("fabric-entity-events-v1-testmod", "diamond_elytra")); + public static final Item DIAMOND_ELYTRA = new Item(new Item.Settings().component(DataComponentTypes.GLIDER, Unit.INSTANCE).equippable(EquipmentSlot.CHEST, SoundEvents.ITEM_ARMOR_EQUIP_ELYTRA, EquipmentModels.ELYTRA).registryKey(DIAMOND_ELYTRA_KEY)); @Override public void onInitialize() { Registry.register(Registries.BLOCK, TEST_BED_KEY, TEST_BED); - Registry.register(Registries.ITEM, TEST_BED_KEY.getValue(), new BlockItem(TEST_BED, new Item.Settings())); - Registry.register(Registries.ITEM, Identifier.of("fabric-entity-events-v1-testmod", "diamond_elytra"), DIAMOND_ELYTRA); + Registry.register(Registries.ITEM, TEST_BED_KEY.getValue(), new BlockItem(TEST_BED, new Item.Settings().registryKey(RegistryKey.of(RegistryKeys.ITEM, TEST_BED_KEY.getValue())))); + Registry.register(Registries.ITEM, DIAMOND_ELYTRA_KEY, DIAMOND_ELYTRA); ServerEntityCombatEvents.AFTER_KILLED_OTHER_ENTITY.register((world, entity, killed) -> { LOGGER.info("Entity {} Killed: {}", entity, killed); diff --git a/fabric-events-interaction-v0/src/main/resources/fabric.mod.json b/fabric-events-interaction-v0/src/main/resources/fabric.mod.json index 069b6a0505..dd4385517d 100644 --- a/fabric-events-interaction-v0/src/main/resources/fabric.mod.json +++ b/fabric-events-interaction-v0/src/main/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "fabric-api-base": "*", "fabric-networking-api-v1": "*", "minecraft": ">=1.15-alpha.19.37.a" diff --git a/fabric-game-rule-api-v1/src/main/resources/fabric.mod.json b/fabric-game-rule-api-v1/src/main/resources/fabric.mod.json index 4e20c9abb1..29e705badf 100644 --- a/fabric-game-rule-api-v1/src/main/resources/fabric.mod.json +++ b/fabric-game-rule-api-v1/src/main/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3" + "fabricloader": ">=0.16.4" }, "description": "Allows registration of custom game rules.", "mixins": [ diff --git a/fabric-gametest-api-v1/src/main/resources/fabric.mod.json b/fabric-gametest-api-v1/src/main/resources/fabric.mod.json index 957cc657c0..0c672e7daa 100644 --- a/fabric-gametest-api-v1/src/main/resources/fabric.mod.json +++ b/fabric-gametest-api-v1/src/main/resources/fabric.mod.json @@ -21,7 +21,7 @@ ] }, "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "fabric-resource-loader-v0": "*" }, "description": "Allows registration of custom game tests.", diff --git a/fabric-item-api-v1/src/main/resources/fabric.mod.json b/fabric-item-api-v1/src/main/resources/fabric.mod.json index c13c87b6c9..aa9d95d375 100644 --- a/fabric-item-api-v1/src/main/resources/fabric.mod.json +++ b/fabric-item-api-v1/src/main/resources/fabric.mod.json @@ -23,7 +23,7 @@ } ], "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "fabric-api-base": "*" }, "description": "Hooks for items", diff --git a/fabric-item-api-v1/src/testmod/java/net/fabricmc/fabric/test/item/ArmorKnockbackResistanceTest.java b/fabric-item-api-v1/src/testmod/java/net/fabricmc/fabric/test/item/ArmorKnockbackResistanceTest.java index 48dfcad3df..26f659c628 100644 --- a/fabric-item-api-v1/src/testmod/java/net/fabricmc/fabric/test/item/ArmorKnockbackResistanceTest.java +++ b/fabric-item-api-v1/src/testmod/java/net/fabricmc/fabric/test/item/ArmorKnockbackResistanceTest.java @@ -16,45 +16,47 @@ package net.fabricmc.fabric.test.item; -import java.util.EnumMap; -import java.util.List; +import java.util.Map; import net.minecraft.item.ArmorItem; -import net.minecraft.item.ArmorMaterial; import net.minecraft.item.Item; -import net.minecraft.item.Items; +import net.minecraft.item.equipment.ArmorMaterial; +import net.minecraft.item.equipment.EquipmentType; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; -import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.RegistryKeys; +import net.minecraft.registry.tag.ItemTags; import net.minecraft.sound.SoundEvents; import net.minecraft.util.Identifier; -import net.minecraft.util.Util; import net.fabricmc.api.ModInitializer; public class ArmorKnockbackResistanceTest implements ModInitializer { - private static final RegistryEntry WOOD_ARMOR = Registry.registerReference(Registries.ARMOR_MATERIAL, Identifier.of("fabric-item-api-v1-testmod", "wood"), createTestArmorMaterial()); + private static final ArmorMaterial WOOD_ARMOR = createTestArmorMaterial(); @Override public void onInitialize() { - Registry.register(Registries.ITEM, Identifier.of("fabric-item-api-v1-testmod", - "wooden_boots"), new ArmorItem(WOOD_ARMOR, ArmorItem.Type.BOOTS, new Item.Settings())); + RegistryKey registryKey = RegistryKey.of(RegistryKeys.ITEM, Identifier.of("fabric-item-api-v1-testmod", "wooden_boots")); + Registry.register(Registries.ITEM, registryKey, new ArmorItem(WOOD_ARMOR, EquipmentType.BOOTS, new Item.Settings().registryKey(registryKey))); } private static ArmorMaterial createTestArmorMaterial() { return new ArmorMaterial( - Util.make(new EnumMap<>(ArmorItem.Type.class), (map) -> { - map.put(ArmorItem.Type.BOOTS, 1); - map.put(ArmorItem.Type.LEGGINGS, 2); - map.put(ArmorItem.Type.CHESTPLATE, 3); - map.put(ArmorItem.Type.HELMET, 1); - map.put(ArmorItem.Type.BODY, 3); - }), + 0, + Map.of( + EquipmentType.BOOTS, 1, + EquipmentType.LEGGINGS, 2, + EquipmentType.CHESTPLATE, 3, + EquipmentType.HELMET, 1, + EquipmentType.BODY, 3 + ), + 1, SoundEvents.ITEM_ARMOR_EQUIP_LEATHER, - (stack) -> stack.getItem() == Items.LEATHER, - List.of(new ArmorMaterial.Layer(Identifier.of("fabric-item-api-v1-testmod", "wood"))), 0, - 0.5F + 0.5F, + ItemTags.REPAIRS_LEATHER_ARMOR, + Identifier.of("fabric-item-api-v1-testmod", "wood") ); } } diff --git a/fabric-item-api-v1/src/testmod/java/net/fabricmc/fabric/test/item/CustomDamageTest.java b/fabric-item-api-v1/src/testmod/java/net/fabricmc/fabric/test/item/CustomDamageTest.java index 98d0d20859..58f14cd05b 100644 --- a/fabric-item-api-v1/src/testmod/java/net/fabricmc/fabric/test/item/CustomDamageTest.java +++ b/fabric-item-api-v1/src/testmod/java/net/fabricmc/fabric/test/item/CustomDamageTest.java @@ -29,6 +29,8 @@ import net.minecraft.potion.Potions; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.RegistryKeys; import net.minecraft.registry.entry.RegistryEntry; import net.minecraft.registry.tag.EnchantmentTags; import net.minecraft.text.Text; @@ -55,11 +57,12 @@ public class CustomDamageTest implements ModInitializer { } }; // Do this static init *after* the damage handler otherwise it's still null while inside the constructor - public static final Item WEIRD_PICK = new WeirdPick(); + public static final RegistryKey WEIRD_PICK_KEY = RegistryKey.of(RegistryKeys.ITEM, Identifier.of("fabric-item-api-v1-testmod", "weird_pickaxe")); + public static final Item WEIRD_PICK = new WeirdPick(WEIRD_PICK_KEY); @Override public void onInitialize() { - Registry.register(Registries.ITEM, Identifier.of("fabric-item-api-v1-testmod", "weird_pickaxe"), WEIRD_PICK); + Registry.register(Registries.ITEM, WEIRD_PICK_KEY, WEIRD_PICK); FabricBrewingRecipeRegistryBuilder.BUILD.register(builder -> builder.registerPotionRecipe(Potions.WATER, WEIRD_PICK, Potions.AWKWARD)); EnchantmentEvents.ALLOW_ENCHANTING.register(((enchantment, target, enchantingContext) -> { if (target.isOf(Items.DIAMOND_PICKAXE) && enchantment.matchesKey(Enchantments.SHARPNESS) && EnchantmentHelper.hasAnyEnchantmentsIn(target, EnchantmentTags.MINING_EXCLUSIVE_SET)) { @@ -71,8 +74,8 @@ public void onInitialize() { } public static class WeirdPick extends PickaxeItem { - protected WeirdPick() { - super(ToolMaterial.GOLD, 3f, 5f, new Item.Settings().customDamage(WEIRD_DAMAGE_HANDLER)); + protected WeirdPick(RegistryKey registryKey) { + super(ToolMaterial.GOLD, 3f, 5f, new Item.Settings().customDamage(WEIRD_DAMAGE_HANDLER).registryKey(registryKey)); } @Override diff --git a/fabric-item-api-v1/src/testmod/java/net/fabricmc/fabric/test/item/ItemUpdateAnimationTest.java b/fabric-item-api-v1/src/testmod/java/net/fabricmc/fabric/test/item/ItemUpdateAnimationTest.java index da1f4be05c..ff67216b52 100644 --- a/fabric-item-api-v1/src/testmod/java/net/fabricmc/fabric/test/item/ItemUpdateAnimationTest.java +++ b/fabric-item-api-v1/src/testmod/java/net/fabricmc/fabric/test/item/ItemUpdateAnimationTest.java @@ -17,9 +17,12 @@ package net.fabricmc.fabric.test.item; import net.minecraft.component.ComponentType; +import net.minecraft.item.Item; import net.minecraft.network.codec.PacketCodecs; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.RegistryKeys; import net.minecraft.util.Identifier; import net.minecraft.util.dynamic.Codecs; @@ -31,7 +34,10 @@ public class ItemUpdateAnimationTest implements ModInitializer { @Override public void onInitialize() { - Registry.register(Registries.ITEM, Identifier.of("fabric-item-api-v1-testmod", "updating_allowed"), new UpdatingItem(true)); - Registry.register(Registries.ITEM, Identifier.of("fabric-item-api-v1-testmod", "updating_disallowed"), new UpdatingItem(false)); + RegistryKey updatingAllowedKey = RegistryKey.of(RegistryKeys.ITEM, Identifier.of("fabric-item-api-v1-testmod", "updating_allowed")); + RegistryKey updatingDisallowedKey = RegistryKey.of(RegistryKeys.ITEM, Identifier.of("fabric-item-api-v1-testmod", "updating_disallowed")); + + Registry.register(Registries.ITEM, updatingAllowedKey, new UpdatingItem(true, new Item.Settings().registryKey(updatingAllowedKey))); + Registry.register(Registries.ITEM, updatingDisallowedKey, new UpdatingItem(false, new Item.Settings().registryKey(updatingDisallowedKey))); } } diff --git a/fabric-item-api-v1/src/testmod/java/net/fabricmc/fabric/test/item/UpdatingItem.java b/fabric-item-api-v1/src/testmod/java/net/fabricmc/fabric/test/item/UpdatingItem.java index fdbbcb8af3..c62bba9957 100644 --- a/fabric-item-api-v1/src/testmod/java/net/fabricmc/fabric/test/item/UpdatingItem.java +++ b/fabric-item-api-v1/src/testmod/java/net/fabricmc/fabric/test/item/UpdatingItem.java @@ -37,8 +37,8 @@ public class UpdatingItem extends Item { private final boolean allowUpdateAnimation; - public UpdatingItem(boolean allowUpdateAnimation) { - super(new Settings() + public UpdatingItem(boolean allowUpdateAnimation, Item.Settings settings) { + super(settings .component(DataComponentTypes.ATTRIBUTE_MODIFIERS, AttributeModifiersComponent.builder() .add(EntityAttributes.ATTACK_DAMAGE, PLUS_FIVE, AttributeModifierSlot.MAINHAND) .build() diff --git a/fabric-item-group-api-v1/src/main/resources/fabric.mod.json b/fabric-item-group-api-v1/src/main/resources/fabric.mod.json index fdb5ad9983..2f09e1bc7c 100644 --- a/fabric-item-group-api-v1/src/main/resources/fabric.mod.json +++ b/fabric-item-group-api-v1/src/main/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "fabric-api-base": "*", "fabric-resource-loader-v0": "*" }, diff --git a/fabric-item-group-api-v1/src/testmod/java/net/fabricmc/fabric/test/item/group/ItemGroupTest.java b/fabric-item-group-api-v1/src/testmod/java/net/fabricmc/fabric/test/item/group/ItemGroupTest.java index a7b212c9fd..58a10a9839 100644 --- a/fabric-item-group-api-v1/src/testmod/java/net/fabricmc/fabric/test/item/group/ItemGroupTest.java +++ b/fabric-item-group-api-v1/src/testmod/java/net/fabricmc/fabric/test/item/group/ItemGroupTest.java @@ -37,13 +37,14 @@ public class ItemGroupTest implements ModInitializer { private static final String MOD_ID = "fabric-item-group-api-v1-testmod"; - private static Item TEST_ITEM; + private static final RegistryKey ITEM_KEY = RegistryKey.of(RegistryKeys.ITEM, Identifier.of(MOD_ID, "item_test_group")); + private static final Item TEST_ITEM = new Item(new Item.Settings().registryKey(ITEM_KEY)); private static final RegistryKey ITEM_GROUP = RegistryKey.of(RegistryKeys.ITEM_GROUP, Identifier.of(MOD_ID, "test_group")); @Override public void onInitialize() { - TEST_ITEM = Registry.register(Registries.ITEM, Identifier.of("fabric-item-groups-v0-testmod", "item_test_group"), new Item(new Item.Settings())); + Registry.register(Registries.ITEM, Identifier.of("fabric-item-groups-v0-testmod", "item_test_group"), TEST_ITEM); Registry.register(Registries.ITEM_GROUP, ITEM_GROUP, FabricItemGroup.builder() .displayName(Text.literal("Test Item Group")) diff --git a/fabric-key-binding-api-v1/src/client/resources/fabric.mod.json b/fabric-key-binding-api-v1/src/client/resources/fabric.mod.json index 5a571b4aa1..ac60e84c13 100644 --- a/fabric-key-binding-api-v1/src/client/resources/fabric.mod.json +++ b/fabric-key-binding-api-v1/src/client/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3" + "fabricloader": ">=0.16.4" }, "description": "Key Binding registry API.", "mixins": [ diff --git a/fabric-lifecycle-events-v1/src/client/java/net/fabricmc/fabric/mixin/event/lifecycle/client/ClientChunkManagerMixin.java b/fabric-lifecycle-events-v1/src/client/java/net/fabricmc/fabric/mixin/event/lifecycle/client/ClientChunkManagerMixin.java index 9b27fbb1e1..2620ec4da2 100644 --- a/fabric-lifecycle-events-v1/src/client/java/net/fabricmc/fabric/mixin/event/lifecycle/client/ClientChunkManagerMixin.java +++ b/fabric-lifecycle-events-v1/src/client/java/net/fabricmc/fabric/mixin/event/lifecycle/client/ClientChunkManagerMixin.java @@ -55,7 +55,7 @@ private void onChunkUnload(int x, int z, PacketByteBuf buf, NbtCompound tag, Con } } - @Inject(method = "unload", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/world/ClientChunkManager$ClientChunkMap;method_62893(ILnet/minecraft/world/chunk/WorldChunk;)V"), locals = LocalCapture.CAPTURE_FAILHARD) + @Inject(method = "unload", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/world/ClientChunkManager$ClientChunkMap;unloadChunk(ILnet/minecraft/world/chunk/WorldChunk;)V"), locals = LocalCapture.CAPTURE_FAILHARD) private void onChunkUnload(ChunkPos pos, CallbackInfo ci, int i, WorldChunk chunk) { ClientChunkEvents.CHUNK_UNLOAD.invoker().onChunkUnload(this.world, chunk); } diff --git a/fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/mixin/event/lifecycle/LivingEntityMixin.java b/fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/mixin/event/lifecycle/LivingEntityMixin.java index a67a86cc85..0530f8eefe 100644 --- a/fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/mixin/event/lifecycle/LivingEntityMixin.java +++ b/fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/mixin/event/lifecycle/LivingEntityMixin.java @@ -18,12 +18,12 @@ import java.util.Map; +import com.llamalad7.mixinextras.sugar.Local; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import org.spongepowered.asm.mixin.injection.callback.LocalCapture; import net.minecraft.entity.EquipmentSlot; import net.minecraft.entity.LivingEntity; @@ -33,8 +33,8 @@ @Mixin(LivingEntity.class) public abstract class LivingEntityMixin { - @Inject(method = "getEquipmentChanges", at = @At(value = "INVOKE", target = "Ljava/util/Map;put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"), locals = LocalCapture.CAPTURE_FAILHARD) - private void getEquipmentChanges(CallbackInfoReturnable<@Nullable Map> cir, Map changes, EquipmentSlot[] slots, int slotsSize, int slotIndex, EquipmentSlot equipmentSlot, ItemStack previousStack, ItemStack currentStack) { + @Inject(method = "getEquipmentChanges", at = @At(value = "INVOKE", target = "Ljava/util/Map;put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;")) + private void getEquipmentChanges(CallbackInfoReturnable<@Nullable Map> cir, @Local EquipmentSlot equipmentSlot, @Local(ordinal = 0) ItemStack previousStack, @Local(ordinal = 1) ItemStack currentStack) { ServerEntityEvents.EQUIPMENT_CHANGE.invoker().onChange((LivingEntity) (Object) this, equipmentSlot, previousStack, currentStack); } } diff --git a/fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/mixin/event/lifecycle/ServerChunkLoadingManagerMixin.java b/fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/mixin/event/lifecycle/ServerChunkLoadingManagerMixin.java index 7e0fc956c7..f5d1c8b926 100644 --- a/fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/mixin/event/lifecycle/ServerChunkLoadingManagerMixin.java +++ b/fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/mixin/event/lifecycle/ServerChunkLoadingManagerMixin.java @@ -16,6 +16,8 @@ package net.fabricmc.fabric.mixin.event.lifecycle; +import java.util.concurrent.CompletableFuture; + import com.llamalad7.mixinextras.sugar.Local; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -27,6 +29,7 @@ import net.minecraft.server.world.ChunkHolder; import net.minecraft.server.world.ServerChunkLoadingManager; import net.minecraft.server.world.ServerWorld; +import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.WorldChunk; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerChunkEvents; @@ -35,17 +38,16 @@ public abstract class ServerChunkLoadingManagerMixin { @Shadow @Final - private ServerWorld world; - - // Chunk (Un)Load events, An explanation: - // Must of this code is wrapped inside of futures and consumers, so it's generally a mess. + ServerWorld world; /** * Injection is inside of tryUnloadChunk. * We inject just after "setLoadedToWorld" is made false, since here the WorldChunk is guaranteed to be unloaded. */ - @Inject(method = "method_60440", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/chunk/WorldChunk;setLoadedToWorld(Z)V", shift = At.Shift.AFTER)) - private void onChunkUnload(ChunkHolder chunkHolder, long l, CallbackInfo ci, @Local WorldChunk chunk) { - ServerChunkEvents.CHUNK_UNLOAD.invoker().onChunkUnload(this.world, chunk); + @Inject(method = "method_60440", at = @At(value = "INVOKE", target = "Lnet/minecraft/server/world/ServerChunkLoadingManager;save(Lnet/minecraft/world/chunk/Chunk;)Z")) + private void onChunkUnload(ChunkHolder chunkHolder, CompletableFuture completableFuture, long l, CallbackInfo ci, @Local Chunk chunk) { + if (chunk instanceof WorldChunk worldChunk) { + ServerChunkEvents.CHUNK_UNLOAD.invoker().onChunkUnload(this.world, worldChunk); + } } } diff --git a/fabric-lifecycle-events-v1/src/main/resources/fabric.mod.json b/fabric-lifecycle-events-v1/src/main/resources/fabric.mod.json index a26713db15..fb23a32d43 100644 --- a/fabric-lifecycle-events-v1/src/main/resources/fabric.mod.json +++ b/fabric-lifecycle-events-v1/src/main/resources/fabric.mod.json @@ -31,7 +31,7 @@ } ], "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "fabric-api-base": "*" }, "description": "Events for the game's lifecycle.", diff --git a/fabric-loot-api-v3/src/main/java/net/fabricmc/fabric/mixin/loot/JsonDataLoaderMixin.java b/fabric-loot-api-v3/src/main/java/net/fabricmc/fabric/mixin/loot/JsonDataLoaderMixin.java index c6d67d39df..e11df71218 100644 --- a/fabric-loot-api-v3/src/main/java/net/fabricmc/fabric/mixin/loot/JsonDataLoaderMixin.java +++ b/fabric-loot-api-v3/src/main/java/net/fabricmc/fabric/mixin/loot/JsonDataLoaderMixin.java @@ -18,9 +18,10 @@ import java.util.Map; -import com.google.gson.Gson; import com.google.gson.JsonElement; import com.llamalad7.mixinextras.sugar.Local; +import com.mojang.serialization.Codec; +import com.mojang.serialization.DynamicOps; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -37,7 +38,7 @@ @Mixin(JsonDataLoader.class) public class JsonDataLoaderMixin { @Inject(method = "load", at = @At(value = "INVOKE_ASSIGN", target = "Lnet/minecraft/resource/ResourceFinder;toResourceId(Lnet/minecraft/util/Identifier;)Lnet/minecraft/util/Identifier;", shift = At.Shift.AFTER)) - private static void fillSourceMap(ResourceManager manager, String dataType, Gson gson, Map results, CallbackInfo ci, @Local Map.Entry entry, @Local(ordinal = 1) Identifier id) { + private static void fillSourceMap(ResourceManager manager, String dataType, DynamicOps dynamicOps, Codec codec, Map results, CallbackInfo ci, @Local Map.Entry entry, @Local(ordinal = 1) Identifier id) { if (!LootDataType.LOOT_TABLES.registryKey().getValue().getPath().equals(dataType)) return; LootUtil.SOURCES.get().put(id, LootUtil.determineSource(entry.getValue())); diff --git a/fabric-loot-api-v3/src/main/java/net/fabricmc/fabric/mixin/loot/ReloadableRegistriesMixin.java b/fabric-loot-api-v3/src/main/java/net/fabricmc/fabric/mixin/loot/ReloadableRegistriesMixin.java index f4bf120cdb..25de1314e9 100644 --- a/fabric-loot-api-v3/src/main/java/net/fabricmc/fabric/mixin/loot/ReloadableRegistriesMixin.java +++ b/fabric-loot-api-v3/src/main/java/net/fabricmc/fabric/mixin/loot/ReloadableRegistriesMixin.java @@ -17,11 +17,10 @@ package net.fabricmc.fabric.mixin.loot; import java.util.List; -import java.util.Optional; +import java.util.Map; import java.util.WeakHashMap; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; -import java.util.function.Consumer; import java.util.function.Function; import com.google.gson.JsonElement; @@ -80,9 +79,9 @@ private static CompletableFuture void modifyLootTable(Optional optionalTable, Consumer action, Operation original, @Local(argsOnly = true) Identifier id, @Local(argsOnly = true) RegistryOps ops) { - original.call(optionalTable.map(table -> modifyLootTable(table, id, ops)), action); + @Inject(method = "method_61240", at = @At(value = "INVOKE", target = "Ljava/util/Map;forEach(Ljava/util/function/BiConsumer;)V")) + private static void modifyLootTable(LootDataType lootDataType, ResourceManager resourceManager, RegistryOps registryOps, CallbackInfoReturnable> cir, @Local Map map) { + map.replaceAll((identifier, t) -> modifyLootTable(t, identifier, registryOps)); } @Unique diff --git a/fabric-loot-api-v3/src/main/resources/fabric.mod.json b/fabric-loot-api-v3/src/main/resources/fabric.mod.json index f267734e61..45810b4e8b 100644 --- a/fabric-loot-api-v3/src/main/resources/fabric.mod.json +++ b/fabric-loot-api-v3/src/main/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "fabric-api-base": "*", "fabric-resource-loader-v0": "*" }, diff --git a/fabric-message-api-v1/src/main/resources/fabric.mod.json b/fabric-message-api-v1/src/main/resources/fabric.mod.json index 2965fc19b8..103671aae8 100644 --- a/fabric-message-api-v1/src/main/resources/fabric.mod.json +++ b/fabric-message-api-v1/src/main/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "fabric-api-base": "*" }, "description": "Adds message-related hooks.", diff --git a/fabric-model-loading-api-v1/src/client/java/net/fabricmc/fabric/api/client/model/loading/v1/DelegatingUnbakedModel.java b/fabric-model-loading-api-v1/src/client/java/net/fabricmc/fabric/api/client/model/loading/v1/DelegatingUnbakedModel.java index d361f16ee0..a4fa129848 100644 --- a/fabric-model-loading-api-v1/src/client/java/net/fabricmc/fabric/api/client/model/loading/v1/DelegatingUnbakedModel.java +++ b/fabric-model-loading-api-v1/src/client/java/net/fabricmc/fabric/api/client/model/loading/v1/DelegatingUnbakedModel.java @@ -46,7 +46,7 @@ public DelegatingUnbakedModel(Identifier delegate) { } @Override - public void resolve(Resolver resolver, ModelType modelType) { + public void resolve(Resolver resolver) { resolver.resolve(delegate); } diff --git a/fabric-model-loading-api-v1/src/client/resources/fabric.mod.json b/fabric-model-loading-api-v1/src/client/resources/fabric.mod.json index 21fefbaeb9..19bc6415f4 100644 --- a/fabric-model-loading-api-v1/src/client/resources/fabric.mod.json +++ b/fabric-model-loading-api-v1/src/client/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "fabric-api-base": "*" }, "description": "Provides hooks for model loading.", diff --git a/fabric-model-loading-api-v1/src/testmodClient/java/net/fabricmc/fabric/test/model/loading/ModelTestModClient.java b/fabric-model-loading-api-v1/src/testmodClient/java/net/fabricmc/fabric/test/model/loading/ModelTestModClient.java index de0cd39a86..a02e119d5f 100644 --- a/fabric-model-loading-api-v1/src/testmodClient/java/net/fabricmc/fabric/test/model/loading/ModelTestModClient.java +++ b/fabric-model-loading-api-v1/src/testmodClient/java/net/fabricmc/fabric/test/model/loading/ModelTestModClient.java @@ -98,7 +98,7 @@ public void onInitializeClient() { Identifier id = context.resourceId(); if (id != null && id.equals(BROWN_GLAZED_TERRACOTTA_MODEL_ID)) { - return context.baker().getModel(MissingModel.ID); + return MissingModel.create(); } return model; diff --git a/fabric-networking-api-v1/src/main/resources/fabric.mod.json b/fabric-networking-api-v1/src/main/resources/fabric.mod.json index 318d0e59c9..04cde3044b 100644 --- a/fabric-networking-api-v1/src/main/resources/fabric.mod.json +++ b/fabric-networking-api-v1/src/main/resources/fabric.mod.json @@ -26,7 +26,7 @@ }, "accessWidener": "fabric-networking-api-v1.accesswidener", "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "fabric-api-base": "*" }, "description": "Low-level, vanilla protocol oriented networking hooks.", diff --git a/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/api/object/builder/v1/block/entity/FabricBlockEntityTypeBuilder.java b/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/api/object/builder/v1/block/entity/FabricBlockEntityTypeBuilder.java index 63071de56b..de89267ee2 100644 --- a/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/api/object/builder/v1/block/entity/FabricBlockEntityTypeBuilder.java +++ b/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/api/object/builder/v1/block/entity/FabricBlockEntityTypeBuilder.java @@ -32,8 +32,6 @@ /** * Fabric's version of BlockEntityType.Builder with additional convenience methods. * - *

Alternatively, use the access widener for {@link BlockEntityType.BlockEntityFactory} - * in Fabric Transitive Access Wideners (v1). */ public final class FabricBlockEntityTypeBuilder { private final Factory factory; diff --git a/fabric-object-builder-api-v1/src/main/resources/fabric.mod.json b/fabric-object-builder-api-v1/src/main/resources/fabric.mod.json index 49092c8fda..ad2ad17cc4 100644 --- a/fabric-object-builder-api-v1/src/main/resources/fabric.mod.json +++ b/fabric-object-builder-api-v1/src/main/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "fabric-api-base": "*" }, "description": "Builders for objects vanilla has locked down.", diff --git a/fabric-object-builder-api-v1/src/testmod/java/net/fabricmc/fabric/test/object/builder/BlockEntityTypeBuilderTest.java b/fabric-object-builder-api-v1/src/testmod/java/net/fabricmc/fabric/test/object/builder/BlockEntityTypeBuilderTest.java index 43743e1ef8..db81f32d13 100644 --- a/fabric-object-builder-api-v1/src/testmod/java/net/fabricmc/fabric/test/object/builder/BlockEntityTypeBuilderTest.java +++ b/fabric-object-builder-api-v1/src/testmod/java/net/fabricmc/fabric/test/object/builder/BlockEntityTypeBuilderTest.java @@ -30,6 +30,7 @@ import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.RegistryKeys; import net.minecraft.text.Text; import net.minecraft.util.ActionResult; import net.minecraft.util.Identifier; @@ -73,7 +74,7 @@ private static Block createBetrayalBlock(RegistryKey key, MapColor color) private static void register(RegistryKey id, Block block) { Registry.register(Registries.BLOCK, id, block); - Item item = new BlockItem(block, new Item.Settings()); + Item item = new BlockItem(block, new Item.Settings().registryKey(RegistryKey.of(RegistryKeys.ITEM, id.getValue()))); Registry.register(Registries.ITEM, id.getValue(), item); } diff --git a/fabric-object-builder-api-v1/src/testmod/java/net/fabricmc/fabric/test/object/builder/TealSignTest.java b/fabric-object-builder-api-v1/src/testmod/java/net/fabricmc/fabric/test/object/builder/TealSignTest.java index 8992f9f47c..287b03e12a 100644 --- a/fabric-object-builder-api-v1/src/testmod/java/net/fabricmc/fabric/test/object/builder/TealSignTest.java +++ b/fabric-object-builder-api-v1/src/testmod/java/net/fabricmc/fabric/test/object/builder/TealSignTest.java @@ -32,6 +32,7 @@ import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.RegistryKeys; import net.minecraft.util.Identifier; import net.fabricmc.api.ModInitializer; @@ -50,8 +51,8 @@ public class TealSignTest implements ModInitializer { public static final HangingSignBlock TEAL_HANGING_SIGN = new HangingSignBlock(TEAL_WOOD_TYPE, AbstractBlock.Settings.copy(Blocks.OAK_HANGING_SIGN).registryKey(TEAL_HANGING_SIGN_KEY)); public static final RegistryKey TEAL_WALL_HANGING_SIGN_KEY = ObjectBuilderTestConstants.block("teal_wall_hanging_sign"); public static final WallHangingSignBlock TEAL_WALL_HANGING_SIGN = new WallHangingSignBlock(TEAL_WOOD_TYPE, AbstractBlock.Settings.copy(Blocks.OAK_HANGING_SIGN).registryKey(TEAL_WALL_HANGING_SIGN_KEY)); - public static final SignItem TEAL_SIGN_ITEM = new SignItem(new Item.Settings(), TEAL_SIGN, TEAL_WALL_SIGN); - public static final HangingSignItem TEAL_HANGING_SIGN_ITEM = new HangingSignItem(TEAL_HANGING_SIGN, TEAL_WALL_HANGING_SIGN, new Item.Settings()); + public static final SignItem TEAL_SIGN_ITEM = new SignItem(TEAL_SIGN, TEAL_WALL_SIGN, new Item.Settings().registryKey(RegistryKey.of(RegistryKeys.ITEM, TEAL_SIGN_KEY.getValue()))); + public static final HangingSignItem TEAL_HANGING_SIGN_ITEM = new HangingSignItem(TEAL_HANGING_SIGN, TEAL_WALL_HANGING_SIGN, new Item.Settings().registryKey(RegistryKey.of(RegistryKeys.ITEM, TEAL_HANGING_SIGN_KEY.getValue()))); @Override public void onInitialize() { diff --git a/fabric-particles-v1/src/main/resources/fabric.mod.json b/fabric-particles-v1/src/main/resources/fabric.mod.json index 82499f825d..535962d51b 100644 --- a/fabric-particles-v1/src/main/resources/fabric.mod.json +++ b/fabric-particles-v1/src/main/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3" + "fabricloader": ">=0.16.4" }, "description": "Hooks for registering custom particles.", "mixins": [ diff --git a/fabric-particles-v1/src/testmod/java/net/fabricmc/fabric/test/particle/ParticleTestSetup.java b/fabric-particles-v1/src/testmod/java/net/fabricmc/fabric/test/particle/ParticleTestSetup.java index aff5a71a2d..b324444b64 100644 --- a/fabric-particles-v1/src/testmod/java/net/fabricmc/fabric/test/particle/ParticleTestSetup.java +++ b/fabric-particles-v1/src/testmod/java/net/fabricmc/fabric/test/particle/ParticleTestSetup.java @@ -68,6 +68,6 @@ private static RegistryKey block(String path) { private static void registerBlock(RegistryKey key, Block block) { Registry.register(Registries.BLOCK, key, block); - Registry.register(Registries.ITEM, key.getValue(), new BlockItem(block, new Item.Settings())); + Registry.register(Registries.ITEM, key.getValue(), new BlockItem(block, new Item.Settings().registryKey(RegistryKey.of(RegistryKeys.ITEM, key.getValue())))); } } diff --git a/fabric-recipe-api-v1/src/main/resources/fabric.mod.json b/fabric-recipe-api-v1/src/main/resources/fabric.mod.json index 0212dc0cf5..31c794d486 100644 --- a/fabric-recipe-api-v1/src/main/resources/fabric.mod.json +++ b/fabric-recipe-api-v1/src/main/resources/fabric.mod.json @@ -20,7 +20,7 @@ ], "accessWidener": "fabric-recipe-api-v1.accesswidener", "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "fabric-networking-api-v1": "*" }, "entrypoints": { diff --git a/fabric-registry-sync-v0/src/client/java/net/fabricmc/fabric/mixin/registry/sync/client/ItemModelsMixin.java b/fabric-registry-sync-v0/src/client/java/net/fabricmc/fabric/mixin/registry/sync/client/ItemModelsMixin.java deleted file mode 100644 index ea4bc00dbd..0000000000 --- a/fabric-registry-sync-v0/src/client/java/net/fabricmc/fabric/mixin/registry/sync/client/ItemModelsMixin.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2016, 2017, 2018, 2019 FabricMC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.fabricmc.fabric.mixin.registry.sync.client; - -import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import net.minecraft.client.render.item.ItemModels; -import net.minecraft.client.render.model.BakedModel; -import net.minecraft.client.render.model.BakedModelManager; -import net.minecraft.client.util.ModelIdentifier; -import net.minecraft.registry.Registries; - -import net.fabricmc.fabric.impl.registry.sync.trackers.Int2ObjectMapTracker; - -@Mixin(ItemModels.class) -public class ItemModelsMixin { - @Final - @Shadow - public Int2ObjectMap modelIds; - @Final - @Shadow - private Int2ObjectMap models; - - @Inject(method = "", at = @At("RETURN")) - public void onInit(BakedModelManager bakedModelManager, CallbackInfo info) { - Int2ObjectMapTracker.register(Registries.ITEM, "ItemModels.modelIds", modelIds); - Int2ObjectMapTracker.register(Registries.ITEM, "ItemModels.models", models); - } -} diff --git a/fabric-registry-sync-v0/src/client/resources/fabric-registry-sync-v0.client.mixins.json b/fabric-registry-sync-v0/src/client/resources/fabric-registry-sync-v0.client.mixins.json index eb599ba36a..a780c0ec15 100644 --- a/fabric-registry-sync-v0/src/client/resources/fabric-registry-sync-v0.client.mixins.json +++ b/fabric-registry-sync-v0/src/client/resources/fabric-registry-sync-v0.client.mixins.json @@ -7,7 +7,6 @@ "ClientRegistriesMixin", "ClientRegistriesDynamicRegistriesAccessor", "ItemColorsMixin", - "ItemModelsMixin", "MinecraftClientMixin", "ParticleManagerMixin" ], diff --git a/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/impl/registry/sync/FabricRegistryInit.java b/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/impl/registry/sync/FabricRegistryInit.java index b8be829a3e..dcfaef4577 100644 --- a/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/impl/registry/sync/FabricRegistryInit.java +++ b/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/impl/registry/sync/FabricRegistryInit.java @@ -204,10 +204,6 @@ public void onInitialize() { RegistryAttributeHolder.get(Registries.MAP_DECORATION_TYPE) .addAttribute(RegistryAttribute.SYNCED); - // Synced via PacketCodecs.registry - RegistryAttributeHolder.get(Registries.ARMOR_MATERIAL) - .addAttribute(RegistryAttribute.SYNCED); - // Synced via PacketCodecs.registry RegistryAttributeHolder.get(Registries.CONSUME_EFFECT_TYPE) .addAttribute(RegistryAttribute.SYNCED); diff --git a/fabric-registry-sync-v0/src/main/resources/fabric.mod.json b/fabric-registry-sync-v0/src/main/resources/fabric.mod.json index 8ee28ba225..76d35ac437 100644 --- a/fabric-registry-sync-v0/src/main/resources/fabric.mod.json +++ b/fabric-registry-sync-v0/src/main/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "fabric-api-base": "*", "fabric-networking-api-v1": "*" }, diff --git a/fabric-registry-sync-v0/src/testmod/java/net/fabricmc/fabric/test/registry/sync/RegistrySyncTest.java b/fabric-registry-sync-v0/src/testmod/java/net/fabricmc/fabric/test/registry/sync/RegistrySyncTest.java index 71222bb002..9808d78ea7 100644 --- a/fabric-registry-sync-v0/src/testmod/java/net/fabricmc/fabric/test/registry/sync/RegistrySyncTest.java +++ b/fabric-registry-sync-v0/src/testmod/java/net/fabricmc/fabric/test/registry/sync/RegistrySyncTest.java @@ -159,7 +159,7 @@ private static void registerBlocks(String namespace, int amount, int startingId) Registry.register(Registries.BLOCK, id, block); if (REGISTER_ITEMS) { - BlockItem blockItem = new BlockItem(block, new Item.Settings()); + BlockItem blockItem = new BlockItem(block, new Item.Settings().registryKey(RegistryKey.of(RegistryKeys.ITEM, id))); Registry.register(Registries.ITEM, id, blockItem); } } diff --git a/fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/mixin/renderer/client/MultipartBakedModelMixin.java b/fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/mixin/renderer/client/MultipartBakedModelMixin.java index ce8aca7350..4c0d9d8116 100644 --- a/fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/mixin/renderer/client/MultipartBakedModelMixin.java +++ b/fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/mixin/renderer/client/MultipartBakedModelMixin.java @@ -19,10 +19,8 @@ import java.util.BitSet; import java.util.List; import java.util.Map; -import java.util.function.Predicate; import java.util.function.Supplier; -import org.apache.commons.lang3.tuple.Pair; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -32,7 +30,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import net.minecraft.block.BlockState; -import net.minecraft.client.render.model.BakedModel; import net.minecraft.client.render.model.MultipartBakedModel; import net.minecraft.item.ItemStack; import net.minecraft.util.math.BlockPos; @@ -46,7 +43,7 @@ public class MultipartBakedModelMixin implements FabricBakedModel { @Shadow @Final - private List, BakedModel>> components; + private List components; @Shadow @Final @@ -61,9 +58,9 @@ public boolean isVanillaAdapter() { } @Inject(at = @At("RETURN"), method = "") - private void onInit(List, BakedModel>> components, CallbackInfo cb) { - for (Pair, BakedModel> component : components) { - if (!component.getRight().isVanillaAdapter()) { + private void onInit(List components, CallbackInfo cb) { + for (MultipartBakedModel.class_10204 component : components) { + if (!component.model().isVanillaAdapter()) { isVanilla = false; break; } @@ -78,9 +75,9 @@ public void emitBlockQuads(BlockRenderView blockView, BlockState state, BlockPos bitSet = new BitSet(); for (int i = 0; i < this.components.size(); i++) { - Pair, BakedModel> pair = components.get(i); + MultipartBakedModel.class_10204 component = components.get(i); - if (pair.getLeft().test(state)) { + if (component.condition().test(state)) { bitSet.set(i); } } @@ -98,7 +95,7 @@ public void emitBlockQuads(BlockRenderView blockView, BlockState state, BlockPos for (int i = 0; i < this.components.size(); i++) { if (bitSet.get(i)) { - components.get(i).getRight().emitBlockQuads(blockView, state, pos, subModelRandomSupplier, context); + components.get(i).model().emitBlockQuads(blockView, state, pos, subModelRandomSupplier, context); } } } diff --git a/fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/mixin/renderer/client/WeightedBakedModelMixin.java b/fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/mixin/renderer/client/WeightedBakedModelMixin.java index d31e00b260..604a05cb24 100644 --- a/fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/mixin/renderer/client/WeightedBakedModelMixin.java +++ b/fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/mixin/renderer/client/WeightedBakedModelMixin.java @@ -16,7 +16,6 @@ package net.fabricmc.fabric.mixin.renderer.client; -import java.util.List; import java.util.function.Supplier; import org.spongepowered.asm.mixin.Final; @@ -31,8 +30,8 @@ import net.minecraft.client.render.model.BakedModel; import net.minecraft.client.render.model.WeightedBakedModel; import net.minecraft.item.ItemStack; +import net.minecraft.util.collection.DataPool; import net.minecraft.util.collection.Weighted; -import net.minecraft.util.collection.Weighting; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.random.Random; import net.minecraft.world.BlockRenderView; @@ -44,17 +43,14 @@ public class WeightedBakedModelMixin implements FabricBakedModel { @Shadow @Final - private int totalWeight; - @Shadow - @Final - private List> models; + private DataPool models; @Unique boolean isVanilla = true; @Inject(at = @At("RETURN"), method = "") - private void onInit(List> models, CallbackInfo cb) { - for (int i = 0; i < models.size(); i++) { - if (!models.get(i).data().isVanillaAdapter()) { + private void onInit(DataPool dataPool, CallbackInfo cb) { + for (Weighted.Present model : models.getEntries()) { + if (!model.data().isVanillaAdapter()) { isVanilla = false; break; } @@ -68,12 +64,12 @@ public boolean isVanillaAdapter() { @Override public void emitBlockQuads(BlockRenderView blockView, BlockState state, BlockPos pos, Supplier randomSupplier, RenderContext context) { - Weighted.Present selected = Weighting.getAt(this.models, Math.abs((int) randomSupplier.get().nextLong()) % this.totalWeight).orElse(null); + BakedModel selected = this.models.getDataOrEmpty(randomSupplier.get()).orElse(null); if (selected != null) { - selected.data().emitBlockQuads(blockView, state, pos, () -> { + selected.emitBlockQuads(blockView, state, pos, () -> { Random random = randomSupplier.get(); - random.nextLong(); // Imitate vanilla modifying the random before passing it to the submodel + random.nextInt(); // Imitate vanilla modifying the random before passing it to the submodel return random; }, context); } @@ -81,12 +77,12 @@ public void emitBlockQuads(BlockRenderView blockView, BlockState state, BlockPos @Override public void emitItemQuads(ItemStack stack, Supplier randomSupplier, RenderContext context) { - Weighted.Present selected = Weighting.getAt(this.models, Math.abs((int) randomSupplier.get().nextLong()) % this.totalWeight).orElse(null); + BakedModel selected = this.models.getDataOrEmpty(randomSupplier.get()).orElse(null); if (selected != null) { - selected.data().emitItemQuads(stack, () -> { + selected.emitItemQuads(stack, () -> { Random random = randomSupplier.get(); - random.nextLong(); // Imitate vanilla modifying the random before passing it to the submodel + random.nextInt(); // Imitate vanilla modifying the random before passing it to the submodel return random; }, context); } diff --git a/fabric-renderer-api-v1/src/client/resources/fabric.mod.json b/fabric-renderer-api-v1/src/client/resources/fabric.mod.json index 5313577613..18d97494c9 100644 --- a/fabric-renderer-api-v1/src/client/resources/fabric.mod.json +++ b/fabric-renderer-api-v1/src/client/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "minecraft": ">=1.15-alpha.19.39.a", "fabric-api-base": "*" }, diff --git a/fabric-renderer-api-v1/src/testmod/java/net/fabricmc/fabric/test/renderer/Registration.java b/fabric-renderer-api-v1/src/testmod/java/net/fabricmc/fabric/test/renderer/Registration.java index e1473252e0..0d25ca08ce 100644 --- a/fabric-renderer-api-v1/src/testmod/java/net/fabricmc/fabric/test/renderer/Registration.java +++ b/fabric-renderer-api-v1/src/testmod/java/net/fabricmc/fabric/test/renderer/Registration.java @@ -46,12 +46,12 @@ public final class Registration { FRAME_VARIANT_BLOCK, }; - public static final Item FRAME_ITEM = register("frame", new BlockItem(FRAME_BLOCK, new Item.Settings())); - public static final Item FRAME_MULTIPART_ITEM = register("frame_multipart", new BlockItem(FRAME_MULTIPART_BLOCK, new Item.Settings())); - public static final Item FRAME_VARIANT_ITEM = register("frame_variant", new BlockItem(FRAME_VARIANT_BLOCK, new Item.Settings())); - public static final Item PILLAR_ITEM = register("pillar", new BlockItem(PILLAR_BLOCK, new Item.Settings())); - public static final Item OCTAGONAL_COLUMN_ITEM = register("octagonal_column", new BlockItem(OCTAGONAL_COLUMN_BLOCK, new Item.Settings())); - public static final Item RIVERSTONE_ITEM = register("riverstone", new BlockItem(RIVERSTONE_BLOCK, new Item.Settings())); + public static final Item FRAME_ITEM = registerItem("frame", (settings) -> new BlockItem(FRAME_BLOCK, settings)); + public static final Item FRAME_MULTIPART_ITEM = registerItem("frame_multipart", (settings) -> new BlockItem(FRAME_MULTIPART_BLOCK, settings)); + public static final Item FRAME_VARIANT_ITEM = registerItem("frame_variant", (settings) -> new BlockItem(FRAME_VARIANT_BLOCK, settings)); + public static final Item PILLAR_ITEM = registerItem("pillar", (settings) -> new BlockItem(PILLAR_BLOCK, settings)); + public static final Item OCTAGONAL_COLUMN_ITEM = registerItem("octagonal_column", (settings) -> new BlockItem(OCTAGONAL_COLUMN_BLOCK, settings)); + public static final Item RIVERSTONE_ITEM = registerItem("riverstone", (settings) -> new BlockItem(RIVERSTONE_BLOCK, settings)); public static final BlockEntityType FRAME_BLOCK_ENTITY_TYPE = register("frame", FabricBlockEntityTypeBuilder.create(FrameBlockEntity::new, FRAME_BLOCKS).build()); @@ -61,8 +61,9 @@ private static T register(String path, Function T register(String path, T item) { - return Registry.register(Registries.ITEM, RendererTest.id(path), item); + private static T registerItem(String path, Function itemFunction) { + RegistryKey registryKey = RegistryKey.of(RegistryKeys.ITEM, RendererTest.id(path)); + return Registry.register(Registries.ITEM, registryKey, itemFunction.apply(new Item.Settings().registryKey(registryKey))); } private static > T register(String path, T blockEntityType) { diff --git a/fabric-renderer-api-v1/src/testmodClient/java/net/fabricmc/fabric/test/renderer/client/FrameUnbakedModel.java b/fabric-renderer-api-v1/src/testmodClient/java/net/fabricmc/fabric/test/renderer/client/FrameUnbakedModel.java index b557910827..27e965733e 100644 --- a/fabric-renderer-api-v1/src/testmodClient/java/net/fabricmc/fabric/test/renderer/client/FrameUnbakedModel.java +++ b/fabric-renderer-api-v1/src/testmodClient/java/net/fabricmc/fabric/test/renderer/client/FrameUnbakedModel.java @@ -40,7 +40,7 @@ public class FrameUnbakedModel implements UnbakedModel { private static final SpriteIdentifier OBSIDIAN_SPRITE_ID = new SpriteIdentifier(SpriteAtlasTexture.BLOCK_ATLAS_TEXTURE, Identifier.ofVanilla("block/obsidian")); @Override - public void resolve(Resolver resolver, ModelType currentlyResolvingType) { + public void resolve(Resolver resolver) { } /* diff --git a/fabric-renderer-api-v1/src/testmodClient/java/net/fabricmc/fabric/test/renderer/client/OctagonalColumnUnbakedModel.java b/fabric-renderer-api-v1/src/testmodClient/java/net/fabricmc/fabric/test/renderer/client/OctagonalColumnUnbakedModel.java index 796527034c..1035addc34 100644 --- a/fabric-renderer-api-v1/src/testmodClient/java/net/fabricmc/fabric/test/renderer/client/OctagonalColumnUnbakedModel.java +++ b/fabric-renderer-api-v1/src/testmodClient/java/net/fabricmc/fabric/test/renderer/client/OctagonalColumnUnbakedModel.java @@ -55,7 +55,7 @@ public OctagonalColumnUnbakedModel(ShadeMode shadeMode) { } @Override - public void resolve(Resolver resolver, ModelType currentlyResolvingType) { + public void resolve(Resolver resolver) { } @Override diff --git a/fabric-renderer-api-v1/src/testmodClient/java/net/fabricmc/fabric/test/renderer/client/PillarUnbakedModel.java b/fabric-renderer-api-v1/src/testmodClient/java/net/fabricmc/fabric/test/renderer/client/PillarUnbakedModel.java index a70e6d0e02..9e210702d7 100644 --- a/fabric-renderer-api-v1/src/testmodClient/java/net/fabricmc/fabric/test/renderer/client/PillarUnbakedModel.java +++ b/fabric-renderer-api-v1/src/testmodClient/java/net/fabricmc/fabric/test/renderer/client/PillarUnbakedModel.java @@ -38,7 +38,7 @@ public class PillarUnbakedModel implements UnbakedModel { .toList(); @Override - public void resolve(Resolver resolver, ModelType currentlyResolvingType) { + public void resolve(Resolver resolver) { } @Nullable diff --git a/fabric-renderer-api-v1/src/testmodClient/java/net/fabricmc/fabric/test/renderer/client/RandomSupplierTest.java b/fabric-renderer-api-v1/src/testmodClient/java/net/fabricmc/fabric/test/renderer/client/RandomSupplierTest.java index d79782a621..8fd1820ce2 100644 --- a/fabric-renderer-api-v1/src/testmodClient/java/net/fabricmc/fabric/test/renderer/client/RandomSupplierTest.java +++ b/fabric-renderer-api-v1/src/testmodClient/java/net/fabricmc/fabric/test/renderer/client/RandomSupplierTest.java @@ -19,7 +19,6 @@ import java.util.List; import java.util.function.Supplier; -import org.apache.commons.lang3.tuple.Pair; import org.jetbrains.annotations.Nullable; import net.minecraft.block.BlockState; @@ -31,7 +30,7 @@ import net.minecraft.client.render.model.json.ModelOverrideList; import net.minecraft.client.render.model.json.ModelTransformation; import net.minecraft.client.texture.Sprite; -import net.minecraft.util.collection.Weighted; +import net.minecraft.util.collection.DataPool; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; import net.minecraft.util.math.random.Random; @@ -51,16 +50,7 @@ public class RandomSupplierTest implements ClientModInitializer { @Override public void onInitializeClient() { - var checkingModel = new RandomCheckingBakedModel(); - var weighted = new WeightedBakedModel(List.of( - Weighted.of(checkingModel, 1), - Weighted.of(checkingModel, 2))); - var multipart = new MultipartBakedModel(List.of( - Pair.of(state -> true, weighted), - Pair.of(state -> true, weighted))); - var weightedAgain = new WeightedBakedModel(List.of( - Weighted.of(multipart, 1), - Weighted.of(multipart, 2))); + WeightedBakedModel weightedAgain = createWeightedBakedModel(); long startingSeed = 42; Random random = Random.create(); @@ -78,6 +68,25 @@ public void onInitializeClient() { weightedAgain.emitBlockQuads(null, Blocks.STONE.getDefaultState(), BlockPos.ORIGIN, randomSupplier, null); } + private static WeightedBakedModel createWeightedBakedModel() { + var checkingModel = new RandomCheckingBakedModel(); + + DataPool.Builder weightedBuilder = DataPool.builder(); + weightedBuilder.add(checkingModel, 1); + weightedBuilder.add(checkingModel, 2); + + var weighted = new WeightedBakedModel(weightedBuilder.build()); + var multipart = new MultipartBakedModel(List.of( + new MultipartBakedModel.class_10204(state -> true, weighted), + new MultipartBakedModel.class_10204(state -> true, weighted))); + + DataPool.Builder weightedAgainBuilder = DataPool.builder(); + weightedAgainBuilder.add(multipart, 1); + weightedAgainBuilder.add(multipart, 2); + + return new WeightedBakedModel(weightedAgainBuilder.build()); + } + private static class RandomCheckingBakedModel implements BakedModel { @Override public List getQuads(@Nullable BlockState state, @Nullable Direction face, Random random) { diff --git a/fabric-renderer-api-v1/src/testmodClient/java/net/fabricmc/fabric/test/renderer/client/RiverstoneUnbakedModel.java b/fabric-renderer-api-v1/src/testmodClient/java/net/fabricmc/fabric/test/renderer/client/RiverstoneUnbakedModel.java index 7e63e0bb12..410540c791 100644 --- a/fabric-renderer-api-v1/src/testmodClient/java/net/fabricmc/fabric/test/renderer/client/RiverstoneUnbakedModel.java +++ b/fabric-renderer-api-v1/src/testmodClient/java/net/fabricmc/fabric/test/renderer/client/RiverstoneUnbakedModel.java @@ -33,7 +33,7 @@ public class RiverstoneUnbakedModel implements UnbakedModel { private static final Identifier GOLD_BLOCK_MODEL_ID = Identifier.ofVanilla("block/gold_block"); @Override - public void resolve(Resolver resolver, ModelType currentlyResolvingType) { + public void resolve(Resolver resolver) { resolver.resolve(STONE_MODEL_ID); resolver.resolve(GOLD_BLOCK_MODEL_ID); } diff --git a/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/mixin/client/indigo/renderer/ItemRendererMixin.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/mixin/client/indigo/renderer/ItemRendererMixin.java index ff981d906c..07283e3bb1 100644 --- a/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/mixin/client/indigo/renderer/ItemRendererMixin.java +++ b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/mixin/client/indigo/renderer/ItemRendererMixin.java @@ -43,7 +43,7 @@ public abstract class ItemRendererMixin { @Unique private final ThreadLocal fabric_contexts = ThreadLocal.withInitial(() -> new ItemRenderContext(colors)); - @Inject(method = "method_62476", at = @At(value = "HEAD"), cancellable = true) + @Inject(method = "renderItem(Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/render/model/json/ModelTransformationMode;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;IILnet/minecraft/client/render/model/BakedModel;Z)V", at = @At(value = "HEAD"), cancellable = true) public void hook_renderItem(ItemStack stack, ModelTransformationMode transformMode, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int light, int overlay, BakedModel model, boolean notInHand, CallbackInfo ci) { if (!model.isVanillaAdapter()) { fabric_contexts.get().renderModel(stack, transformMode, matrixStack, vertexConsumerProvider, light, overlay, model); diff --git a/fabric-renderer-indigo/src/client/resources/fabric.mod.json b/fabric-renderer-indigo/src/client/resources/fabric.mod.json index b76c761294..93a2e724d5 100644 --- a/fabric-renderer-indigo/src/client/resources/fabric.mod.json +++ b/fabric-renderer-indigo/src/client/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "minecraft": ">=1.15-alpha.19.39.a", "fabric-api-base": "*", "fabric-renderer-api-v1": "*" diff --git a/fabric-rendering-fluids-v1/src/main/resources/fabric.mod.json b/fabric-rendering-fluids-v1/src/main/resources/fabric.mod.json index b341ee8fd0..f97c0345c9 100644 --- a/fabric-rendering-fluids-v1/src/main/resources/fabric.mod.json +++ b/fabric-rendering-fluids-v1/src/main/resources/fabric.mod.json @@ -15,7 +15,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "fabric-api-base": "*" }, "description": "Hooks for registering fluid renders.", diff --git a/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/CapeFeatureRendererMixin.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/CapeFeatureRendererMixin.java index 4b4b03122f..89bf89f4b1 100644 --- a/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/CapeFeatureRendererMixin.java +++ b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/CapeFeatureRendererMixin.java @@ -16,24 +16,26 @@ package net.fabricmc.fabric.mixin.client.rendering; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.llamalad7.mixinextras.sugar.Local; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.entity.feature.CapeFeatureRenderer; import net.minecraft.client.render.entity.state.PlayerEntityRenderState; -import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.item.ItemStack; import net.fabricmc.fabric.api.client.rendering.v1.LivingEntityFeatureRenderEvents; @Mixin(CapeFeatureRenderer.class) public class CapeFeatureRendererMixin { - @Inject(at = @At(value = "FIELD", target = "Lnet/minecraft/item/Items;ELYTRA:Lnet/minecraft/item/Item;"), method = "render", require = 1, allow = 1, cancellable = true) - public void injectCapeRenderCheck(MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, PlayerEntityRenderState state, float limbAngle, float limbDistance, CallbackInfo ci) { + @WrapOperation(at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/entity/feature/CapeFeatureRenderer;method_64075(Lnet/minecraft/item/ItemStack;)Z"), method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;ILnet/minecraft/client/render/entity/state/PlayerEntityRenderState;FF)V") + public boolean injectCapeRenderCheck(CapeFeatureRenderer instance, ItemStack itemStack, Operation original, @Local(argsOnly = true) PlayerEntityRenderState state) { if (!LivingEntityFeatureRenderEvents.ALLOW_CAPE_RENDER.invoker().allowCapeRender(state)) { - ci.cancel(); + return false; } + + return original.call(instance, itemStack); } } diff --git a/fabric-rendering-v1/src/client/resources/fabric.mod.json b/fabric-rendering-v1/src/client/resources/fabric.mod.json index 31e202379f..803687f047 100644 --- a/fabric-rendering-v1/src/client/resources/fabric.mod.json +++ b/fabric-rendering-v1/src/client/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "fabric-api-base": "*" }, "description": "Hooks and registries for rendering-related things.", diff --git a/fabric-rendering-v1/src/testmod/java/net/fabricmc/fabric/test/rendering/CustomAtlasSourcesTestInit.java b/fabric-rendering-v1/src/testmod/java/net/fabricmc/fabric/test/rendering/CustomAtlasSourcesTestInit.java index f3c75f907e..7671679fa4 100644 --- a/fabric-rendering-v1/src/testmod/java/net/fabricmc/fabric/test/rendering/CustomAtlasSourcesTestInit.java +++ b/fabric-rendering-v1/src/testmod/java/net/fabricmc/fabric/test/rendering/CustomAtlasSourcesTestInit.java @@ -19,15 +19,18 @@ import net.minecraft.item.Item; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.RegistryKeys; import net.minecraft.util.Identifier; import net.fabricmc.api.ModInitializer; public class CustomAtlasSourcesTestInit implements ModInitializer { - public static final Item DOUBLE_IRON_INGOT = new Item(new Item.Settings()); + public static final RegistryKey DOUBLE_IRON_INGOT_KEY = RegistryKey.of(RegistryKeys.ITEM, Identifier.of("fabric-rendering-v1-testmod", "double_iron_ingot")); + public static final Item DOUBLE_IRON_INGOT = new Item(new Item.Settings().registryKey(DOUBLE_IRON_INGOT_KEY)); @Override public void onInitialize() { - Registry.register(Registries.ITEM, Identifier.of("fabric-rendering-v1-testmod", "double_iron_ingot"), DOUBLE_IRON_INGOT); + Registry.register(Registries.ITEM, DOUBLE_IRON_INGOT_KEY, DOUBLE_IRON_INGOT); } } diff --git a/fabric-rendering-v1/src/testmod/java/net/fabricmc/fabric/test/rendering/CustomColorResolverTestInit.java b/fabric-rendering-v1/src/testmod/java/net/fabricmc/fabric/test/rendering/CustomColorResolverTestInit.java index 188387bd0e..0e4d259ce8 100644 --- a/fabric-rendering-v1/src/testmod/java/net/fabricmc/fabric/test/rendering/CustomColorResolverTestInit.java +++ b/fabric-rendering-v1/src/testmod/java/net/fabricmc/fabric/test/rendering/CustomColorResolverTestInit.java @@ -31,7 +31,7 @@ public class CustomColorResolverTestInit implements ModInitializer { public static final RegistryKey KEY = RegistryKey.of(RegistryKeys.BLOCK, Identifier.of("fabric-rendering-v1-testmod", "custom_color_block")); public static final Block CUSTOM_COLOR_BLOCK = new Block(AbstractBlock.Settings.create().registryKey(KEY)); - public static final Item CUSTOM_COLOR_BLOCK_ITEM = new BlockItem(CUSTOM_COLOR_BLOCK, new Item.Settings()); + public static final Item CUSTOM_COLOR_BLOCK_ITEM = new BlockItem(CUSTOM_COLOR_BLOCK, new Item.Settings().registryKey(RegistryKey.of(RegistryKeys.ITEM, KEY.getValue()))); @Override public void onInitialize() { diff --git a/fabric-rendering-v1/src/testmod/java/net/fabricmc/fabric/test/rendering/TooltipComponentTestInit.java b/fabric-rendering-v1/src/testmod/java/net/fabricmc/fabric/test/rendering/TooltipComponentTestInit.java index a783aad51f..88372e0e49 100644 --- a/fabric-rendering-v1/src/testmod/java/net/fabricmc/fabric/test/rendering/TooltipComponentTestInit.java +++ b/fabric-rendering-v1/src/testmod/java/net/fabricmc/fabric/test/rendering/TooltipComponentTestInit.java @@ -16,44 +16,47 @@ package net.fabricmc.fabric.test.rendering; -import java.util.EnumMap; -import java.util.List; +import java.util.Map; import java.util.Optional; import net.minecraft.item.ArmorItem; -import net.minecraft.item.ArmorMaterial; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.item.Items; +import net.minecraft.item.equipment.ArmorMaterial; +import net.minecraft.item.equipment.EquipmentType; import net.minecraft.item.tooltip.TooltipData; import net.minecraft.registry.Registries; import net.minecraft.registry.Registry; -import net.minecraft.registry.entry.RegistryEntry; +import net.minecraft.registry.RegistryKey; +import net.minecraft.registry.RegistryKeys; +import net.minecraft.registry.tag.ItemTags; import net.minecraft.sound.SoundEvents; import net.minecraft.util.Identifier; -import net.minecraft.util.Util; import net.fabricmc.api.ModInitializer; public class TooltipComponentTestInit implements ModInitializer { - public static Item CUSTOM_TOOLTIP_ITEM = new CustomTooltipItem(); - public static RegistryEntry TEST_ARMOR_MATERIAL = Registry.registerReference(Registries.ARMOR_MATERIAL, Identifier.of("fabric-rendering-v1-testmod", "test_material"), createTestArmorMaterial()); - public static Item CUSTOM_ARMOR_ITEM = new ArmorItem(TEST_ARMOR_MATERIAL, ArmorItem.Type.CHESTPLATE, new Item.Settings()); + public static final RegistryKey CUSTOM_TOOLTIP_ITEM_KEY = RegistryKey.of(RegistryKeys.ITEM, Identifier.of("fabric-rendering-v1-testmod", "custom_tooltip")); + public static final Item CUSTOM_TOOLTIP_ITEM = new CustomTooltipItem(new Item.Settings().registryKey(CUSTOM_TOOLTIP_ITEM_KEY)); + + public static final ArmorMaterial TEST_ARMOR_MATERIAL = createTestArmorMaterial(); + public static final RegistryKey CUSTOM_ARMOR_ITEM_KEY = RegistryKey.of(RegistryKeys.ITEM, Identifier.of("fabric-rendering-v1-testmod", "test_chest")); + public static final Item CUSTOM_ARMOR_ITEM = new ArmorItem(TEST_ARMOR_MATERIAL, EquipmentType.CHESTPLATE, new Item.Settings().registryKey(CUSTOM_ARMOR_ITEM_KEY)); @Override public void onInitialize() { - Registry.register(Registries.ITEM, Identifier.of("fabric-rendering-v1-testmod", "custom_tooltip"), CUSTOM_TOOLTIP_ITEM); - Registry.register(Registries.ITEM, Identifier.of("fabric-rendering-v1-testmod", "test_chest"), CUSTOM_ARMOR_ITEM); + Registry.register(Registries.ITEM, CUSTOM_TOOLTIP_ITEM_KEY, CUSTOM_TOOLTIP_ITEM); + Registry.register(Registries.ITEM, CUSTOM_ARMOR_ITEM_KEY, CUSTOM_ARMOR_ITEM); } private static class CustomTooltipItem extends Item { - CustomTooltipItem() { - super(new Settings()); + CustomTooltipItem(Settings settings) { + super(settings); } @Override public Optional getTooltipData(ItemStack stack) { - return Optional.of(new Data(stack.getTranslationKey())); + return Optional.of(new Data(stack.getItem().getTranslationKey())); } } @@ -62,18 +65,20 @@ public record Data(String string) implements TooltipData { private static ArmorMaterial createTestArmorMaterial() { return new ArmorMaterial( - Util.make(new EnumMap<>(ArmorItem.Type.class), (map) -> { - map.put(ArmorItem.Type.BOOTS, 1); - map.put(ArmorItem.Type.LEGGINGS, 2); - map.put(ArmorItem.Type.CHESTPLATE, 3); - map.put(ArmorItem.Type.HELMET, 1); - map.put(ArmorItem.Type.BODY, 3); - }), - SoundEvents.ITEM_ARMOR_EQUIP_LEATHER, - (stack) -> stack.getItem() == Items.LEATHER, - List.of(new ArmorMaterial.Layer(Identifier.of("fabric-rendering-v1-testmod", "test_material"))), - 0, - 0 + 0, + Map.of( + EquipmentType.BOOTS, 1, + EquipmentType.LEGGINGS, 2, + EquipmentType.CHESTPLATE, 3, + EquipmentType.HELMET, 1, + EquipmentType.BODY, 3 + ), + 1, + SoundEvents.ITEM_ARMOR_EQUIP_LEATHER, + 0, + 0.5F, + ItemTags.REPAIRS_LEATHER_ARMOR, + Identifier.of("fabric-rendering-v1-testmod", "test_material") ); } } diff --git a/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/impl/resource/conditions/ResourceConditionsImpl.java b/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/impl/resource/conditions/ResourceConditionsImpl.java index de2219c4aa..227394d602 100644 --- a/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/impl/resource/conditions/ResourceConditionsImpl.java +++ b/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/impl/resource/conditions/ResourceConditionsImpl.java @@ -22,6 +22,7 @@ import java.util.Map; import java.util.Optional; import java.util.Set; +import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; import com.google.gson.JsonObject; @@ -114,7 +115,7 @@ public static boolean modsLoaded(List modIds, boolean and) { * - any call to {@link #tagsPopulated} will check the tags from the failed reload instead of failing directly. * This is probably acceptable. */ - public static final ThreadLocal, Set>> LOADED_TAGS = new ThreadLocal<>(); + public static final AtomicReference, Set>> LOADED_TAGS = new AtomicReference<>(); public static void setTags(List> tags) { Map, Set> tagMap = new IdentityHashMap<>(); @@ -123,7 +124,9 @@ public static void setTags(List> tags) { tagMap.put(registryTags.getKey(), registryTags.getLookup().streamTagKeys().map(TagKey::id).collect(Collectors.toSet())); } - LOADED_TAGS.set(tagMap); + if (LOADED_TAGS.getAndSet(tagMap) != null) { + throw new IllegalStateException("Tags already captured, this should not happen"); + } } // Cannot use registry because tags are not loaded to the registry at this stage yet. diff --git a/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/mixin/resource/conditions/DataPackContentsMixin.java b/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/mixin/resource/conditions/DataPackContentsMixin.java index a1e0031d32..5f0ca16bc5 100644 --- a/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/mixin/resource/conditions/DataPackContentsMixin.java +++ b/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/mixin/resource/conditions/DataPackContentsMixin.java @@ -17,6 +17,7 @@ package net.fabricmc.fabric.mixin.resource.conditions; import java.util.List; +import java.util.Objects; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; @@ -52,6 +53,6 @@ private static void hookReload(ResourceManager manager, CombinedDynamicRegistrie at = @At("TAIL") ) private void removeLoadedTags(CallbackInfo ci) { - ResourceConditionsImpl.LOADED_TAGS.remove(); + Objects.requireNonNull(ResourceConditionsImpl.LOADED_TAGS.getAndSet(null), "loaded tags not reset"); } } diff --git a/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/mixin/resource/conditions/JsonDataLoaderMixin.java b/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/mixin/resource/conditions/JsonDataLoaderMixin.java index 62560ceff3..3a9d1d3570 100644 --- a/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/mixin/resource/conditions/JsonDataLoaderMixin.java +++ b/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/mixin/resource/conditions/JsonDataLoaderMixin.java @@ -16,53 +16,62 @@ package net.fabricmc.fabric.mixin.resource.conditions; -import java.util.Iterator; import java.util.Map; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import com.llamalad7.mixinextras.sugar.Local; +import com.mojang.serialization.Codec; +import com.mojang.serialization.DataResult; +import com.mojang.serialization.DynamicOps; import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import net.minecraft.registry.RegistryOps; import net.minecraft.resource.JsonDataLoader; -import net.minecraft.resource.ResourceManager; +import net.minecraft.resource.Resource; import net.minecraft.util.Identifier; -import net.minecraft.util.profiler.Profiler; import net.fabricmc.fabric.impl.resource.conditions.ResourceConditionsImpl; -/** - * Using {@link SinglePreparationResourceReloaderMixin}, apply resource conditions at the very beginning of the "apply" phase. - */ @Mixin(JsonDataLoader.class) -public class JsonDataLoaderMixin extends SinglePreparationResourceReloaderMixin { - @Shadow - @Final - private String dataType; - - @Override - @SuppressWarnings("unchecked") - protected void fabric_applyResourceConditions(ResourceManager resourceManager, Profiler profiler, Object object, @Nullable RegistryOps.RegistryInfoGetter registryInfo) { - profiler.push("Fabric resource conditions: %s".formatted(dataType)); +public class JsonDataLoaderMixin { + @Unique + private static final Object SKIP_DATA_MARKER = new Object(); - Iterator> it = ((Map) object).entrySet().iterator(); + @WrapOperation(method = "load", at = @At(value = "INVOKE", target = "Lcom/mojang/serialization/Codec;parse(Lcom/mojang/serialization/DynamicOps;Ljava/lang/Object;)Lcom/mojang/serialization/DataResult;", remap = false)) + private static DataResult applyResourceConditions(Codec instance, DynamicOps dynamicOps, Object object, Operation> original, + @Local(argsOnly = true) String dataType, + @Local Map.Entry entry) { + final JsonElement resourceData = (JsonElement) object; + @Nullable RegistryOps.RegistryInfoGetter registryInfo = null; - while (it.hasNext()) { - Map.Entry entry = it.next(); - JsonElement resourceData = entry.getValue(); + if (dynamicOps instanceof RegistryOpsAccessor registryOps) { + registryInfo = registryOps.getRegistryInfoGetter(); + } - if (resourceData.isJsonObject()) { - JsonObject obj = resourceData.getAsJsonObject(); + if (resourceData.isJsonObject()) { + JsonObject obj = resourceData.getAsJsonObject(); - if (!ResourceConditionsImpl.applyResourceConditions(obj, dataType, entry.getKey(), fabric_getRegistryLookup())) { - it.remove(); - } + if (!ResourceConditionsImpl.applyResourceConditions(obj, dataType, entry.getKey(), registryInfo)) { + return DataResult.success(SKIP_DATA_MARKER); } } - profiler.pop(); + return original.call(instance, dynamicOps, object); + } + + // parse.ifSuccess + @Inject(method = "method_63568", at = @At("HEAD"), cancellable = true) + private static void skipData(Map map, Identifier identifier, Object object, CallbackInfo ci) { + if (object == SKIP_DATA_MARKER) { + ci.cancel(); + } } } diff --git a/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/mixin/resource/conditions/RecipeManagerMixin.java b/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/mixin/resource/conditions/RegistryOpsAccessor.java similarity index 57% rename from fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/mixin/resource/conditions/RecipeManagerMixin.java rename to fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/mixin/resource/conditions/RegistryOpsAccessor.java index af5807c344..45ce2c96fd 100644 --- a/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/mixin/resource/conditions/RecipeManagerMixin.java +++ b/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/mixin/resource/conditions/RegistryOpsAccessor.java @@ -16,23 +16,13 @@ package net.fabricmc.fabric.mixin.resource.conditions; -import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.gen.Accessor; -import net.minecraft.recipe.RecipeManager; import net.minecraft.registry.RegistryOps; -import net.minecraft.registry.RegistryWrapper; -@Mixin(RecipeManager.class) -public class RecipeManagerMixin extends SinglePreparationResourceReloaderMixin { - @Shadow - @Final - private RegistryWrapper.WrapperLookup registries; - - @Override - protected @Nullable RegistryOps.RegistryInfoGetter fabric_getRegistryLookup() { - return new RegistryOps.CachedRegistryInfoGetter(registries); - } +@Mixin(RegistryOps.class) +public interface RegistryOpsAccessor { + @Accessor + RegistryOps.RegistryInfoGetter getRegistryInfoGetter(); } diff --git a/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/mixin/resource/conditions/ReloadableRegistriesMixin.java b/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/mixin/resource/conditions/ReloadableRegistriesMixin.java index 3d23438b3c..640d4281ba 100644 --- a/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/mixin/resource/conditions/ReloadableRegistriesMixin.java +++ b/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/mixin/resource/conditions/ReloadableRegistriesMixin.java @@ -22,7 +22,6 @@ import java.util.concurrent.Executor; import java.util.stream.Stream; -import com.google.gson.JsonElement; import com.llamalad7.mixinextras.injector.wrapoperation.Operation; import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; import com.llamalad7.mixinextras.sugar.Local; @@ -32,21 +31,15 @@ import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import net.minecraft.loot.LootDataType; import net.minecraft.registry.CombinedDynamicRegistries; -import net.minecraft.registry.MutableRegistry; import net.minecraft.registry.Registry; import net.minecraft.registry.RegistryOps; import net.minecraft.registry.RegistryWrapper; import net.minecraft.registry.ReloadableRegistries; import net.minecraft.registry.ServerDynamicRegistryType; import net.minecraft.resource.ResourceManager; -import net.minecraft.util.Identifier; - -import net.fabricmc.fabric.impl.resource.conditions.ResourceConditionsImpl; // Should apply before Loot API. @Mixin(value = ReloadableRegistries.class, priority = 900) @@ -68,11 +61,4 @@ private static RegistryWrapper.WrapperLookup storeWrapperLookup(Stream dynamicRegistries, List> pendingTagLoads, ResourceManager resourceManager, Executor prepareExecutor, CallbackInfoReturnable> cir, @Local RegistryOps ops, @Share("wrapper") LocalRef share) { REGISTRY_LOOKUPS.put(ops, share.get()); } - - @Inject(method = "method_61239", at = @At("HEAD"), cancellable = true) - private static void applyConditions(LootDataType lootDataType, RegistryOps ops, MutableRegistry mutableRegistry, Identifier id, JsonElement json, CallbackInfo ci) { - if (json.isJsonObject() && !ResourceConditionsImpl.applyResourceConditions(json.getAsJsonObject(), lootDataType.registryKey().getValue().getPath(), id, new RegistryOps.CachedRegistryInfoGetter(REGISTRY_LOOKUPS.get(ops)))) { - ci.cancel(); - } - } } diff --git a/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/mixin/resource/conditions/ServerAdvancementLoaderMixin.java b/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/mixin/resource/conditions/ServerAdvancementLoaderMixin.java deleted file mode 100644 index 4f8574123f..0000000000 --- a/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/mixin/resource/conditions/ServerAdvancementLoaderMixin.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2016, 2017, 2018, 2019 FabricMC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.fabricmc.fabric.mixin.resource.conditions; - -import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; - -import net.minecraft.registry.RegistryOps; -import net.minecraft.registry.RegistryWrapper; -import net.minecraft.server.ServerAdvancementLoader; - -@Mixin(ServerAdvancementLoader.class) -public class ServerAdvancementLoaderMixin extends SinglePreparationResourceReloaderMixin { - @Shadow - @Final - private RegistryWrapper.WrapperLookup registries; - - @Override - protected @Nullable RegistryOps.RegistryInfoGetter fabric_getRegistryLookup() { - return new RegistryOps.CachedRegistryInfoGetter(this.registries); - } -} diff --git a/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/mixin/resource/conditions/SinglePreparationResourceReloaderMixin.java b/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/mixin/resource/conditions/SinglePreparationResourceReloaderMixin.java deleted file mode 100644 index 4b81529553..0000000000 --- a/fabric-resource-conditions-api-v1/src/main/java/net/fabricmc/fabric/mixin/resource/conditions/SinglePreparationResourceReloaderMixin.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2016, 2017, 2018, 2019 FabricMC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package net.fabricmc.fabric.mixin.resource.conditions; - -import org.jetbrains.annotations.Nullable; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import net.minecraft.registry.RegistryOps; -import net.minecraft.resource.ResourceManager; -import net.minecraft.resource.SinglePreparationResourceReloader; -import net.minecraft.util.profiler.Profiler; - -/** - * This mixin allows us to inject arbitrary logic at the beginning of the "apply" phase. - * Used by the subclass {@link JsonDataLoaderMixin}. - */ -@Mixin(SinglePreparationResourceReloader.class) -public class SinglePreparationResourceReloaderMixin { - // thenAcceptAsync in reload - @Inject(at = @At("HEAD"), method = "method_18790") - private void applyResourceConditions(ResourceManager resourceManager, Profiler profiler, Object object, CallbackInfo ci) { - fabric_applyResourceConditions(resourceManager, profiler, object, fabric_getRegistryLookup()); - } - - protected void fabric_applyResourceConditions(ResourceManager resourceManager, Profiler profiler, Object object, @Nullable RegistryOps.RegistryInfoGetter registryLookup) { - } - - @Nullable - protected RegistryOps.RegistryInfoGetter fabric_getRegistryLookup() { - return null; - } -} diff --git a/fabric-resource-conditions-api-v1/src/main/resources/fabric-resource-conditions-api-v1.mixins.json b/fabric-resource-conditions-api-v1/src/main/resources/fabric-resource-conditions-api-v1.mixins.json index 87948f4ad8..6da8865c31 100644 --- a/fabric-resource-conditions-api-v1/src/main/resources/fabric-resource-conditions-api-v1.mixins.json +++ b/fabric-resource-conditions-api-v1/src/main/resources/fabric-resource-conditions-api-v1.mixins.json @@ -6,12 +6,10 @@ "DataPackContentsMixin", "DataProviderMixin", "JsonDataLoaderMixin", - "RecipeManagerMixin", "RegistryLoaderMixin", + "RegistryOpsAccessor", "ReloadableRegistriesMixin", - "ResourcePackProfileMixin", - "ServerAdvancementLoaderMixin", - "SinglePreparationResourceReloaderMixin" + "ResourcePackProfileMixin" ], "injectors": { "defaultRequire": 1 diff --git a/fabric-resource-conditions-api-v1/src/main/resources/fabric.mod.json b/fabric-resource-conditions-api-v1/src/main/resources/fabric.mod.json index a5685f5d5d..6fcdbc8fc6 100644 --- a/fabric-resource-conditions-api-v1/src/main/resources/fabric.mod.json +++ b/fabric-resource-conditions-api-v1/src/main/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3" + "fabricloader": ">=0.16.4" }, "description": "Allows conditionally loading resources.", "entrypoints": { diff --git a/fabric-resource-loader-v0/src/main/java/net/fabricmc/fabric/impl/resource/loader/FabricRecipeManager.java b/fabric-resource-loader-v0/src/main/java/net/fabricmc/fabric/impl/resource/loader/FabricRecipeManager.java new file mode 100644 index 0000000000..2dad723816 --- /dev/null +++ b/fabric-resource-loader-v0/src/main/java/net/fabricmc/fabric/impl/resource/loader/FabricRecipeManager.java @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2016, 2017, 2018, 2019 FabricMC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.fabricmc.fabric.impl.resource.loader; + +import net.minecraft.registry.RegistryWrapper; + +public interface FabricRecipeManager { + RegistryWrapper.WrapperLookup fabric_getRegistries(); +} diff --git a/fabric-resource-loader-v0/src/main/java/net/fabricmc/fabric/impl/resource/loader/ResourceManagerHelperImpl.java b/fabric-resource-loader-v0/src/main/java/net/fabricmc/fabric/impl/resource/loader/ResourceManagerHelperImpl.java index b3fdbf0431..7516657dce 100644 --- a/fabric-resource-loader-v0/src/main/java/net/fabricmc/fabric/impl/resource/loader/ResourceManagerHelperImpl.java +++ b/fabric-resource-loader-v0/src/main/java/net/fabricmc/fabric/impl/resource/loader/ResourceManagerHelperImpl.java @@ -35,7 +35,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import net.minecraft.recipe.RecipeManager; import net.minecraft.registry.RegistryWrapper; import net.minecraft.resource.OverlayResourcePack; import net.minecraft.resource.ResourcePack; @@ -241,8 +240,8 @@ private RegistryWrapper.WrapperLookup getWrapperLookup(List li } for (ResourceReloader resourceReloader : listeners) { - if (resourceReloader instanceof RecipeManager recipeManager) { - return recipeManager.registries; + if (resourceReloader instanceof FabricRecipeManager recipeManager) { + return recipeManager.fabric_getRegistries(); } } diff --git a/fabric-resource-loader-v0/src/main/java/net/fabricmc/fabric/mixin/resource/loader/RecipeManagerMixin.java b/fabric-resource-loader-v0/src/main/java/net/fabricmc/fabric/mixin/resource/loader/RecipeManagerMixin.java new file mode 100644 index 0000000000..f27c6b0fd5 --- /dev/null +++ b/fabric-resource-loader-v0/src/main/java/net/fabricmc/fabric/mixin/resource/loader/RecipeManagerMixin.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2016, 2017, 2018, 2019 FabricMC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.fabricmc.fabric.mixin.resource.loader; + +import java.util.Objects; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import net.minecraft.recipe.RecipeManager; +import net.minecraft.registry.RegistryWrapper; + +import net.fabricmc.fabric.impl.resource.loader.FabricRecipeManager; + +@Mixin(RecipeManager.class) +public class RecipeManagerMixin implements FabricRecipeManager { + @Unique + private RegistryWrapper.WrapperLookup registries; + + @Inject(method = "", at = @At("TAIL")) + private void init(RegistryWrapper.WrapperLookup registries, CallbackInfo ci) { + this.registries = registries; + } + + @Override + public RegistryWrapper.WrapperLookup fabric_getRegistries() { + return Objects.requireNonNull(registries); + } +} diff --git a/fabric-resource-loader-v0/src/main/resources/fabric-resource-loader-v0.accesswidener b/fabric-resource-loader-v0/src/main/resources/fabric-resource-loader-v0.accesswidener index 6c9686b872..a60e57afe3 100644 --- a/fabric-resource-loader-v0/src/main/resources/fabric-resource-loader-v0.accesswidener +++ b/fabric-resource-loader-v0/src/main/resources/fabric-resource-loader-v0.accesswidener @@ -4,4 +4,3 @@ accessible method net/minecraft/resource/NamespaceResourceManager getMetadataPat accessible method net/minecraft/resource/NamespaceResourceManager loadMetadata (Lnet/minecraft/resource/InputSupplier;)Lnet/minecraft/resource/metadata/ResourceMetadata; accessible field net/minecraft/resource/FileResourcePackProvider source Lnet/minecraft/resource/ResourcePackSource; accessible field net/minecraft/resource/ResourcePackManager providers Ljava/util/Set; -accessible field net/minecraft/recipe/RecipeManager registries Lnet/minecraft/registry/RegistryWrapper$WrapperLookup; diff --git a/fabric-resource-loader-v0/src/main/resources/fabric-resource-loader-v0.mixins.json b/fabric-resource-loader-v0/src/main/resources/fabric-resource-loader-v0.mixins.json index f1117e5bfe..342411bc47 100644 --- a/fabric-resource-loader-v0/src/main/resources/fabric-resource-loader-v0.mixins.json +++ b/fabric-resource-loader-v0/src/main/resources/fabric-resource-loader-v0.mixins.json @@ -10,6 +10,7 @@ "ResourceMixin", "ResourcePackManagerMixin", "ResourcePackProfileMixin", + "RecipeManagerMixin", "SelectKnownPacksC2SPacketMixin", "ServerConfigurationNetworkHandlerMixin", "ServerPropertiesHandlerMixin", diff --git a/fabric-resource-loader-v0/src/main/resources/fabric.mod.json b/fabric-resource-loader-v0/src/main/resources/fabric.mod.json index ed0d37ff62..c8958d0e5e 100644 --- a/fabric-resource-loader-v0/src/main/resources/fabric.mod.json +++ b/fabric-resource-loader-v0/src/main/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3" + "fabricloader": ">=0.16.4" }, "description": "Asset and data resource loading.", "mixins": [ diff --git a/fabric-resource-loader-v0/src/testmod/java/net/fabricmc/fabric/test/resource/loader/VanillaBuiltinResourcePackInjectionTestMod.java b/fabric-resource-loader-v0/src/testmod/java/net/fabricmc/fabric/test/resource/loader/VanillaBuiltinResourcePackInjectionTestMod.java index 1bedddd363..7bd89d1962 100644 --- a/fabric-resource-loader-v0/src/testmod/java/net/fabricmc/fabric/test/resource/loader/VanillaBuiltinResourcePackInjectionTestMod.java +++ b/fabric-resource-loader-v0/src/testmod/java/net/fabricmc/fabric/test/resource/loader/VanillaBuiltinResourcePackInjectionTestMod.java @@ -38,6 +38,6 @@ public class VanillaBuiltinResourcePackInjectionTestMod implements ModInitialize @Override public void onInitialize() { Registry.register(Registries.BLOCK, KEY, TEST_BLOCK); - Registry.register(Registries.ITEM, KEY.getValue(), new BlockItem(TEST_BLOCK, new Item.Settings())); + Registry.register(Registries.ITEM, KEY.getValue(), new BlockItem(TEST_BLOCK, new Item.Settings().registryKey(RegistryKey.of(RegistryKeys.ITEM, KEY.getValue())))); } } diff --git a/fabric-screen-api-v1/src/client/resources/fabric.mod.json b/fabric-screen-api-v1/src/client/resources/fabric.mod.json index 10ce38b4e8..c53dff27a2 100644 --- a/fabric-screen-api-v1/src/client/resources/fabric.mod.json +++ b/fabric-screen-api-v1/src/client/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "fabric-api-base": "*" }, "description": "Adds screen related hooks.", diff --git a/fabric-screen-handler-api-v1/src/main/resources/fabric.mod.json b/fabric-screen-handler-api-v1/src/main/resources/fabric.mod.json index ffee61fd67..4ee4b9fb64 100644 --- a/fabric-screen-handler-api-v1/src/main/resources/fabric.mod.json +++ b/fabric-screen-handler-api-v1/src/main/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "fabric-api-base": "*", "fabric-networking-api-v1": "*" }, diff --git a/fabric-screen-handler-api-v1/src/testmod/java/net/fabricmc/fabric/test/screenhandler/ScreenHandlerTest.java b/fabric-screen-handler-api-v1/src/testmod/java/net/fabricmc/fabric/test/screenhandler/ScreenHandlerTest.java index 7cfb8ae6b6..3fe9e41afc 100644 --- a/fabric-screen-handler-api-v1/src/testmod/java/net/fabricmc/fabric/test/screenhandler/ScreenHandlerTest.java +++ b/fabric-screen-handler-api-v1/src/testmod/java/net/fabricmc/fabric/test/screenhandler/ScreenHandlerTest.java @@ -45,11 +45,13 @@ public class ScreenHandlerTest implements ModInitializer { public static final String ID = "fabric-screen-handler-api-v1-testmod"; - public static final Item BAG = new BagItem(new Item.Settings().maxCount(1)); - public static final Item POSITIONED_BAG = new PositionedBagItem(new Item.Settings().maxCount(1)); + public static final RegistryKey BAG_KEY = RegistryKey.of(RegistryKeys.ITEM, id("bag")); + public static final Item BAG = new BagItem(new Item.Settings().maxCount(1).registryKey(BAG_KEY)); + public static final RegistryKey POSITIONED_BAG_KEY = RegistryKey.of(RegistryKeys.ITEM, id("positioned_bag")); + public static final Item POSITIONED_BAG = new PositionedBagItem(new Item.Settings().maxCount(1).registryKey(POSITIONED_BAG_KEY)); public static final RegistryKey BOX_KEY = RegistryKey.of(RegistryKeys.BLOCK, id("box")); public static final Block BOX = new BoxBlock(AbstractBlock.Settings.copy(Blocks.OAK_WOOD).registryKey(BOX_KEY)); - public static final Item BOX_ITEM = new BlockItem(BOX, new Item.Settings()); + public static final Item BOX_ITEM = new BlockItem(BOX, new Item.Settings().registryKey(RegistryKey.of(RegistryKeys.ITEM, BOX_KEY.getValue()))); public static final BlockEntityType BOX_ENTITY = FabricBlockEntityTypeBuilder.create(BoxBlockEntity::new, BOX).build(); public static final ScreenHandlerType BAG_SCREEN_HANDLER = new ScreenHandlerType<>(BagScreenHandler::new, FeatureFlags.VANILLA_FEATURES); public static final ScreenHandlerType POSITIONED_BAG_SCREEN_HANDLER = new ExtendedScreenHandlerType<>(PositionedBagScreenHandler::new, PositionedBagScreenHandler.BagData.PACKET_CODEC); @@ -61,8 +63,8 @@ public static Identifier id(String path) { @Override public void onInitialize() { - Registry.register(Registries.ITEM, id("bag"), BAG); - Registry.register(Registries.ITEM, id("positioned_bag"), POSITIONED_BAG); + Registry.register(Registries.ITEM, BAG_KEY, BAG); + Registry.register(Registries.ITEM, POSITIONED_BAG_KEY, POSITIONED_BAG); Registry.register(Registries.BLOCK, BOX_KEY, BOX); Registry.register(Registries.ITEM, BOX_KEY.getValue(), BOX_ITEM); Registry.register(Registries.BLOCK_ENTITY_TYPE, id("box"), BOX_ENTITY); diff --git a/fabric-sound-api-v1/src/client/resources/fabric.mod.json b/fabric-sound-api-v1/src/client/resources/fabric.mod.json index 6450d2928f..8c77a147ae 100644 --- a/fabric-sound-api-v1/src/client/resources/fabric.mod.json +++ b/fabric-sound-api-v1/src/client/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "minecraft": ">=1.19.2" }, "description": "Hooks for modifying Minecraft's sound system.", diff --git a/fabric-transfer-api-v1/src/main/resources/fabric.mod.json b/fabric-transfer-api-v1/src/main/resources/fabric.mod.json index cc88fde17d..07c5180405 100644 --- a/fabric-transfer-api-v1/src/main/resources/fabric.mod.json +++ b/fabric-transfer-api-v1/src/main/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "fabric-api-lookup-api-v1": "*", "fabric-rendering-fluids-v1": "*" }, diff --git a/fabric-transfer-api-v1/src/testmod/java/net/fabricmc/fabric/test/transfer/ingame/ExtractStickItem.java b/fabric-transfer-api-v1/src/testmod/java/net/fabricmc/fabric/test/transfer/ingame/ExtractStickItem.java index 36a4aa9960..88221a62e0 100644 --- a/fabric-transfer-api-v1/src/testmod/java/net/fabricmc/fabric/test/transfer/ingame/ExtractStickItem.java +++ b/fabric-transfer-api-v1/src/testmod/java/net/fabricmc/fabric/test/transfer/ingame/ExtractStickItem.java @@ -30,8 +30,8 @@ import net.fabricmc.fabric.api.transfer.v1.transaction.Transaction; public class ExtractStickItem extends Item { - public ExtractStickItem() { - super(new Settings()); + public ExtractStickItem(Settings settings) { + super(settings); } @Override diff --git a/fabric-transfer-api-v1/src/testmod/java/net/fabricmc/fabric/test/transfer/ingame/TransferTestInitializer.java b/fabric-transfer-api-v1/src/testmod/java/net/fabricmc/fabric/test/transfer/ingame/TransferTestInitializer.java index c8bcc2fa10..cdcd9bf434 100644 --- a/fabric-transfer-api-v1/src/testmod/java/net/fabricmc/fabric/test/transfer/ingame/TransferTestInitializer.java +++ b/fabric-transfer-api-v1/src/testmod/java/net/fabricmc/fabric/test/transfer/ingame/TransferTestInitializer.java @@ -42,7 +42,8 @@ public class TransferTestInitializer implements ModInitializer { private static final Block INFINITE_LAVA_SOURCE = new Block(AbstractBlock.Settings.create().registryKey(INFINITE_LAVA_SOURCE_KEY)); private static final RegistryKey FLUID_CHUTE_KEY = block("fluid_chute"); private static final Block FLUID_CHUTE = new FluidChuteBlock(AbstractBlock.Settings.create().registryKey(FLUID_CHUTE_KEY)); - private static final Item EXTRACT_STICK = new ExtractStickItem(); + private static final RegistryKey EXTRACT_STICK_KEY = RegistryKey.of(RegistryKeys.ITEM, Identifier.of(MOD_ID, "extract_stick")); + private static final Item EXTRACT_STICK = new ExtractStickItem(new Item.Settings().registryKey(EXTRACT_STICK_KEY)); public static BlockEntityType FLUID_CHUTE_TYPE; @Override @@ -70,6 +71,6 @@ private static RegistryKey block(String name) { private static void registerBlock(RegistryKey key, Block block) { Registry.register(Registries.BLOCK, key, block); - Registry.register(Registries.ITEM, key.getValue(), new BlockItem(block, new Item.Settings())); + Registry.register(Registries.ITEM, key.getValue(), new BlockItem(block, new Item.Settings().registryKey(RegistryKey.of(RegistryKeys.ITEM, key.getValue())))); } } diff --git a/fabric-transitive-access-wideners-v1/src/main/resources/fabric-transitive-access-wideners-v1.accesswidener b/fabric-transitive-access-wideners-v1/src/main/resources/fabric-transitive-access-wideners-v1.accesswidener index 8d5d9e1d2a..1a9d7a7d51 100644 --- a/fabric-transitive-access-wideners-v1/src/main/resources/fabric-transitive-access-wideners-v1.accesswidener +++ b/fabric-transitive-access-wideners-v1/src/main/resources/fabric-transitive-access-wideners-v1.accesswidener @@ -234,7 +234,6 @@ transitive-accessible method net/minecraft/block/WallRedstoneTorchBlock ( transitive-accessible method net/minecraft/block/WallSkullBlock (Lnet/minecraft/block/SkullBlock$SkullType;Lnet/minecraft/block/AbstractBlock$Settings;)V transitive-accessible method net/minecraft/block/WallTorchBlock (Lnet/minecraft/particle/SimpleParticleType;Lnet/minecraft/block/AbstractBlock$Settings;)V transitive-accessible method net/minecraft/block/WallWitherSkullBlock (Lnet/minecraft/block/AbstractBlock$Settings;)V -transitive-accessible method net/minecraft/block/WearableCarvedPumpkinBlock (Lnet/minecraft/block/AbstractBlock$Settings;)V transitive-accessible method net/minecraft/block/WeightedPressurePlateBlock (ILnet/minecraft/block/BlockSetType;Lnet/minecraft/block/AbstractBlock$Settings;)V transitive-accessible method net/minecraft/block/WetSpongeBlock (Lnet/minecraft/block/AbstractBlock$Settings;)V transitive-accessible method net/minecraft/block/WitherSkullBlock (Lnet/minecraft/block/AbstractBlock$Settings;)V diff --git a/fabric-transitive-access-wideners-v1/src/main/resources/fabric.mod.json b/fabric-transitive-access-wideners-v1/src/main/resources/fabric.mod.json index 77c072e91f..6166aade11 100644 --- a/fabric-transitive-access-wideners-v1/src/main/resources/fabric.mod.json +++ b/fabric-transitive-access-wideners-v1/src/main/resources/fabric.mod.json @@ -16,7 +16,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3" + "fabricloader": ">=0.16.4" }, "description": "Contains transitive access wideners that provide access to otherwise inaccessible Minecraft code.", "accessWidener": "fabric-transitive-access-wideners-v1.accesswidener", diff --git a/fabric-transitive-access-wideners-v1/src/testmod/java/net/fabricmc/fabric/test/access/SignBlockEntityTest.java b/fabric-transitive-access-wideners-v1/src/testmod/java/net/fabricmc/fabric/test/access/SignBlockEntityTest.java index 3d8415f353..9c742d5179 100644 --- a/fabric-transitive-access-wideners-v1/src/testmod/java/net/fabricmc/fabric/test/access/SignBlockEntityTest.java +++ b/fabric-transitive-access-wideners-v1/src/testmod/java/net/fabricmc/fabric/test/access/SignBlockEntityTest.java @@ -54,13 +54,17 @@ public BlockEntity createBlockEntity(BlockPos pos, BlockState state) { return new TestSign(pos, state); } }; - public static final SignItem TEST_SIGN_ITEM = new SignItem(new Item.Settings(), TEST_SIGN, TEST_WALL_SIGN); + public static final SignItem TEST_SIGN_ITEM = new SignItem(TEST_SIGN, TEST_WALL_SIGN, new Item.Settings().registryKey(itemKey(TEST_SIGN_KEY))); public static final BlockEntityType TEST_SIGN_BLOCK_ENTITY = FabricBlockEntityTypeBuilder.create(TestSign::new, TEST_SIGN, TEST_WALL_SIGN).build(); private static RegistryKey keyOf(String id) { return RegistryKey.of(RegistryKeys.BLOCK, Identifier.of(MOD_ID, id)); } + private static RegistryKey itemKey(RegistryKey blockKey) { + return RegistryKey.of(RegistryKeys.ITEM, blockKey.getValue()); + } + @Override public void onInitialize() { Registry.register(Registries.BLOCK, TEST_SIGN_KEY, TEST_SIGN); diff --git a/gradle.properties b/gradle.properties index 17923c240d..810909a59d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,61 +2,61 @@ org.gradle.jvmargs=-Xmx2560M org.gradle.parallel=true fabric.loom.multiProjectOptimisation=true -version=0.103.1 -minecraft_version=24w35a +version=0.103.2 +minecraft_version=24w36a yarn_version=+build.4 -loader_version=0.16.3 +loader_version=0.16.4 installer_version=1.0.1 prerelease=true curseforge_minecraft_version=1.21.2-Snapshot # Do not manually update, use the bumpversions task: -fabric-api-base-version=0.4.44 -fabric-api-lookup-api-v1-version=1.6.72 -fabric-biome-api-v1-version=14.0.1 -fabric-block-api-v1-version=1.0.24 -fabric-block-view-api-v2-version=1.0.12 -fabric-blockrenderlayer-v1-version=1.1.54 -fabric-command-api-v1-version=1.2.51 -fabric-command-api-v2-version=2.2.30 -fabric-commands-v0-version=0.2.68 -fabric-content-registries-v0-version=9.0.3 -fabric-crash-report-info-v1-version=0.2.31 -fabric-data-attachment-api-v1-version=1.1.31 -fabric-data-generation-api-v1-version=21.0.3 -fabric-dimensions-v1-version=4.0.2 -fabric-entity-events-v1-version=1.7.1 -fabric-events-interaction-v0-version=2.0.2 -fabric-game-rule-api-v1-version=1.0.55 -fabric-gametest-api-v1-version=2.0.6 -fabric-item-api-v1-version=11.0.4 -fabric-item-group-api-v1-version=4.1.7 -fabric-key-binding-api-v1-version=1.0.49 -fabric-keybindings-v0-version=0.2.47 -fabric-lifecycle-events-v1-version=2.3.16 -fabric-loot-api-v2-version=3.0.16 -fabric-loot-api-v3-version=1.0.4 -fabric-message-api-v1-version=6.0.15 -fabric-model-loading-api-v1-version=3.0.2 -fabric-networking-api-v1-version=4.2.5 -fabric-object-builder-api-v1-version=17.0.0 -fabric-particles-v1-version=4.0.4 -fabric-recipe-api-v1-version=6.0.2 -fabric-registry-sync-v0-version=5.1.6 -fabric-renderer-api-v1-version=3.5.1 -fabric-renderer-indigo-version=1.8.1 -fabric-rendering-data-attachment-v1-version=0.3.50 -fabric-rendering-fluids-v1-version=3.1.8 -fabric-rendering-v0-version=1.1.74 -fabric-rendering-v1-version=6.0.1 -fabric-resource-conditions-api-v1-version=5.0.1 -fabric-resource-loader-v0-version=2.0.1 -fabric-screen-api-v1-version=2.0.27 -fabric-screen-handler-api-v1-version=1.3.90 -fabric-sound-api-v1-version=1.0.25 -fabric-transfer-api-v1-version=5.1.21 -fabric-transitive-access-wideners-v1-version=6.1.3 -fabric-convention-tags-v1-version=2.0.24 -fabric-convention-tags-v2-version=2.6.4 -fabric-client-tags-api-v1-version=1.1.17 +fabric-api-base-version=0.4.45 +fabric-api-lookup-api-v1-version=1.6.73 +fabric-biome-api-v1-version=14.0.2 +fabric-block-api-v1-version=1.0.25 +fabric-block-view-api-v2-version=1.0.13 +fabric-blockrenderlayer-v1-version=1.1.55 +fabric-command-api-v1-version=1.2.52 +fabric-command-api-v2-version=2.2.31 +fabric-commands-v0-version=0.2.69 +fabric-content-registries-v0-version=9.0.4 +fabric-crash-report-info-v1-version=0.2.32 +fabric-data-attachment-api-v1-version=1.1.32 +fabric-data-generation-api-v1-version=21.0.4 +fabric-dimensions-v1-version=4.0.3 +fabric-entity-events-v1-version=2.0.0 +fabric-events-interaction-v0-version=2.0.3 +fabric-game-rule-api-v1-version=1.0.56 +fabric-gametest-api-v1-version=2.0.7 +fabric-item-api-v1-version=11.0.5 +fabric-item-group-api-v1-version=4.1.8 +fabric-key-binding-api-v1-version=1.0.50 +fabric-keybindings-v0-version=0.2.48 +fabric-lifecycle-events-v1-version=2.3.17 +fabric-loot-api-v2-version=3.0.17 +fabric-loot-api-v3-version=1.0.5 +fabric-message-api-v1-version=6.0.16 +fabric-model-loading-api-v1-version=3.0.3 +fabric-networking-api-v1-version=4.2.6 +fabric-object-builder-api-v1-version=17.0.1 +fabric-particles-v1-version=4.0.5 +fabric-recipe-api-v1-version=6.0.3 +fabric-registry-sync-v0-version=5.1.7 +fabric-renderer-api-v1-version=3.5.2 +fabric-renderer-indigo-version=1.8.2 +fabric-rendering-data-attachment-v1-version=0.3.51 +fabric-rendering-fluids-v1-version=3.1.9 +fabric-rendering-v0-version=1.1.75 +fabric-rendering-v1-version=7.0.0 +fabric-resource-conditions-api-v1-version=5.0.2 +fabric-resource-loader-v0-version=2.0.2 +fabric-screen-api-v1-version=2.0.28 +fabric-screen-handler-api-v1-version=1.3.91 +fabric-sound-api-v1-version=1.0.26 +fabric-transfer-api-v1-version=5.1.22 +fabric-transitive-access-wideners-v1-version=6.1.4 +fabric-convention-tags-v1-version=2.0.25 +fabric-convention-tags-v2-version=2.6.5 +fabric-client-tags-api-v1-version=1.1.18 diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index fb3c3f7409..c7baeab900 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -19,7 +19,7 @@ "FabricMC" ], "depends": { - "fabricloader": ">=0.16.3", + "fabricloader": ">=0.16.4", "java": ">=21", "minecraft": ">=1.21.2- <1.21.3-" },