diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 614af7faf..8e342c36e 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -12,9 +12,9 @@ jobs:
     steps:
       - uses: actions/checkout@v1
       - uses: gradle/wrapper-validation-action@v1
-      - run: ./gradlew check build publishToMavenLocal --stacktrace --parallel
+      - run: ./gradlew check build publishToMavenLocal --stacktrace --parallel --warning-mode=fail
       - run: mkdir run && echo "eula=true" >> run/eula.txt
-      - run: ./gradlew runAutoTestServer --stacktrace
+      - run: ./gradlew runAutoTestServer --stacktrace --warning-mode=fail
       - uses: actions/upload-artifact@v2
         with:
           name: Artifacts
diff --git a/build.gradle b/build.gradle
index acb329f30..7442499ff 100644
--- a/build.gradle
+++ b/build.gradle
@@ -9,8 +9,8 @@ plugins {
 	id "eclipse"
 	id "idea"
 	id "maven-publish"
-	id "fabric-loom" version "0.8.12" apply false
-	id "org.cadixdev.licenser" version "0.5.0"
+	id "fabric-loom" version "0.9.50" apply false
+	id "org.cadixdev.licenser" version "0.6.1"
 	id "org.ajoberstar.grgit" version "3.1.0"
 	id "com.matthewprenger.cursegradle" version "1.4.0"
 	id "com.modrinth.minotaur" version "1.1.0"
@@ -21,8 +21,8 @@ def ENV = System.getenv()
 class Globals {
 	static def baseVersion = "0.39.2"
 	static def mcVersion = "1.17.1"
-	static def yarnVersion = "+build.1"
-	static def loaderVersion = "0.11.3"
+	static def yarnVersion = "+build.46"
+	static def loaderVersion = "0.11.6"
 	static def preRelease = false
 }
 
@@ -133,7 +133,7 @@ allprojects {
 	}
 
 	loom {
-		shareCaches = true
+		shareRemapCaches = true
 	}
 
 	repositories {
@@ -146,12 +146,12 @@ allprojects {
 
 	afterEvaluate {
 		remapJar {
-			input = file("${project.buildDir}/libs/$archivesBaseName-$version-dev.jar")
-			archiveName = "${archivesBaseName}-${version}.jar"
+			input = file("${project.buildDir}/libs/$archivesBaseName-${project.version}-dev.jar")
+			archiveFileName = "${archivesBaseName}-${project.version}.jar"
 		}
 
 		artifacts {
-			dev file: file("${project.buildDir}/libs/$archivesBaseName-$version-dev.jar"), type: "jar", builtBy: jar
+			dev file: file("${project.buildDir}/libs/$archivesBaseName-${project.version}-dev.jar"), type: "jar", builtBy: jar
 		}
 
 		processResources {
@@ -239,20 +239,12 @@ subprojects {
 		testmodImplementation sourceSets.main.output
 	}
 
-	task remapMavenJar(type: Copy, dependsOn: remapJar) {
-		afterEvaluate {
-			from("${project.buildDir}/libs/$archivesBaseName-${version}.jar")
-			into("${project.buildDir}/libs/")
-			rename { String fn -> "$archivesBaseName-${version}-maven.jar" }
-		}
-	}
-
 	publishing {
 		publications {
 			mavenJava(MavenPublication) {
 				afterEvaluate {
-					artifact(file("${project.buildDir}/libs/$archivesBaseName-${version}-maven.jar")) {
-						builtBy remapMavenJar
+					artifact(remapJar) {
+						builtBy remapJar
 					}
 
 					artifact(sourcesJar) {
@@ -269,17 +261,16 @@ subprojects {
 }
 
 task remapMavenJar(type: net.fabricmc.loom.task.RemapJarTask, dependsOn: jar) {
-	afterEvaluate {
-		input = file("${project.buildDir}/libs/${archivesBaseName}-${version}-dev.jar")
-		archiveName = "${archivesBaseName}-${version}-maven.jar"
-		addNestedDependencies = false
-	}
+	input = jar.archiveFile
+	archiveFileName = "${archivesBaseName}-${project.version}-maven.jar"
+	addNestedDependencies = false
 }
+build.dependsOn remapMavenJar
 
 publishing {
 	publications {
 		mavenJava(MavenPublication) {
-			artifact(file("${project.buildDir}/libs/$archivesBaseName-${version}-maven.jar")) {
+			artifact(remapMavenJar) {
 				builtBy remapMavenJar
 			}
 
diff --git a/fabric-api-lookup-api-v1/src/testmod/java/net/fabricmc/fabric/test/lookup/compat/ItemStackUtil.java b/fabric-api-lookup-api-v1/src/testmod/java/net/fabricmc/fabric/test/lookup/compat/ItemStackUtil.java
index 426ce3e40..17eefaa41 100644
--- a/fabric-api-lookup-api-v1/src/testmod/java/net/fabricmc/fabric/test/lookup/compat/ItemStackUtil.java
+++ b/fabric-api-lookup-api-v1/src/testmod/java/net/fabricmc/fabric/test/lookup/compat/ItemStackUtil.java
@@ -20,7 +20,7 @@ import net.minecraft.item.ItemStack;
 
 final class ItemStackUtil {
 	public static boolean areEqualIgnoreCount(ItemStack s1, ItemStack s2) {
-		return s1.getItem() == s2.getItem() && ItemStack.areTagsEqual(s1, s2);
+		return s1.getItem() == s2.getItem() && ItemStack.areNbtEqual(s1, s2);
 	}
 
 	private ItemStackUtil() {
diff --git a/fabric-biome-api-v1/build.gradle b/fabric-biome-api-v1/build.gradle
index a9eeec2eb..bceb054a4 100644
--- a/fabric-biome-api-v1/build.gradle
+++ b/fabric-biome-api-v1/build.gradle
@@ -1,8 +1,8 @@
 archivesBaseName = "fabric-biome-api-v1"
 version = getSubprojectVersion(project, "3.2.0")
 
-minecraft {
-    accessWidener = file("src/main/resources/fabric-biome-api-v1.accesswidener")
+loom {
+    accessWidenerPath = file("src/main/resources/fabric-biome-api-v1.accesswidener")
 }
 
 dependencies {
diff --git a/fabric-containers-v0/src/main/java/net/fabricmc/fabric/impl/client/container/ScreenProviderRegistryImpl.java b/fabric-containers-v0/src/main/java/net/fabricmc/fabric/impl/client/container/ScreenProviderRegistryImpl.java
index 4d2495be7..862e4907c 100644
--- a/fabric-containers-v0/src/main/java/net/fabricmc/fabric/impl/client/container/ScreenProviderRegistryImpl.java
+++ b/fabric-containers-v0/src/main/java/net/fabricmc/fabric/impl/client/container/ScreenProviderRegistryImpl.java
@@ -87,7 +87,7 @@ public class ScreenProviderRegistryImpl implements ScreenProviderRegistry {
 					HandledScreen<?> gui = factory.create(syncId, identifier, player, buf);
 
 					player.currentScreenHandler = gui.getScreenHandler();
-					client.openScreen(gui);
+					client.setScreen(gui);
 				} finally {
 					buf.release();
 				}
diff --git a/fabric-content-registries-v0/build.gradle b/fabric-content-registries-v0/build.gradle
index 4629bc4fe..8b8a0007d 100644
--- a/fabric-content-registries-v0/build.gradle
+++ b/fabric-content-registries-v0/build.gradle
@@ -2,7 +2,7 @@ archivesBaseName = "fabric-content-registries-v0"
 version = getSubprojectVersion(project, "0.3.0")
 
 loom {
-	accessWidener = file("src/main/resources/fabric-content-registries-v0.accesswidener")
+	accessWidenerPath = file("src/main/resources/fabric-content-registries-v0.accesswidener")
 }
 
 moduleDependencies(project, [
diff --git a/fabric-content-registries-v0/src/main/java/net/fabricmc/fabric/api/registry/TillableBlockRegistry.java b/fabric-content-registries-v0/src/main/java/net/fabricmc/fabric/api/registry/TillableBlockRegistry.java
index 037205e9b..9c58061c9 100644
--- a/fabric-content-registries-v0/src/main/java/net/fabricmc/fabric/api/registry/TillableBlockRegistry.java
+++ b/fabric-content-registries-v0/src/main/java/net/fabricmc/fabric/api/registry/TillableBlockRegistry.java
@@ -44,9 +44,9 @@ public final class TillableBlockRegistry {
 	 * a block. If the predicate returns {@code true}, an action is executed. Default instances of these can be created
 	 * with these {@link HoeItem} methods:
 	 * <ul>
-	 * <li>usage predicate for farmland-like behavior: {@link HoeItem#usagePredicate(ItemUsageContext)}</li>
-	 * <li>simple action: {@link HoeItem#getTillingConsumer(BlockState)}</li>
-	 * <li>simple action that also drops an item: {@link HoeItem#getTillingConsumer(BlockState, ItemConvertible)}</li>
+	 * <li>usage predicate for farmland-like behavior: {@link HoeItem#canTillFarmland(ItemUsageContext)}</li>
+	 * <li>simple action: {@link HoeItem#createTillAction(BlockState)} (BlockState)}</li>
+	 * <li>simple action that also drops an item: {@link HoeItem#createTillAndDropAction(BlockState, ItemConvertible)}</li>
 	 * </ul>
 	 *
 	 * @param input          the input block that can be tilled
@@ -55,7 +55,7 @@ public final class TillableBlockRegistry {
 	 */
 	public static void register(Block input, Predicate<ItemUsageContext> usagePredicate, Consumer<ItemUsageContext> tillingAction) {
 		Objects.requireNonNull(input, "input block cannot be null");
-		HoeItemAccessor.getTilledBlocks().put(input, Pair.of(usagePredicate, tillingAction));
+		HoeItemAccessor.getTillingActions().put(input, Pair.of(usagePredicate, tillingAction));
 	}
 
 	/**
@@ -67,7 +67,7 @@ public final class TillableBlockRegistry {
 	 */
 	public static void register(Block input, Predicate<ItemUsageContext> usagePredicate, BlockState tilled) {
 		Objects.requireNonNull(tilled, "tilled block state cannot be null");
-		register(input, usagePredicate, HoeItem.getTillingConsumer(tilled));
+		register(input, usagePredicate, HoeItem.createTillAction(tilled));
 	}
 
 	/**
@@ -81,6 +81,6 @@ public final class TillableBlockRegistry {
 	public static void register(Block input, Predicate<ItemUsageContext> usagePredicate, BlockState tilled, ItemConvertible droppedItem) {
 		Objects.requireNonNull(tilled, "tilled block state cannot be null");
 		Objects.requireNonNull(droppedItem, "dropped item cannot be null");
-		register(input, usagePredicate, HoeItem.getTillingConsumer(tilled, droppedItem));
+		register(input, usagePredicate, HoeItem.createTillAndDropAction(tilled, droppedItem));
 	}
 }
diff --git a/fabric-content-registries-v0/src/main/java/net/fabricmc/fabric/mixin/content/registry/HoeItemAccessor.java b/fabric-content-registries-v0/src/main/java/net/fabricmc/fabric/mixin/content/registry/HoeItemAccessor.java
index 9d35665f6..1a970a98b 100644
--- a/fabric-content-registries-v0/src/main/java/net/fabricmc/fabric/mixin/content/registry/HoeItemAccessor.java
+++ b/fabric-content-registries-v0/src/main/java/net/fabricmc/fabric/mixin/content/registry/HoeItemAccessor.java
@@ -30,8 +30,8 @@ import net.minecraft.item.ItemUsageContext;
 
 @Mixin(HoeItem.class)
 public interface HoeItemAccessor {
-	@Accessor("TILLED_BLOCKS")
-	static Map<Block, Pair<Predicate<ItemUsageContext>, Consumer<ItemUsageContext>>> getTilledBlocks() {
+	@Accessor("TILLING_ACTIONS")
+	static Map<Block, Pair<Predicate<ItemUsageContext>, Consumer<ItemUsageContext>>> getTillingActions() {
 		throw new AssertionError("Untransformed @Accessor");
 	}
 }
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 7ea7be8d2..c40a39791 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
@@ -44,6 +44,6 @@ public final class ContentRegistryTest implements ModInitializer {
 			// expected behavior
 		}
 
-		TillableBlockRegistry.register(Blocks.GREEN_WOOL, context -> true, HoeItem.getTillingConsumer(Blocks.LIME_WOOL.getDefaultState()));
+		TillableBlockRegistry.register(Blocks.GREEN_WOOL, context -> true, HoeItem.createTillAction(Blocks.LIME_WOOL.getDefaultState()));
 	}
 }
diff --git a/fabric-game-rule-api-v1/build.gradle b/fabric-game-rule-api-v1/build.gradle
index 745294f0e..60c32acfa 100644
--- a/fabric-game-rule-api-v1/build.gradle
+++ b/fabric-game-rule-api-v1/build.gradle
@@ -1,8 +1,8 @@
 archivesBaseName = "fabric-game-rule-api-v1"
 version = getSubprojectVersion(project, "1.0.7")
 
-minecraft {
-	accessWidener = file("src/main/resources/fabric-game-rule-api-v1.accesswidener")
+loom {
+	accessWidenerPath = file("src/main/resources/fabric-game-rule-api-v1.accesswidener")
 }
 
 dependencies {
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 17030e2c7..d7d83f4dd 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
@@ -39,7 +39,7 @@ public class CustomDamageTest implements ModInitializer {
 		if (entity.isSneaking()) {
 			return amount;
 		} else {
-			NbtCompound tag = stack.getOrCreateTag();
+			NbtCompound tag = stack.getOrCreateNbt();
 			tag.putInt("weird", tag.getInt("weird") + 1);
 			return 0;
 		}
@@ -52,7 +52,7 @@ public class CustomDamageTest implements ModInitializer {
 
 		@Override
 		public Text getName(ItemStack stack) {
-			int v = stack.getOrCreateTag().getInt("weird");
+			int v = stack.getOrCreateNbt().getInt("weird");
 			return super.getName(stack).shallowCopy().append(" (Weird Value: " + v + ")");
 		}
 	}
diff --git a/fabric-key-binding-api-v1/src/main/java/net/fabricmc/fabric/mixin/client/keybinding/KeyBindingAccessor.java b/fabric-key-binding-api-v1/src/main/java/net/fabricmc/fabric/mixin/client/keybinding/KeyBindingAccessor.java
index 90ac99cf8..a2e43f929 100644
--- a/fabric-key-binding-api-v1/src/main/java/net/fabricmc/fabric/mixin/client/keybinding/KeyBindingAccessor.java
+++ b/fabric-key-binding-api-v1/src/main/java/net/fabricmc/fabric/mixin/client/keybinding/KeyBindingAccessor.java
@@ -25,7 +25,7 @@ import net.minecraft.client.option.KeyBinding;
 
 @Mixin(KeyBinding.class)
 public interface KeyBindingAccessor {
-	@Accessor("categoryOrderMap")
+	@Accessor("CATEGORY_ORDER_MAP")
 	static Map<String, Integer> fabric_getCategoryMap() {
 		throw new AssertionError();
 	}
diff --git a/fabric-networking-api-v1/src/testmod/java/net/fabricmc/fabric/test/networking/channeltest/NetworkingChannelClientTest.java b/fabric-networking-api-v1/src/testmod/java/net/fabricmc/fabric/test/networking/channeltest/NetworkingChannelClientTest.java
index c49c7d286..86b1974c8 100644
--- a/fabric-networking-api-v1/src/testmod/java/net/fabricmc/fabric/test/networking/channeltest/NetworkingChannelClientTest.java
+++ b/fabric-networking-api-v1/src/testmod/java/net/fabricmc/fabric/test/networking/channeltest/NetworkingChannelClientTest.java
@@ -42,7 +42,7 @@ public final class NetworkingChannelClientTest implements ClientModInitializer {
 		ClientTickEvents.END_CLIENT_TICK.register(client -> {
 			if (client.player != null) {
 				if (OPEN.wasPressed()) {
-					client.openScreen(new ChannelScreen(this));
+					client.setScreen(new ChannelScreen(this));
 				}
 			}
 		});
diff --git a/fabric-object-builder-api-v1/build.gradle b/fabric-object-builder-api-v1/build.gradle
index 950e4b674..75618ae7e 100644
--- a/fabric-object-builder-api-v1/build.gradle
+++ b/fabric-object-builder-api-v1/build.gradle
@@ -12,6 +12,6 @@ moduleDependencies(project, [
 		'fabric-tool-attribute-api-v1'
 ])
 
-minecraft {
-	accessWidener = file("src/main/resources/fabric-object-builder-api-v1.accesswidener")
+loom {
+	accessWidenerPath = file("src/main/resources/fabric-object-builder-api-v1.accesswidener")
 }
diff --git a/fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/api/renderer/v1/model/ForwardingBakedModel.java b/fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/api/renderer/v1/model/ForwardingBakedModel.java
index 94e58d4f0..bc2df6e74 100644
--- a/fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/api/renderer/v1/model/ForwardingBakedModel.java
+++ b/fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/api/renderer/v1/model/ForwardingBakedModel.java
@@ -77,8 +77,8 @@ public abstract class ForwardingBakedModel implements BakedModel, FabricBakedMod
 	}
 
 	@Override
-	public Sprite getSprite() {
-		return wrapped.getSprite();
+	public Sprite getParticleSprite() {
+		return wrapped.getParticleSprite();
 	}
 
 	@Override
diff --git a/fabric-renderer-api-v1/src/testmod/java/net/fabricmc/fabric/test/renderer/simple/client/FrameBakedModel.java b/fabric-renderer-api-v1/src/testmod/java/net/fabricmc/fabric/test/renderer/simple/client/FrameBakedModel.java
index cd7ca0b78..1b994d15a 100644
--- a/fabric-renderer-api-v1/src/testmod/java/net/fabricmc/fabric/test/renderer/simple/client/FrameBakedModel.java
+++ b/fabric-renderer-api-v1/src/testmod/java/net/fabricmc/fabric/test/renderer/simple/client/FrameBakedModel.java
@@ -78,7 +78,7 @@ final class FrameBakedModel implements BakedModel, FabricBakedModel {
 	}
 
 	@Override
-	public Sprite getSprite() {
+	public Sprite getParticleSprite() {
 		return this.frameSprite;
 	}
 
@@ -112,7 +112,7 @@ final class FrameBakedModel implements BakedModel, FabricBakedModel {
 			return; // No inner block to render
 		}
 
-		Sprite sprite = MinecraftClient.getInstance().getBlockRenderManager().getModels().getModelManager().getBlockModels().getSprite(data.getDefaultState());
+		Sprite sprite = MinecraftClient.getInstance().getBlockRenderManager().getModels().getModelManager().getBlockModels().getModelParticleSprite(data.getDefaultState());
 		QuadEmitter emitter = context.getEmitter();
 
 		// We can emit our quads outside of the mesh as the block being put in the frame is very much dynamic.
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/ItemRenderContext.java b/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/ItemRenderContext.java
index ed02abb19..6b26f94e7 100644
--- a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/ItemRenderContext.java
+++ b/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/ItemRenderContext.java
@@ -168,7 +168,7 @@ public class ItemRenderContext extends AbstractRenderContext implements RenderCo
 
 	private int indexColor() {
 		final int colorIndex = editorQuad.colorIndex();
-		return colorIndex == -1 ? -1 : (colorMap.getColorMultiplier(itemStack, colorIndex) | 0xFF000000);
+		return colorIndex == -1 ? -1 : (colorMap.getColor(itemStack, colorIndex) | 0xFF000000);
 	}
 
 	private void renderQuad() {
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/mixin/client/indigo/renderer/MixinItemRenderer.java b/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/mixin/client/indigo/renderer/MixinItemRenderer.java
index fa588800d..2bbb314bb 100644
--- a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/mixin/client/indigo/renderer/MixinItemRenderer.java
+++ b/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/mixin/client/indigo/renderer/MixinItemRenderer.java
@@ -43,11 +43,11 @@ public abstract class MixinItemRenderer implements AccessItemRenderer {
 	protected abstract void renderBakedItemModel(BakedModel model, ItemStack stack, int light, int overlay, MatrixStack matrixStack, VertexConsumer buffer);
 
 	@Shadow
-	protected ItemColors colorMap;
+	protected ItemColors colors;
 
 	private final VanillaQuadHandler vanillaHandler = new IndigoQuadHandler(this);
 
-	private final ThreadLocal<ItemRenderContext> CONTEXTS = ThreadLocal.withInitial(() -> new ItemRenderContext(colorMap));
+	private final ThreadLocal<ItemRenderContext> CONTEXTS = ThreadLocal.withInitial(() -> new ItemRenderContext(colors));
 
 	@Inject(at = @At("HEAD"), method = "renderItem(Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/render/model/json/ModelTransformation$Mode;ZLnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;IILnet/minecraft/client/render/model/BakedModel;)V", cancellable = true)
 	public void hook_method_23179(ItemStack stack, ModelTransformation.Mode transformMode, boolean invert, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int light, int overlay, BakedModel model, CallbackInfo ci) {
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/MixinEntityRenderers.java b/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/MixinEntityRenderers.java
index 4d9bf9539..5f382676e 100644
--- a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/MixinEntityRenderers.java
+++ b/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/MixinEntityRenderers.java
@@ -44,12 +44,12 @@ import net.fabricmc.fabric.impl.client.rendering.RegistrationHelperImpl;
 public abstract class MixinEntityRenderers {
 	@Shadow()
 	@Final
-	private static Map<EntityType<?>, EntityRendererFactory<?>> rendererFactories;
+	private static Map<EntityType<?>, EntityRendererFactory<?>> RENDERER_FACTORIES;
 
 	@SuppressWarnings({"unchecked", "rawtypes"})
 	@Inject(method = "<clinit>*", at = @At(value = "RETURN"))
 	private static void onRegisterRenderers(CallbackInfo info) {
-		EntityRendererRegistryImpl.setup(((t, factory) -> rendererFactories.put(t, factory)));
+		EntityRendererRegistryImpl.setup(((t, factory) -> RENDERER_FACTORIES.put(t, factory)));
 	}
 
 	// synthetic lambda in reloadEntityRenderers
diff --git a/fabric-screen-api-v1/src/main/java/net/fabricmc/fabric/mixin/screen/MinecraftClientMixin.java b/fabric-screen-api-v1/src/main/java/net/fabricmc/fabric/mixin/screen/MinecraftClientMixin.java
index e4ade04e9..26533fabc 100644
--- a/fabric-screen-api-v1/src/main/java/net/fabricmc/fabric/mixin/screen/MinecraftClientMixin.java
+++ b/fabric-screen-api-v1/src/main/java/net/fabricmc/fabric/mixin/screen/MinecraftClientMixin.java
@@ -37,7 +37,7 @@ abstract class MinecraftClientMixin {
 	@Unique
 	private Screen tickingScreen;
 
-	@Inject(method = "openScreen", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/Screen;removed()V", shift = At.Shift.AFTER))
+	@Inject(method = "setScreen", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/Screen;removed()V", shift = At.Shift.AFTER))
 	private void onScreenRemove(@Nullable Screen screen, CallbackInfo ci) {
 		ScreenEvents.remove(this.currentScreen).invoker().onRemove(this.currentScreen);
 	}
diff --git a/fabric-screen-handler-api-v1/build.gradle b/fabric-screen-handler-api-v1/build.gradle
index 6d187f3a2..3105b5c03 100644
--- a/fabric-screen-handler-api-v1/build.gradle
+++ b/fabric-screen-handler-api-v1/build.gradle
@@ -1,8 +1,8 @@
 archivesBaseName = "fabric-screen-handler-api-v1"
 version = getSubprojectVersion(project, "1.1.8")
 
-minecraft {
-	accessWidener = file('src/main/resources/fabric-screen-handler-api-v1.accesswidener')
+loom {
+	accessWidenerPath = file('src/main/resources/fabric-screen-handler-api-v1.accesswidener')
 }
 
 dependencies {
diff --git a/fabric-screen-handler-api-v1/src/main/java/net/fabricmc/fabric/impl/screenhandler/client/ClientNetworking.java b/fabric-screen-handler-api-v1/src/main/java/net/fabricmc/fabric/impl/screenhandler/client/ClientNetworking.java
index a0f500df3..e49b8747c 100644
--- a/fabric-screen-handler-api-v1/src/main/java/net/fabricmc/fabric/impl/screenhandler/client/ClientNetworking.java
+++ b/fabric-screen-handler-api-v1/src/main/java/net/fabricmc/fabric/impl/screenhandler/client/ClientNetworking.java
@@ -83,7 +83,7 @@ public final class ClientNetworking implements ClientModInitializer {
 				);
 
 				player.currentScreenHandler = ((ScreenHandlerProvider<?>) screen).getScreenHandler();
-				client.openScreen(screen);
+				client.setScreen(screen);
 			} else {
 				LOGGER.warn("Screen not registered for screen handler {}!", typeId);
 			}
diff --git a/fabric-screen-handler-api-v1/src/testmod/java/net/fabricmc/fabric/test/screenhandler/item/BagInventory.java b/fabric-screen-handler-api-v1/src/testmod/java/net/fabricmc/fabric/test/screenhandler/item/BagInventory.java
index 6c5c99d1a..f43efeabc 100644
--- a/fabric-screen-handler-api-v1/src/testmod/java/net/fabricmc/fabric/test/screenhandler/item/BagInventory.java
+++ b/fabric-screen-handler-api-v1/src/testmod/java/net/fabricmc/fabric/test/screenhandler/item/BagInventory.java
@@ -27,7 +27,7 @@ final class BagInventory implements ImplementedInventory {
 
 	BagInventory(ItemStack stack) {
 		this.stack = stack;
-		NbtCompound tag = stack.getSubTag("Items");
+		NbtCompound tag = stack.getSubNbt("Items");
 
 		if (tag != null) {
 			Inventories.readNbt(tag, items);
@@ -41,7 +41,7 @@ final class BagInventory implements ImplementedInventory {
 
 	@Override
 	public void markDirty() {
-		NbtCompound tag = stack.getOrCreateSubTag("Items");
+		NbtCompound tag = stack.getOrCreateSubNbt("Items");
 		Inventories.writeNbt(tag, items);
 	}
 }
diff --git a/fabric-transfer-api-v1/src/main/java/net/fabricmc/fabric/api/transfer/v1/fluid/FluidStorage.java b/fabric-transfer-api-v1/src/main/java/net/fabricmc/fabric/api/transfer/v1/fluid/FluidStorage.java
index 32b8e022c..11d85697a 100644
--- a/fabric-transfer-api-v1/src/main/java/net/fabricmc/fabric/api/transfer/v1/fluid/FluidStorage.java
+++ b/fabric-transfer-api-v1/src/main/java/net/fabricmc/fabric/api/transfer/v1/fluid/FluidStorage.java
@@ -154,7 +154,7 @@ public final class FluidStorage {
 			return new EmptyItemFluidStorage(context, emptyBottle -> {
 				ItemStack newStack = emptyBottle.toStack();
 				PotionUtil.setPotion(newStack, Potions.WATER);
-				return ItemVariant.of(Items.POTION, newStack.getTag());
+				return ItemVariant.of(Items.POTION, newStack.getNbt());
 			}, Fluids.WATER, FluidConstants.BOTTLE);
 		});
 		// Register water potion storage
diff --git a/fabric-transfer-api-v1/src/main/java/net/fabricmc/fabric/api/transfer/v1/item/ItemVariant.java b/fabric-transfer-api-v1/src/main/java/net/fabricmc/fabric/api/transfer/v1/item/ItemVariant.java
index e7c29f2b0..ba615992c 100644
--- a/fabric-transfer-api-v1/src/main/java/net/fabricmc/fabric/api/transfer/v1/item/ItemVariant.java
+++ b/fabric-transfer-api-v1/src/main/java/net/fabricmc/fabric/api/transfer/v1/item/ItemVariant.java
@@ -52,7 +52,7 @@ public interface ItemVariant extends TransferVariant<Item> {
 	 * Retrieve an ItemVariant with the item and tag of a stack.
 	 */
 	static ItemVariant of(ItemStack stack) {
-		return of(stack.getItem(), stack.getTag());
+		return of(stack.getItem(), stack.getNbt());
 	}
 
 	/**
@@ -73,7 +73,7 @@ public interface ItemVariant extends TransferVariant<Item> {
 	 * Return true if the item and tag of this variant match those of the passed stack, and false otherwise.
 	 */
 	default boolean matches(ItemStack stack) {
-		return isOf(stack.getItem()) && nbtMatches(stack.getTag());
+		return isOf(stack.getItem()) && nbtMatches(stack.getNbt());
 	}
 
 	/**
@@ -98,7 +98,7 @@ public interface ItemVariant extends TransferVariant<Item> {
 	default ItemStack toStack(int count) {
 		if (isBlank()) return ItemStack.EMPTY;
 		ItemStack stack = new ItemStack(getItem(), count);
-		stack.setTag(copyNbt());
+		stack.setNbt(copyNbt());
 		return stack;
 	}
 
diff --git a/fabric-transfer-api-v1/src/main/java/net/fabricmc/fabric/impl/transfer/fluid/WaterPotionStorage.java b/fabric-transfer-api-v1/src/main/java/net/fabricmc/fabric/impl/transfer/fluid/WaterPotionStorage.java
index 566fb7a66..db498ff63 100644
--- a/fabric-transfer-api-v1/src/main/java/net/fabricmc/fabric/impl/transfer/fluid/WaterPotionStorage.java
+++ b/fabric-transfer-api-v1/src/main/java/net/fabricmc/fabric/impl/transfer/fluid/WaterPotionStorage.java
@@ -64,7 +64,7 @@ public class WaterPotionStorage implements ExtractionOnlyStorage<FluidVariant>,
 	private ItemVariant mapToGlassBottle() {
 		ItemStack newStack = context.getItemVariant().toStack();
 		PotionUtil.setPotion(newStack, Potions.EMPTY);
-		return ItemVariant.of(Items.GLASS_BOTTLE, newStack.getTag());
+		return ItemVariant.of(Items.GLASS_BOTTLE, newStack.getNbt());
 	}
 
 	@Override
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index e5338d370..ffed3a254 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.1-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists