diff --git a/build.gradle b/build.gradle
index 8f13b9bfb..42d734172 100644
--- a/build.gradle
+++ b/build.gradle
@@ -9,7 +9,7 @@ plugins {
 	id "eclipse"
 	id "idea"
 	id "maven-publish"
-	id "fabric-loom" version "0.12.27" apply false
+	id "fabric-loom" version "0.12.38" apply false
 	id "com.diffplug.spotless" version "6.5.1"
 	id "org.ajoberstar.grgit" version "3.1.0"
 	id "com.matthewprenger.cursegradle" version "1.4.0"
@@ -63,10 +63,16 @@ def getBranch() {
 
 def moduleDependencies(project, List<String> depNames) {
 	def deps = depNames.iterator().collect { project.dependencies.project(path: ":$it", configuration: 'namedElements') }
+	def clientOutputs = depNames.iterator().collect { findProject(":$it").sourceSets.client.output }
+
 	project.dependencies {
 		deps.each {
 			api it
 		}
+
+		clientOutputs.each {
+			clientImplementation it
+		}
 	}
 
 	// As we manually handle the maven artifacts, we need to also manually specify the deps.
@@ -88,6 +94,21 @@ def moduleDependencies(project, List<String> depNames) {
 	}
 }
 
+def testDependencies(project, List<String> depNames) {
+	def deps = depNames.iterator().collect { project.dependencies.project(path: ":$it", configuration: 'namedElements') }
+	def clientOutputs = depNames.iterator().collect { findProject(":$it").sourceSets.client.output }
+
+	project.dependencies {
+		deps.each {
+			testmodImplementation it
+		}
+
+		clientOutputs.each {
+			testmodImplementation it
+		}
+	}
+}
+
 allprojects {
 	group = "net.fabricmc.fabric-api"
 
@@ -126,10 +147,22 @@ allprojects {
 		it.options.release = 17
 	}
 
+	java {
+		// Must be added before the split source sets are setup.
+		withSourcesJar()
+	}
+
+	loom {
+		splitEnvironmentSourceSets()
+	}
+
 	sourceSets {
 		testmod {
 			compileClasspath += main.compileClasspath
 			runtimeClasspath += main.runtimeClasspath
+
+			compileClasspath += client.compileClasspath
+			runtimeClasspath += client.runtimeClasspath
 		}
 	}
 
@@ -152,10 +185,26 @@ allprojects {
 		}
 	}
 
+	allprojects.each { p ->
+		if (project.name == "deprecated") return
+
+		loom.mods.register(p.name) {
+			sourceSet p.sourceSets.main
+			sourceSet p.sourceSets.client
+		}
+
+		loom.mods.register(p.name + "-testmod") {
+			sourceSet p.sourceSets.testmod
+		}
+	}
+
 	dependencies {
 		minecraft "com.mojang:minecraft:$rootProject.minecraft_version"
 		mappings "net.fabricmc:yarn:${rootProject.minecraft_version}${project.yarn_version}:v2"
 		modApi "net.fabricmc:fabric-loader:${project.loader_version}"
+
+		testmodImplementation sourceSets.main.output
+		testmodImplementation sourceSets.client.output
 	}
 
 	loom {
@@ -176,10 +225,6 @@ allprojects {
 		}
 	}
 
-	java {
-		withSourcesJar()
-	}
-
 	checkstyle {
 		configFile = rootProject.file("checkstyle.xml")
 		toolVersion = "9.1"
@@ -200,6 +245,19 @@ allprojects {
 	task generateResources {
 		group = "fabric"
 	}
+
+	task testmodJar(type: Jar) {
+		from sourceSets.testmod.output
+		destinationDirectory = new File(project.buildDir, "devlibs")
+		archiveClassifier = "testmod"
+	}
+
+	task remapTestmodJar(type: net.fabricmc.loom.task.RemapJarTask, dependsOn: testmodJar) {
+		input = testmodJar.archiveFile
+		archiveClassifier = "testmod"
+		addNestedDependencies = false
+	}
+	build.dependsOn remapTestmodJar
 }
 
 // Apply auxiliary buildscripts to submodules
@@ -226,10 +284,13 @@ javadoc {
 	}
 
 	allprojects.each {
+		if (it.name == "deprecated") return
+
 		source(it.sourceSets.main.allJava.srcDirs)
+		source(it.sourceSets.client.allJava.srcDirs)
 	}
 
-	classpath = sourceSets.main.compileClasspath
+	classpath = files(sourceSets.main.compileClasspath, sourceSets.client.compileClasspath)
 	include("**/api/**")
 	failOnError false
 }
@@ -305,9 +366,12 @@ subprojects {
 
 	afterEvaluate {
 		// Disable the gen sources task on sub projects
-		genSourcesWithFernFlower.enabled = false
-		genSourcesWithCfr.enabled = false
-		unpickJar.enabled = false
+		genClientOnlySourcesWithFernFlower.enabled = false
+		genClientOnlySourcesWithCfr.enabled = false
+		genCommonSourcesWithCfr.enabled = false
+		genCommonSourcesWithFernFlower.enabled = false
+		unpickClientOnlyJar.enabled = false
+		unpickCommonJar.enabled = false
 	}
 }
 
@@ -395,6 +459,7 @@ dependencies {
 			if (it.name == "deprecated") return
 
 			api project(path: "${it.path}", configuration: "namedElements")
+			clientImplementation project("${it.path}:").sourceSets.client.output
 
 			testmodImplementation project("${it.path}:").sourceSets.testmod.output
 		}
diff --git a/deprecated/fabric-containers-v0/src/main/java/net/fabricmc/fabric/api/client/screen/ContainerScreenFactory.java b/deprecated/fabric-containers-v0/src/client/java/net/fabricmc/fabric/api/client/screen/ContainerScreenFactory.java
similarity index 100%
rename from deprecated/fabric-containers-v0/src/main/java/net/fabricmc/fabric/api/client/screen/ContainerScreenFactory.java
rename to deprecated/fabric-containers-v0/src/client/java/net/fabricmc/fabric/api/client/screen/ContainerScreenFactory.java
diff --git a/deprecated/fabric-containers-v0/src/main/java/net/fabricmc/fabric/api/client/screen/ScreenProviderRegistry.java b/deprecated/fabric-containers-v0/src/client/java/net/fabricmc/fabric/api/client/screen/ScreenProviderRegistry.java
similarity index 100%
rename from deprecated/fabric-containers-v0/src/main/java/net/fabricmc/fabric/api/client/screen/ScreenProviderRegistry.java
rename to deprecated/fabric-containers-v0/src/client/java/net/fabricmc/fabric/api/client/screen/ScreenProviderRegistry.java
diff --git a/deprecated/fabric-containers-v0/src/main/java/net/fabricmc/fabric/impl/client/container/ScreenProviderRegistryImpl.java b/deprecated/fabric-containers-v0/src/client/java/net/fabricmc/fabric/impl/client/container/ScreenProviderRegistryImpl.java
similarity index 100%
rename from deprecated/fabric-containers-v0/src/main/java/net/fabricmc/fabric/impl/client/container/ScreenProviderRegistryImpl.java
rename to deprecated/fabric-containers-v0/src/client/java/net/fabricmc/fabric/impl/client/container/ScreenProviderRegistryImpl.java
diff --git a/deprecated/fabric-containers-v0/src/main/java/net/fabricmc/fabric/api/container/ContainerProviderRegistry.java b/deprecated/fabric-containers-v0/src/main/java/net/fabricmc/fabric/api/container/ContainerProviderRegistry.java
index a7653d164..2f804cc51 100644
--- a/deprecated/fabric-containers-v0/src/main/java/net/fabricmc/fabric/api/container/ContainerProviderRegistry.java
+++ b/deprecated/fabric-containers-v0/src/main/java/net/fabricmc/fabric/api/container/ContainerProviderRegistry.java
@@ -24,7 +24,6 @@ import net.minecraft.server.network.ServerPlayerEntity;
 import net.minecraft.util.Identifier;
 import net.minecraft.network.PacketByteBuf;
 
-import net.fabricmc.fabric.api.client.screen.ScreenProviderRegistry;
 import net.fabricmc.fabric.impl.container.ContainerProviderImpl;
 
 /**
@@ -37,7 +36,7 @@ public interface ContainerProviderRegistry {
 	/**
 	 * Register a "packet buffer -&gt; container" factory. This is used both on the client and server side.
 	 *
-	 * @param identifier a shared identifier, this identifier should also be used to register a container using {@link ScreenProviderRegistry}
+	 * @param identifier a shared identifier, this identifier should also be used to register a container using {@link net.fabricmc.fabric.api.client.screen.ScreenProviderRegistry}
 	 * @param factory    the ContainerFactory that should return a new {@link ScreenHandler}
 	 */
 	void registerFactory(Identifier identifier, ContainerFactory<ScreenHandler> factory);
diff --git a/deprecated/fabric-events-lifecycle-v0/src/main/java/net/fabricmc/fabric/api/event/client/ClientTickCallback.java b/deprecated/fabric-events-lifecycle-v0/src/client/java/net/fabricmc/fabric/api/event/client/ClientTickCallback.java
similarity index 100%
rename from deprecated/fabric-events-lifecycle-v0/src/main/java/net/fabricmc/fabric/api/event/client/ClientTickCallback.java
rename to deprecated/fabric-events-lifecycle-v0/src/client/java/net/fabricmc/fabric/api/event/client/ClientTickCallback.java
diff --git a/deprecated/fabric-events-lifecycle-v0/src/main/java/net/fabricmc/fabric/api/event/client/ItemTooltipCallback.java b/deprecated/fabric-events-lifecycle-v0/src/client/java/net/fabricmc/fabric/api/event/client/ItemTooltipCallback.java
similarity index 100%
rename from deprecated/fabric-events-lifecycle-v0/src/main/java/net/fabricmc/fabric/api/event/client/ItemTooltipCallback.java
rename to deprecated/fabric-events-lifecycle-v0/src/client/java/net/fabricmc/fabric/api/event/client/ItemTooltipCallback.java
diff --git a/deprecated/fabric-events-lifecycle-v0/src/main/java/net/fabricmc/fabric/impl/event/lifecycle/client/LegacyClientEventInvokers.java b/deprecated/fabric-events-lifecycle-v0/src/client/java/net/fabricmc/fabric/impl/event/lifecycle/client/LegacyClientEventInvokers.java
similarity index 100%
rename from deprecated/fabric-events-lifecycle-v0/src/main/java/net/fabricmc/fabric/impl/event/lifecycle/client/LegacyClientEventInvokers.java
rename to deprecated/fabric-events-lifecycle-v0/src/client/java/net/fabricmc/fabric/impl/event/lifecycle/client/LegacyClientEventInvokers.java
diff --git a/deprecated/fabric-events-lifecycle-v0/src/main/java/net/fabricmc/fabric/api/event/world/WorldTickCallback.java b/deprecated/fabric-events-lifecycle-v0/src/main/java/net/fabricmc/fabric/api/event/world/WorldTickCallback.java
index 1ee44391a..65b5f21c2 100644
--- a/deprecated/fabric-events-lifecycle-v0/src/main/java/net/fabricmc/fabric/api/event/world/WorldTickCallback.java
+++ b/deprecated/fabric-events-lifecycle-v0/src/main/java/net/fabricmc/fabric/api/event/world/WorldTickCallback.java
@@ -18,7 +18,6 @@ package net.fabricmc.fabric.api.event.world;
 
 import net.minecraft.world.World;
 
-import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
 import net.fabricmc.fabric.api.event.Event;
 import net.fabricmc.fabric.api.event.EventFactory;
 import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
@@ -27,7 +26,7 @@ import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
 public interface WorldTickCallback {
 	/**
 	 * @deprecated The new WorldTickCallback has been split into a client and server callback.
-	 * Please use the {@link ServerTickEvents#END_WORLD_TICK server} or {@link ClientTickEvents#END_WORLD_TICK client} callbacks.
+	 * Please use the {@link ServerTickEvents#END_WORLD_TICK server} or {@link net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents#END_WORLD_TICK client} callbacks.
 	 */
 	@Deprecated
 	Event<WorldTickCallback> EVENT = EventFactory.createArrayBacked(WorldTickCallback.class,
diff --git a/deprecated/fabric-keybindings-v0/src/main/java/net/fabricmc/fabric/api/client/keybinding/FabricKeyBinding.java b/deprecated/fabric-keybindings-v0/src/client/java/net/fabricmc/fabric/api/client/keybinding/FabricKeyBinding.java
similarity index 100%
rename from deprecated/fabric-keybindings-v0/src/main/java/net/fabricmc/fabric/api/client/keybinding/FabricKeyBinding.java
rename to deprecated/fabric-keybindings-v0/src/client/java/net/fabricmc/fabric/api/client/keybinding/FabricKeyBinding.java
diff --git a/deprecated/fabric-keybindings-v0/src/main/java/net/fabricmc/fabric/api/client/keybinding/KeyBindingRegistry.java b/deprecated/fabric-keybindings-v0/src/client/java/net/fabricmc/fabric/api/client/keybinding/KeyBindingRegistry.java
similarity index 100%
rename from deprecated/fabric-keybindings-v0/src/main/java/net/fabricmc/fabric/api/client/keybinding/KeyBindingRegistry.java
rename to deprecated/fabric-keybindings-v0/src/client/java/net/fabricmc/fabric/api/client/keybinding/KeyBindingRegistry.java
diff --git a/deprecated/fabric-keybindings-v0/src/main/resources/assets/fabric-keybindings-v0/icon.png b/deprecated/fabric-keybindings-v0/src/client/resources/assets/fabric-keybindings-v0/icon.png
similarity index 100%
rename from deprecated/fabric-keybindings-v0/src/main/resources/assets/fabric-keybindings-v0/icon.png
rename to deprecated/fabric-keybindings-v0/src/client/resources/assets/fabric-keybindings-v0/icon.png
diff --git a/deprecated/fabric-keybindings-v0/src/main/resources/fabric.mod.json b/deprecated/fabric-keybindings-v0/src/client/resources/fabric.mod.json
similarity index 100%
rename from deprecated/fabric-keybindings-v0/src/main/resources/fabric.mod.json
rename to deprecated/fabric-keybindings-v0/src/client/resources/fabric.mod.json
diff --git a/deprecated/fabric-networking-v0/src/main/java/net/fabricmc/fabric/api/network/ClientSidePacketRegistry.java b/deprecated/fabric-networking-v0/src/client/java/net/fabricmc/fabric/api/network/ClientSidePacketRegistry.java
similarity index 95%
rename from deprecated/fabric-networking-v0/src/main/java/net/fabricmc/fabric/api/network/ClientSidePacketRegistry.java
rename to deprecated/fabric-networking-v0/src/client/java/net/fabricmc/fabric/api/network/ClientSidePacketRegistry.java
index 70ad9bb9d..237501a53 100644
--- a/deprecated/fabric-networking-v0/src/main/java/net/fabricmc/fabric/api/network/ClientSidePacketRegistry.java
+++ b/deprecated/fabric-networking-v0/src/client/java/net/fabricmc/fabric/api/network/ClientSidePacketRegistry.java
@@ -23,7 +23,6 @@ import net.minecraft.network.Packet;
 import net.minecraft.util.Identifier;
 import net.minecraft.network.PacketByteBuf;
 
-import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
 import net.fabricmc.fabric.impl.networking.ClientSidePacketRegistryImpl;
 
 /**
@@ -34,7 +33,7 @@ import net.fabricmc.fabric.impl.networking.ClientSidePacketRegistryImpl;
  * <ul><li>registering client-side packet receivers (server -&gt; client packets)
  * <li>sending packets to the server (client -&gt; server packets).</ul>
  *
- * @deprecated Please migrate to {@link ClientPlayNetworking}.
+ * @deprecated Please migrate to {@link net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking}.
  */
 @Deprecated
 public interface ClientSidePacketRegistry extends PacketRegistry {
diff --git a/deprecated/fabric-networking-v0/src/main/java/net/fabricmc/fabric/impl/networking/ClientSidePacketRegistryImpl.java b/deprecated/fabric-networking-v0/src/client/java/net/fabricmc/fabric/impl/networking/ClientSidePacketRegistryImpl.java
similarity index 100%
rename from deprecated/fabric-networking-v0/src/main/java/net/fabricmc/fabric/impl/networking/ClientSidePacketRegistryImpl.java
rename to deprecated/fabric-networking-v0/src/client/java/net/fabricmc/fabric/impl/networking/ClientSidePacketRegistryImpl.java
diff --git a/deprecated/fabric-networking-v0/src/main/java/net/fabricmc/fabric/impl/networking/OldClientNetworkingHooks.java b/deprecated/fabric-networking-v0/src/client/java/net/fabricmc/fabric/impl/networking/OldClientNetworkingHooks.java
similarity index 100%
rename from deprecated/fabric-networking-v0/src/main/java/net/fabricmc/fabric/impl/networking/OldClientNetworkingHooks.java
rename to deprecated/fabric-networking-v0/src/client/java/net/fabricmc/fabric/impl/networking/OldClientNetworkingHooks.java
diff --git a/deprecated/fabric-networking-v0/src/main/java/net/fabricmc/fabric/api/event/network/C2SPacketTypeCallback.java b/deprecated/fabric-networking-v0/src/main/java/net/fabricmc/fabric/api/event/network/C2SPacketTypeCallback.java
index 8c8f9584c..88459950f 100644
--- a/deprecated/fabric-networking-v0/src/main/java/net/fabricmc/fabric/api/event/network/C2SPacketTypeCallback.java
+++ b/deprecated/fabric-networking-v0/src/main/java/net/fabricmc/fabric/api/event/network/C2SPacketTypeCallback.java
@@ -21,7 +21,6 @@ import java.util.Collection;
 import net.minecraft.entity.player.PlayerEntity;
 import net.minecraft.util.Identifier;
 
-import net.fabricmc.fabric.api.client.networking.v1.C2SPlayChannelEvents;
 import net.fabricmc.fabric.api.event.Event;
 import net.fabricmc.fabric.api.event.EventFactory;
 import net.fabricmc.fabric.api.networking.v1.S2CPlayChannelEvents;
@@ -38,7 +37,7 @@ import net.fabricmc.fabric.api.networking.v1.S2CPlayChannelEvents;
 @Deprecated
 public interface C2SPacketTypeCallback {
 	/**
-	 * @deprecated Please migrate to {@link C2SPlayChannelEvents#REGISTER}.
+	 * @deprecated Please migrate to {@link net.fabricmc.fabric.api.client.networking.v1.C2SPlayChannelEvents#REGISTER}.
 	 */
 	@Deprecated
 	Event<C2SPacketTypeCallback> REGISTERED = EventFactory.createArrayBacked(
@@ -51,7 +50,7 @@ public interface C2SPacketTypeCallback {
 	);
 
 	/**
-	 * @deprecated Please migrate to {@link C2SPlayChannelEvents#UNREGISTER}.
+	 * @deprecated Please migrate to {@link net.fabricmc.fabric.api.client.networking.v1.C2SPlayChannelEvents#UNREGISTER}.
 	 */
 	@Deprecated
 	Event<C2SPacketTypeCallback> UNREGISTERED = EventFactory.createArrayBacked(
diff --git a/deprecated/fabric-networking-v0/src/main/java/net/fabricmc/fabric/api/event/network/S2CPacketTypeCallback.java b/deprecated/fabric-networking-v0/src/main/java/net/fabricmc/fabric/api/event/network/S2CPacketTypeCallback.java
index 7d5a8e170..5bf7b5920 100644
--- a/deprecated/fabric-networking-v0/src/main/java/net/fabricmc/fabric/api/event/network/S2CPacketTypeCallback.java
+++ b/deprecated/fabric-networking-v0/src/main/java/net/fabricmc/fabric/api/event/network/S2CPacketTypeCallback.java
@@ -20,7 +20,6 @@ import java.util.Collection;
 
 import net.minecraft.util.Identifier;
 
-import net.fabricmc.fabric.api.client.networking.v1.C2SPlayChannelEvents;
 import net.fabricmc.fabric.api.event.Event;
 import net.fabricmc.fabric.api.event.EventFactory;
 import net.fabricmc.fabric.api.networking.v1.S2CPlayChannelEvents;
@@ -32,7 +31,7 @@ import net.fabricmc.fabric.api.networking.v1.S2CPlayChannelEvents;
  * <p>Registrations received will be for <em>client -&gt; server</em> packets
  * that the sending server can understand.
  *
- * @deprecated Please migrate to {@link C2SPlayChannelEvents} since this was incorrectly named.
+ * @deprecated Please migrate to {@link net.fabricmc.fabric.api.client.networking.v1.C2SPlayChannelEvents} since this was incorrectly named.
  */
 @Deprecated
 public interface S2CPacketTypeCallback {
diff --git a/deprecated/fabric-networking-v0/src/main/java/net/fabricmc/fabric/api/network/PacketConsumer.java b/deprecated/fabric-networking-v0/src/main/java/net/fabricmc/fabric/api/network/PacketConsumer.java
index 0c90cefc2..d390ac03a 100644
--- a/deprecated/fabric-networking-v0/src/main/java/net/fabricmc/fabric/api/network/PacketConsumer.java
+++ b/deprecated/fabric-networking-v0/src/main/java/net/fabricmc/fabric/api/network/PacketConsumer.java
@@ -18,13 +18,12 @@ package net.fabricmc.fabric.api.network;
 
 import net.minecraft.network.PacketByteBuf;
 
-import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
 import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
 
 /**
  * Interface for receiving CustomPayload-based packets.
  *
- * @deprecated See the corresponding play packet handler in {@link ClientPlayNetworking} or {@link ServerPlayNetworking}
+ * @deprecated See the corresponding play packet handler in {@link net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking} or {@link ServerPlayNetworking}
  */
 @Deprecated
 @FunctionalInterface
diff --git a/deprecated/fabric-renderer-registries-v1/src/main/java/net/fabricmc/fabric/api/client/rendereregistry/v1/BlockEntityRendererRegistry.java b/deprecated/fabric-renderer-registries-v1/src/client/java/net/fabricmc/fabric/api/client/rendereregistry/v1/BlockEntityRendererRegistry.java
similarity index 100%
rename from deprecated/fabric-renderer-registries-v1/src/main/java/net/fabricmc/fabric/api/client/rendereregistry/v1/BlockEntityRendererRegistry.java
rename to deprecated/fabric-renderer-registries-v1/src/client/java/net/fabricmc/fabric/api/client/rendereregistry/v1/BlockEntityRendererRegistry.java
diff --git a/deprecated/fabric-renderer-registries-v1/src/main/java/net/fabricmc/fabric/api/client/rendereregistry/v1/EntityModelLayerRegistry.java b/deprecated/fabric-renderer-registries-v1/src/client/java/net/fabricmc/fabric/api/client/rendereregistry/v1/EntityModelLayerRegistry.java
similarity index 100%
rename from deprecated/fabric-renderer-registries-v1/src/main/java/net/fabricmc/fabric/api/client/rendereregistry/v1/EntityModelLayerRegistry.java
rename to deprecated/fabric-renderer-registries-v1/src/client/java/net/fabricmc/fabric/api/client/rendereregistry/v1/EntityModelLayerRegistry.java
diff --git a/deprecated/fabric-renderer-registries-v1/src/main/java/net/fabricmc/fabric/api/client/rendereregistry/v1/EntityRendererRegistry.java b/deprecated/fabric-renderer-registries-v1/src/client/java/net/fabricmc/fabric/api/client/rendereregistry/v1/EntityRendererRegistry.java
similarity index 100%
rename from deprecated/fabric-renderer-registries-v1/src/main/java/net/fabricmc/fabric/api/client/rendereregistry/v1/EntityRendererRegistry.java
rename to deprecated/fabric-renderer-registries-v1/src/client/java/net/fabricmc/fabric/api/client/rendereregistry/v1/EntityRendererRegistry.java
diff --git a/deprecated/fabric-renderer-registries-v1/src/main/java/net/fabricmc/fabric/api/client/rendereregistry/v1/LivingEntityFeatureRendererRegistrationCallback.java b/deprecated/fabric-renderer-registries-v1/src/client/java/net/fabricmc/fabric/api/client/rendereregistry/v1/LivingEntityFeatureRendererRegistrationCallback.java
similarity index 100%
rename from deprecated/fabric-renderer-registries-v1/src/main/java/net/fabricmc/fabric/api/client/rendereregistry/v1/LivingEntityFeatureRendererRegistrationCallback.java
rename to deprecated/fabric-renderer-registries-v1/src/client/java/net/fabricmc/fabric/api/client/rendereregistry/v1/LivingEntityFeatureRendererRegistrationCallback.java
diff --git a/deprecated/fabric-renderer-registries-v1/src/main/resources/assets/renderer-registries-v1/icon.png b/deprecated/fabric-renderer-registries-v1/src/client/resources/assets/renderer-registries-v1/icon.png
similarity index 100%
rename from deprecated/fabric-renderer-registries-v1/src/main/resources/assets/renderer-registries-v1/icon.png
rename to deprecated/fabric-renderer-registries-v1/src/client/resources/assets/renderer-registries-v1/icon.png
diff --git a/deprecated/fabric-renderer-registries-v1/src/main/resources/fabric.mod.json b/deprecated/fabric-renderer-registries-v1/src/client/resources/fabric.mod.json
similarity index 100%
rename from deprecated/fabric-renderer-registries-v1/src/main/resources/fabric.mod.json
rename to deprecated/fabric-renderer-registries-v1/src/client/resources/fabric.mod.json
diff --git a/deprecated/fabric-rendering-v0/src/main/java/net/fabricmc/fabric/api/client/render/ColorProviderRegistry.java b/deprecated/fabric-rendering-v0/src/client/java/net/fabricmc/fabric/api/client/render/ColorProviderRegistry.java
similarity index 100%
rename from deprecated/fabric-rendering-v0/src/main/java/net/fabricmc/fabric/api/client/render/ColorProviderRegistry.java
rename to deprecated/fabric-rendering-v0/src/client/java/net/fabricmc/fabric/api/client/render/ColorProviderRegistry.java
diff --git a/deprecated/fabric-rendering-v0/src/main/java/net/fabricmc/fabric/api/client/render/InvalidateRenderStateCallback.java b/deprecated/fabric-rendering-v0/src/client/java/net/fabricmc/fabric/api/client/render/InvalidateRenderStateCallback.java
similarity index 100%
rename from deprecated/fabric-rendering-v0/src/main/java/net/fabricmc/fabric/api/client/render/InvalidateRenderStateCallback.java
rename to deprecated/fabric-rendering-v0/src/client/java/net/fabricmc/fabric/api/client/render/InvalidateRenderStateCallback.java
diff --git a/deprecated/fabric-rendering-v0/src/main/java/net/fabricmc/fabric/impl/client/rendering/RenderingCallbackInvoker.java b/deprecated/fabric-rendering-v0/src/client/java/net/fabricmc/fabric/impl/client/rendering/RenderingCallbackInvoker.java
similarity index 100%
rename from deprecated/fabric-rendering-v0/src/main/java/net/fabricmc/fabric/impl/client/rendering/RenderingCallbackInvoker.java
rename to deprecated/fabric-rendering-v0/src/client/java/net/fabricmc/fabric/impl/client/rendering/RenderingCallbackInvoker.java
diff --git a/deprecated/fabric-rendering-v0/src/main/resources/assets/fabric-rendering-v0/icon.png b/deprecated/fabric-rendering-v0/src/client/resources/assets/fabric-rendering-v0/icon.png
similarity index 100%
rename from deprecated/fabric-rendering-v0/src/main/resources/assets/fabric-rendering-v0/icon.png
rename to deprecated/fabric-rendering-v0/src/client/resources/assets/fabric-rendering-v0/icon.png
diff --git a/deprecated/fabric-rendering-v0/src/main/resources/fabric.mod.json b/deprecated/fabric-rendering-v0/src/client/resources/fabric.mod.json
similarity index 100%
rename from deprecated/fabric-rendering-v0/src/main/resources/fabric.mod.json
rename to deprecated/fabric-rendering-v0/src/client/resources/fabric.mod.json
diff --git a/fabric-api-base/build.gradle b/fabric-api-base/build.gradle
index 44fa2b497..c90a114c5 100644
--- a/fabric-api-base/build.gradle
+++ b/fabric-api-base/build.gradle
@@ -1,7 +1,7 @@
 archivesBaseName = "fabric-api-base"
 version = getSubprojectVersion(project)
 
-dependencies {
-	testmodImplementation project(path: ':fabric-command-api-v2', configuration: 'namedElements')
-	testmodImplementation project(path: ':fabric-lifecycle-events-v1', configuration: 'namedElements')
-}
+testDependencies(project, [
+	':fabric-command-api-v2',
+	':fabric-lifecycle-events-v1'
+])
diff --git a/fabric-api-lookup-api-v1/build.gradle b/fabric-api-lookup-api-v1/build.gradle
index 2ce3be930..e842382f0 100644
--- a/fabric-api-lookup-api-v1/build.gradle
+++ b/fabric-api-lookup-api-v1/build.gradle
@@ -6,7 +6,7 @@ moduleDependencies(project, [
 	'fabric-lifecycle-events-v1'
 ])
 
-dependencies {
-	testmodImplementation project(path: ':fabric-rendering-v1', configuration: 'namedElements')
-	testmodImplementation project(path: ':fabric-object-builder-api-v1', configuration: 'namedElements')
-}
+testDependencies(project, [
+	':fabric-rendering-v1',
+	':fabric-object-builder-api-v1'
+])
diff --git a/fabric-biome-api-v1/build.gradle b/fabric-biome-api-v1/build.gradle
index a15a6c3b5..543bd160b 100644
--- a/fabric-biome-api-v1/build.gradle
+++ b/fabric-biome-api-v1/build.gradle
@@ -5,7 +5,7 @@ loom {
     accessWidenerPath = file("src/main/resources/fabric-biome-api-v1.accesswidener")
 }
 
-dependencies {
-	testmodImplementation project(path: ':fabric-api-base', configuration: 'namedElements')
-	testmodImplementation project(path: ':fabric-resource-loader-v0', configuration: 'namedElements')
-}
+testDependencies(project, [
+	':fabric-api-base',
+	':fabric-resource-loader-v0'
+])
diff --git a/fabric-blockrenderlayer-v1/src/main/java/net/fabricmc/fabric/api/blockrenderlayer/v1/BlockRenderLayerMap.java b/fabric-blockrenderlayer-v1/src/client/java/net/fabricmc/fabric/api/blockrenderlayer/v1/BlockRenderLayerMap.java
similarity index 100%
rename from fabric-blockrenderlayer-v1/src/main/java/net/fabricmc/fabric/api/blockrenderlayer/v1/BlockRenderLayerMap.java
rename to fabric-blockrenderlayer-v1/src/client/java/net/fabricmc/fabric/api/blockrenderlayer/v1/BlockRenderLayerMap.java
diff --git a/fabric-blockrenderlayer-v1/src/main/java/net/fabricmc/fabric/impl/blockrenderlayer/BlockRenderLayerMapImpl.java b/fabric-blockrenderlayer-v1/src/client/java/net/fabricmc/fabric/impl/blockrenderlayer/BlockRenderLayerMapImpl.java
similarity index 100%
rename from fabric-blockrenderlayer-v1/src/main/java/net/fabricmc/fabric/impl/blockrenderlayer/BlockRenderLayerMapImpl.java
rename to fabric-blockrenderlayer-v1/src/client/java/net/fabricmc/fabric/impl/blockrenderlayer/BlockRenderLayerMapImpl.java
diff --git a/fabric-blockrenderlayer-v1/src/main/java/net/fabricmc/fabric/mixin/blockrenderlayer/MixinBlockRenderLayer.java b/fabric-blockrenderlayer-v1/src/client/java/net/fabricmc/fabric/mixin/blockrenderlayer/MixinBlockRenderLayer.java
similarity index 100%
rename from fabric-blockrenderlayer-v1/src/main/java/net/fabricmc/fabric/mixin/blockrenderlayer/MixinBlockRenderLayer.java
rename to fabric-blockrenderlayer-v1/src/client/java/net/fabricmc/fabric/mixin/blockrenderlayer/MixinBlockRenderLayer.java
diff --git a/fabric-blockrenderlayer-v1/src/main/resources/assets/fabric-blockrenderlayer-v1/icon.png b/fabric-blockrenderlayer-v1/src/client/resources/assets/fabric-blockrenderlayer-v1/icon.png
similarity index 100%
rename from fabric-blockrenderlayer-v1/src/main/resources/assets/fabric-blockrenderlayer-v1/icon.png
rename to fabric-blockrenderlayer-v1/src/client/resources/assets/fabric-blockrenderlayer-v1/icon.png
diff --git a/fabric-blockrenderlayer-v1/src/main/resources/fabric-blockrenderlayer-v1.mixins.json b/fabric-blockrenderlayer-v1/src/client/resources/fabric-blockrenderlayer-v1.mixins.json
similarity index 100%
rename from fabric-blockrenderlayer-v1/src/main/resources/fabric-blockrenderlayer-v1.mixins.json
rename to fabric-blockrenderlayer-v1/src/client/resources/fabric-blockrenderlayer-v1.mixins.json
diff --git a/fabric-blockrenderlayer-v1/src/main/resources/fabric.mod.json b/fabric-blockrenderlayer-v1/src/client/resources/fabric.mod.json
similarity index 100%
rename from fabric-blockrenderlayer-v1/src/main/resources/fabric.mod.json
rename to fabric-blockrenderlayer-v1/src/client/resources/fabric.mod.json
diff --git a/fabric-command-api-v2/build.gradle b/fabric-command-api-v2/build.gradle
index 480f7be9b..339abf376 100644
--- a/fabric-command-api-v2/build.gradle
+++ b/fabric-command-api-v2/build.gradle
@@ -1,14 +1,14 @@
 archivesBaseName = "fabric-command-api-v2"
 version = getSubprojectVersion(project)
 
-dependencies {
-	testmodImplementation project(path: ':fabric-lifecycle-events-v1', configuration: 'namedElements')
-}
-
 moduleDependencies(project, [
 		'fabric-api-base'
 ])
 
+testDependencies(project, [
+		':fabric-lifecycle-events-v1',
+])
+
 loom {
 	accessWidenerPath = file('src/main/resources/fabric-command-api-v2.accesswidener')
 }
diff --git a/fabric-command-api-v2/src/main/java/net/fabricmc/fabric/api/client/command/v2/ClientCommandManager.java b/fabric-command-api-v2/src/client/java/net/fabricmc/fabric/api/client/command/v2/ClientCommandManager.java
similarity index 100%
rename from fabric-command-api-v2/src/main/java/net/fabricmc/fabric/api/client/command/v2/ClientCommandManager.java
rename to fabric-command-api-v2/src/client/java/net/fabricmc/fabric/api/client/command/v2/ClientCommandManager.java
diff --git a/fabric-command-api-v2/src/main/java/net/fabricmc/fabric/api/client/command/v2/FabricClientCommandSource.java b/fabric-command-api-v2/src/client/java/net/fabricmc/fabric/api/client/command/v2/FabricClientCommandSource.java
similarity index 100%
rename from fabric-command-api-v2/src/main/java/net/fabricmc/fabric/api/client/command/v2/FabricClientCommandSource.java
rename to fabric-command-api-v2/src/client/java/net/fabricmc/fabric/api/client/command/v2/FabricClientCommandSource.java
diff --git a/fabric-command-api-v2/src/main/java/net/fabricmc/fabric/api/client/command/v2/package-info.java b/fabric-command-api-v2/src/client/java/net/fabricmc/fabric/api/client/command/v2/package-info.java
similarity index 100%
rename from fabric-command-api-v2/src/main/java/net/fabricmc/fabric/api/client/command/v2/package-info.java
rename to fabric-command-api-v2/src/client/java/net/fabricmc/fabric/api/client/command/v2/package-info.java
diff --git a/fabric-command-api-v2/src/main/java/net/fabricmc/fabric/impl/command/client/ClientCommandInternals.java b/fabric-command-api-v2/src/client/java/net/fabricmc/fabric/impl/command/client/ClientCommandInternals.java
similarity index 100%
rename from fabric-command-api-v2/src/main/java/net/fabricmc/fabric/impl/command/client/ClientCommandInternals.java
rename to fabric-command-api-v2/src/client/java/net/fabricmc/fabric/impl/command/client/ClientCommandInternals.java
diff --git a/fabric-command-api-v2/src/main/java/net/fabricmc/fabric/mixin/command/client/ClientCommandSourceMixin.java b/fabric-command-api-v2/src/client/java/net/fabricmc/fabric/mixin/command/client/ClientCommandSourceMixin.java
similarity index 100%
rename from fabric-command-api-v2/src/main/java/net/fabricmc/fabric/mixin/command/client/ClientCommandSourceMixin.java
rename to fabric-command-api-v2/src/client/java/net/fabricmc/fabric/mixin/command/client/ClientCommandSourceMixin.java
diff --git a/fabric-command-api-v2/src/main/java/net/fabricmc/fabric/mixin/command/client/ClientPlayNetworkHandlerMixin.java b/fabric-command-api-v2/src/client/java/net/fabricmc/fabric/mixin/command/client/ClientPlayNetworkHandlerMixin.java
similarity index 100%
rename from fabric-command-api-v2/src/main/java/net/fabricmc/fabric/mixin/command/client/ClientPlayNetworkHandlerMixin.java
rename to fabric-command-api-v2/src/client/java/net/fabricmc/fabric/mixin/command/client/ClientPlayNetworkHandlerMixin.java
diff --git a/fabric-command-api-v2/src/main/java/net/fabricmc/fabric/mixin/command/client/ClientPlayerEntityMixin.java b/fabric-command-api-v2/src/client/java/net/fabricmc/fabric/mixin/command/client/ClientPlayerEntityMixin.java
similarity index 100%
rename from fabric-command-api-v2/src/main/java/net/fabricmc/fabric/mixin/command/client/ClientPlayerEntityMixin.java
rename to fabric-command-api-v2/src/client/java/net/fabricmc/fabric/mixin/command/client/ClientPlayerEntityMixin.java
diff --git a/fabric-command-api-v2/src/main/java/net/fabricmc/fabric/mixin/command/client/MinecraftClientMixin.java b/fabric-command-api-v2/src/client/java/net/fabricmc/fabric/mixin/command/client/MinecraftClientMixin.java
similarity index 100%
rename from fabric-command-api-v2/src/main/java/net/fabricmc/fabric/mixin/command/client/MinecraftClientMixin.java
rename to fabric-command-api-v2/src/client/java/net/fabricmc/fabric/mixin/command/client/MinecraftClientMixin.java
diff --git a/fabric-command-api-v2/src/client/resources/fabric-command-api-v2.client.mixins.json b/fabric-command-api-v2/src/client/resources/fabric-command-api-v2.client.mixins.json
new file mode 100644
index 000000000..cf52c5770
--- /dev/null
+++ b/fabric-command-api-v2/src/client/resources/fabric-command-api-v2.client.mixins.json
@@ -0,0 +1,14 @@
+{
+  "required": true,
+  "package": "net.fabricmc.fabric.mixin.command.client",
+  "compatibilityLevel": "JAVA_16",
+  "client": [
+    "ClientCommandSourceMixin",
+    "ClientPlayerEntityMixin",
+    "ClientPlayNetworkHandlerMixin",
+    "MinecraftClientMixin"
+  ],
+  "injectors": {
+    "defaultRequire": 1
+  }
+}
diff --git a/fabric-command-api-v2/src/main/resources/fabric-command-api-v2.mixins.json b/fabric-command-api-v2/src/main/resources/fabric-command-api-v2.mixins.json
index d6d19deb2..f5c7ff6c3 100644
--- a/fabric-command-api-v2/src/main/resources/fabric-command-api-v2.mixins.json
+++ b/fabric-command-api-v2/src/main/resources/fabric-command-api-v2.mixins.json
@@ -6,12 +6,6 @@
     "CommandManagerMixin",
     "HelpCommandAccessor"
   ],
-  "client": [
-    "client.ClientCommandSourceMixin",
-    "client.ClientPlayerEntityMixin",
-    "client.ClientPlayNetworkHandlerMixin",
-    "client.MinecraftClientMixin"
-  ],
   "injectors": {
     "defaultRequire": 1
   }
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 fd9dc8123..8c2eaac2a 100644
--- a/fabric-command-api-v2/src/main/resources/fabric.mod.json
+++ b/fabric-command-api-v2/src/main/resources/fabric.mod.json
@@ -23,7 +23,11 @@
   "description": "Adds command-related hooks.",
   "accessWidener": "fabric-command-api-v2.accesswidener",
   "mixins": [
-    "fabric-command-api-v2.mixins.json"
+    "fabric-command-api-v2.mixins.json",
+    {
+      "config": "fabric-command-api-v2.client.mixins.json",
+      "environment": "client"
+    }
   ],
   "custom": {
     "fabric-api:module-lifecycle": "stable"
diff --git a/fabric-content-registries-v0/src/main/java/net/fabricmc/fabric/mixin/content/registry/client/MixinClientPlayNetworkHandler.java b/fabric-content-registries-v0/src/client/java/net/fabricmc/fabric/mixin/content/registry/client/MixinClientPlayNetworkHandler.java
similarity index 100%
rename from fabric-content-registries-v0/src/main/java/net/fabricmc/fabric/mixin/content/registry/client/MixinClientPlayNetworkHandler.java
rename to fabric-content-registries-v0/src/client/java/net/fabricmc/fabric/mixin/content/registry/client/MixinClientPlayNetworkHandler.java
diff --git a/fabric-content-registries-v0/src/client/resources/fabric-content-registries-v0.client.mixins.json b/fabric-content-registries-v0/src/client/resources/fabric-content-registries-v0.client.mixins.json
new file mode 100644
index 000000000..12f0a620a
--- /dev/null
+++ b/fabric-content-registries-v0/src/client/resources/fabric-content-registries-v0.client.mixins.json
@@ -0,0 +1,11 @@
+{
+  "required": true,
+  "package": "net.fabricmc.fabric.mixin.content.registry.client",
+  "compatibilityLevel": "JAVA_16",
+  "client": [
+    "MixinClientPlayNetworkHandler"
+  ],
+  "injectors": {
+    "defaultRequire": 1
+  }
+}
diff --git a/fabric-content-registries-v0/src/main/resources/fabric-content-registries-v0.mixins.json b/fabric-content-registries-v0/src/main/resources/fabric-content-registries-v0.mixins.json
index 001686717..5c6ccd3c0 100644
--- a/fabric-content-registries-v0/src/main/resources/fabric-content-registries-v0.mixins.json
+++ b/fabric-content-registries-v0/src/main/resources/fabric-content-registries-v0.mixins.json
@@ -11,9 +11,6 @@
     "OxidizableMixin",
     "ShovelItemAccessor"
   ],
-  "client": [
-    "client.MixinClientPlayNetworkHandler"
-  ],
   "injectors": {
     "defaultRequire": 1
   }
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 4d3f55ecd..27f6d7824 100644
--- a/fabric-content-registries-v0/src/main/resources/fabric.mod.json
+++ b/fabric-content-registries-v0/src/main/resources/fabric.mod.json
@@ -23,7 +23,11 @@
   },
   "description": "Adds registries for vanilla mechanics that are missing them.",
   "mixins": [
-    "fabric-content-registries-v0.mixins.json"
+    "fabric-content-registries-v0.mixins.json",
+    {
+      "config": "fabric-content-registries-v0.client.mixins.json",
+      "environment": "client"
+    }
   ],
   "accessWidener" : "fabric-content-registries-v0.accesswidener",
   "custom": {
diff --git a/fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/mixin/datagen/client/MinecraftClientMixin.java b/fabric-data-generation-api-v1/src/client/java/net/fabricmc/fabric/mixin/datagen/client/MinecraftClientMixin.java
similarity index 100%
rename from fabric-data-generation-api-v1/src/main/java/net/fabricmc/fabric/mixin/datagen/client/MinecraftClientMixin.java
rename to fabric-data-generation-api-v1/src/client/java/net/fabricmc/fabric/mixin/datagen/client/MinecraftClientMixin.java
diff --git a/fabric-data-generation-api-v1/src/client/resources/fabric-data-generation-api-v1.client.mixins.json b/fabric-data-generation-api-v1/src/client/resources/fabric-data-generation-api-v1.client.mixins.json
new file mode 100644
index 000000000..e43f22c7f
--- /dev/null
+++ b/fabric-data-generation-api-v1/src/client/resources/fabric-data-generation-api-v1.client.mixins.json
@@ -0,0 +1,11 @@
+{
+  "required": true,
+  "package": "net.fabricmc.fabric.mixin.datagen.client",
+  "compatibilityLevel": "JAVA_16",
+  "client": [
+    "MinecraftClientMixin"
+  ],
+  "injectors": {
+    "defaultRequire": 1
+  }
+}
diff --git a/fabric-data-generation-api-v1/src/main/resources/fabric-data-generation-api-v1.mixins.json b/fabric-data-generation-api-v1/src/main/resources/fabric-data-generation-api-v1.mixins.json
index 01b878025..aeae6bfd1 100644
--- a/fabric-data-generation-api-v1/src/main/resources/fabric-data-generation-api-v1.mixins.json
+++ b/fabric-data-generation-api-v1/src/main/resources/fabric-data-generation-api-v1.mixins.json
@@ -8,9 +8,6 @@
     "DynamicRegistryManagerAccessor",
     "TagBuilderMixin"
   ],
-  "client": [
-    "client.MinecraftClientMixin"
-  ],
   "server": [
     "server.MainMixin"
   ],
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 5da91f9c1..b51bc6608 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
@@ -20,7 +20,11 @@
   },
   "description": "Allows for automatic data generation.",
   "mixins": [
-    "fabric-data-generation-api-v1.mixins.json"
+    "fabric-data-generation-api-v1.mixins.json",
+    {
+      "config": "fabric-data-generation-api-v1.client.mixins.json",
+      "environment": "client"
+    }
   ],
   "accessWidener" : "fabric-data-generation-api-v1.accesswidener",
   "custom": {
diff --git a/fabric-dimensions-v1/build.gradle b/fabric-dimensions-v1/build.gradle
index 7f20b6350..47abf32a3 100644
--- a/fabric-dimensions-v1/build.gradle
+++ b/fabric-dimensions-v1/build.gradle
@@ -1,12 +1,12 @@
 archivesBaseName = "fabric-dimensions-v1"
 version = getSubprojectVersion(project)
 
-dependencies {
-	testmodImplementation project(path: ':fabric-command-api-v2', configuration: 'namedElements')
-	testmodImplementation project(path: ':fabric-resource-loader-v0', configuration: 'namedElements')
-	testmodImplementation project(path: ':fabric-lifecycle-events-v1', configuration: 'namedElements')
-}
-
 moduleDependencies(project, [
 		'fabric-api-base'
 ])
+
+testDependencies(project, [
+	':fabric-command-api-v2',
+	':fabric-resource-loader-v0',
+	':fabric-lifecycle-events-v1'
+])
diff --git a/fabric-entity-events-v1/build.gradle b/fabric-entity-events-v1/build.gradle
index a5df4e127..6ca2bcc82 100644
--- a/fabric-entity-events-v1/build.gradle
+++ b/fabric-entity-events-v1/build.gradle
@@ -5,9 +5,9 @@ moduleDependencies(project, [
 		'fabric-api-base'
 ])
 
-dependencies {
-	testmodImplementation project(path: ':fabric-command-api-v2', configuration: 'namedElements')
-	testmodImplementation project(path: ':fabric-networking-api-v1', configuration: 'namedElements')
-	testmodImplementation project(path: ':fabric-registry-sync-v0', configuration: 'namedElements')
-	testmodImplementation project(path: ':fabric-rendering-v1', configuration: 'namedElements')
-}
+testDependencies(project, [
+	':fabric-command-api-v2',
+	':fabric-networking-api-v1',
+	':fabric-registry-sync-v0',
+	':fabric-rendering-v1'
+])
diff --git a/fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/mixin/entity/event/elytra/ClientPlayerEntityMixin.java b/fabric-entity-events-v1/src/client/java/net/fabricmc/fabric/mixin/entity/event/elytra/ClientPlayerEntityMixin.java
similarity index 100%
rename from fabric-entity-events-v1/src/main/java/net/fabricmc/fabric/mixin/entity/event/elytra/ClientPlayerEntityMixin.java
rename to fabric-entity-events-v1/src/client/java/net/fabricmc/fabric/mixin/entity/event/elytra/ClientPlayerEntityMixin.java
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
new file mode 100644
index 000000000..89a79f895
--- /dev/null
+++ b/fabric-entity-events-v1/src/client/resources/fabric-entity-events-v1.client.mixins.json
@@ -0,0 +1,12 @@
+{
+  "required": true,
+  "package": "net.fabricmc.fabric.mixin.entity.event",
+  "compatibilityLevel": "JAVA_16",
+  "client": [
+    "elytra.ClientPlayerEntityMixin"
+  ],
+  "injectors": {
+    "defaultRequire": 1,
+    "maxShiftBy": 3
+  }
+}
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 e353510b2..ee56fb597 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
@@ -12,9 +12,6 @@
     "ServerPlayerEntityMixin",
     "TeleportCommandMixin"
   ],
-  "client": [
-    "elytra.ClientPlayerEntityMixin"
-  ],
   "injectors": {
     "defaultRequire": 1,
     "maxShiftBy": 3
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 ea5ce0a4a..04967cb28 100644
--- a/fabric-entity-events-v1/src/main/resources/fabric.mod.json
+++ b/fabric-entity-events-v1/src/main/resources/fabric.mod.json
@@ -20,7 +20,11 @@
   },
   "description": "Events to hook into entities.",
   "mixins": [
-    "fabric-entity-events-v1.mixins.json"
+    "fabric-entity-events-v1.mixins.json",
+    {
+      "config": "fabric-entity-events-v1.client.mixins.json",
+      "environment": "client"
+    }
   ],
   "custom": {
     "fabric-api:module-lifecycle": "stable"
diff --git a/fabric-events-interaction-v0/src/main/java/net/fabricmc/fabric/mixin/event/interaction/MixinClientPlayerInteractionManager.java b/fabric-events-interaction-v0/src/client/java/net/fabricmc/fabric/mixin/event/interaction/client/MixinClientPlayerInteractionManager.java
similarity index 99%
rename from fabric-events-interaction-v0/src/main/java/net/fabricmc/fabric/mixin/event/interaction/MixinClientPlayerInteractionManager.java
rename to fabric-events-interaction-v0/src/client/java/net/fabricmc/fabric/mixin/event/interaction/client/MixinClientPlayerInteractionManager.java
index 8bed03219..df6ddb495 100644
--- a/fabric-events-interaction-v0/src/main/java/net/fabricmc/fabric/mixin/event/interaction/MixinClientPlayerInteractionManager.java
+++ b/fabric-events-interaction-v0/src/client/java/net/fabricmc/fabric/mixin/event/interaction/client/MixinClientPlayerInteractionManager.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package net.fabricmc.fabric.mixin.event.interaction;
+package net.fabricmc.fabric.mixin.event.interaction.client;
 
 import org.spongepowered.asm.mixin.Mixin;
 import org.spongepowered.asm.mixin.Shadow;
diff --git a/fabric-events-interaction-v0/src/main/java/net/fabricmc/fabric/mixin/event/interaction/MixinMinecraftClient.java b/fabric-events-interaction-v0/src/client/java/net/fabricmc/fabric/mixin/event/interaction/client/MixinMinecraftClient.java
similarity index 98%
rename from fabric-events-interaction-v0/src/main/java/net/fabricmc/fabric/mixin/event/interaction/MixinMinecraftClient.java
rename to fabric-events-interaction-v0/src/client/java/net/fabricmc/fabric/mixin/event/interaction/client/MixinMinecraftClient.java
index 0c0e5c366..cab4f4f7e 100644
--- a/fabric-events-interaction-v0/src/main/java/net/fabricmc/fabric/mixin/event/interaction/MixinMinecraftClient.java
+++ b/fabric-events-interaction-v0/src/client/java/net/fabricmc/fabric/mixin/event/interaction/client/MixinMinecraftClient.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package net.fabricmc.fabric.mixin.event.interaction;
+package net.fabricmc.fabric.mixin.event.interaction.client;
 
 import org.spongepowered.asm.mixin.Mixin;
 import org.spongepowered.asm.mixin.Shadow;
diff --git a/fabric-events-interaction-v0/src/client/resources/fabric-events-interaction-v0.client.mixins.json b/fabric-events-interaction-v0/src/client/resources/fabric-events-interaction-v0.client.mixins.json
new file mode 100644
index 000000000..c5c7a35a5
--- /dev/null
+++ b/fabric-events-interaction-v0/src/client/resources/fabric-events-interaction-v0.client.mixins.json
@@ -0,0 +1,12 @@
+{
+  "required": true,
+  "package": "net.fabricmc.fabric.mixin.event.interaction.client",
+  "compatibilityLevel": "JAVA_16",
+  "client": [
+    "MixinClientPlayerInteractionManager",
+    "MixinMinecraftClient"
+  ],
+  "injectors": {
+    "defaultRequire": 1
+  }
+}
diff --git a/fabric-events-interaction-v0/src/main/resources/fabric-events-interaction-v0.mixins.json b/fabric-events-interaction-v0/src/main/resources/fabric-events-interaction-v0.mixins.json
index 44d5b926e..41ac41b94 100644
--- a/fabric-events-interaction-v0/src/main/resources/fabric-events-interaction-v0.mixins.json
+++ b/fabric-events-interaction-v0/src/main/resources/fabric-events-interaction-v0.mixins.json
@@ -7,10 +7,6 @@
     "MixinServerPlayerInteractionManager",
     "MixinServerPlayNetworkHandler"
   ],
-  "client": [
-    "MixinClientPlayerInteractionManager",
-    "MixinMinecraftClient"
-  ],
   "injectors": {
     "defaultRequire": 1
   }
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 85cc9baae..cc6234340 100644
--- a/fabric-events-interaction-v0/src/main/resources/fabric.mod.json
+++ b/fabric-events-interaction-v0/src/main/resources/fabric.mod.json
@@ -30,7 +30,11 @@
   },
   "description": "Events for player interaction with blocks and entities.",
   "mixins": [
-    "fabric-events-interaction-v0.mixins.json"
+    "fabric-events-interaction-v0.mixins.json",
+    {
+      "config": "fabric-events-interaction-v0.client.mixins.json",
+      "environment": "client"
+    }
   ],
   "custom": {
     "fabric-api:module-lifecycle": "stable"
diff --git a/fabric-game-rule-api-v1/build.gradle b/fabric-game-rule-api-v1/build.gradle
index 256c5ce76..506856782 100644
--- a/fabric-game-rule-api-v1/build.gradle
+++ b/fabric-game-rule-api-v1/build.gradle
@@ -5,8 +5,8 @@ loom {
 	accessWidenerPath = file("src/main/resources/fabric-game-rule-api-v1.accesswidener")
 }
 
-dependencies {
-	testmodImplementation project(path: ':fabric-api-base', configuration: 'namedElements')
-	testmodImplementation project(path: ':fabric-lifecycle-events-v1', configuration: 'namedElements')
-	testmodImplementation project(path: ':fabric-resource-loader-v0', configuration: 'namedElements')
-}
+testDependencies(project, [
+	':fabric-api-base',
+	':fabric-lifecycle-events-v1',
+	':fabric-resource-loader-v0'
+])
diff --git a/fabric-game-rule-api-v1/src/main/java/net/fabricmc/fabric/impl/gamerule/widget/DoubleRuleWidget.java b/fabric-game-rule-api-v1/src/client/java/net/fabricmc/fabric/impl/gamerule/widget/DoubleRuleWidget.java
similarity index 100%
rename from fabric-game-rule-api-v1/src/main/java/net/fabricmc/fabric/impl/gamerule/widget/DoubleRuleWidget.java
rename to fabric-game-rule-api-v1/src/client/java/net/fabricmc/fabric/impl/gamerule/widget/DoubleRuleWidget.java
diff --git a/fabric-game-rule-api-v1/src/main/java/net/fabricmc/fabric/impl/gamerule/widget/EnumRuleWidget.java b/fabric-game-rule-api-v1/src/client/java/net/fabricmc/fabric/impl/gamerule/widget/EnumRuleWidget.java
similarity index 100%
rename from fabric-game-rule-api-v1/src/main/java/net/fabricmc/fabric/impl/gamerule/widget/EnumRuleWidget.java
rename to fabric-game-rule-api-v1/src/client/java/net/fabricmc/fabric/impl/gamerule/widget/EnumRuleWidget.java
diff --git a/fabric-game-rule-api-v1/src/main/java/net/fabricmc/fabric/mixin/gamerule/client/EditGameRulesScreenAccessor.java b/fabric-game-rule-api-v1/src/client/java/net/fabricmc/fabric/mixin/gamerule/client/EditGameRulesScreenAccessor.java
similarity index 100%
rename from fabric-game-rule-api-v1/src/main/java/net/fabricmc/fabric/mixin/gamerule/client/EditGameRulesScreenAccessor.java
rename to fabric-game-rule-api-v1/src/client/java/net/fabricmc/fabric/mixin/gamerule/client/EditGameRulesScreenAccessor.java
diff --git a/fabric-game-rule-api-v1/src/main/java/net/fabricmc/fabric/mixin/gamerule/client/RuleListWidgetMixin.java b/fabric-game-rule-api-v1/src/client/java/net/fabricmc/fabric/mixin/gamerule/client/RuleListWidgetMixin.java
similarity index 100%
rename from fabric-game-rule-api-v1/src/main/java/net/fabricmc/fabric/mixin/gamerule/client/RuleListWidgetMixin.java
rename to fabric-game-rule-api-v1/src/client/java/net/fabricmc/fabric/mixin/gamerule/client/RuleListWidgetMixin.java
diff --git a/fabric-game-rule-api-v1/src/main/java/net/fabricmc/fabric/mixin/gamerule/client/RuleListWidgetVisitorMixin.java b/fabric-game-rule-api-v1/src/client/java/net/fabricmc/fabric/mixin/gamerule/client/RuleListWidgetVisitorMixin.java
similarity index 100%
rename from fabric-game-rule-api-v1/src/main/java/net/fabricmc/fabric/mixin/gamerule/client/RuleListWidgetVisitorMixin.java
rename to fabric-game-rule-api-v1/src/client/java/net/fabricmc/fabric/mixin/gamerule/client/RuleListWidgetVisitorMixin.java
diff --git a/fabric-game-rule-api-v1/src/client/resources/fabric-game-rule-api-v1.client.mixins.json b/fabric-game-rule-api-v1/src/client/resources/fabric-game-rule-api-v1.client.mixins.json
new file mode 100644
index 000000000..b16bab2b3
--- /dev/null
+++ b/fabric-game-rule-api-v1/src/client/resources/fabric-game-rule-api-v1.client.mixins.json
@@ -0,0 +1,13 @@
+{
+  "required": true,
+  "package": "net.fabricmc.fabric.mixin.gamerule.client",
+  "compatibilityLevel": "JAVA_16",
+  "client": [
+    "EditGameRulesScreenAccessor",
+    "RuleListWidgetMixin",
+    "RuleListWidgetVisitorMixin"
+  ],
+  "injectors": {
+    "defaultRequire": 1
+  }
+}
diff --git a/fabric-game-rule-api-v1/src/main/resources/fabric-game-rule-api-v1.mixins.json b/fabric-game-rule-api-v1/src/main/resources/fabric-game-rule-api-v1.mixins.json
index 933aa6636..5767a7f0c 100644
--- a/fabric-game-rule-api-v1/src/main/resources/fabric-game-rule-api-v1.mixins.json
+++ b/fabric-game-rule-api-v1/src/main/resources/fabric-game-rule-api-v1.mixins.json
@@ -10,11 +10,6 @@
     "IntRuleAccessor",
     "RuleKeyMixin"
   ],
-  "client": [
-    "client.EditGameRulesScreenAccessor",
-    "client.RuleListWidgetMixin",
-    "client.RuleListWidgetVisitorMixin"
-  ],
   "injectors": {
     "defaultRequire": 1
   }
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 a1e909b53..af0a65b71 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
@@ -20,7 +20,11 @@
   },
   "description": "Allows registration of custom game rules.",
   "mixins": [
-    "fabric-game-rule-api-v1.mixins.json"
+    "fabric-game-rule-api-v1.mixins.json",
+    {
+      "config": "fabric-game-rule-api-v1.client.mixins.json",
+      "environment": "client"
+    }
   ],
   "accessWidener" : "fabric-game-rule-api-v1.accesswidener",
   "custom": {
diff --git a/fabric-item-api-v1/src/main/java/net/fabricmc/fabric/mixin/item/client/ClientPlayerInteractionManagerMixin.java b/fabric-item-api-v1/src/client/java/net/fabricmc/fabric/mixin/item/client/ClientPlayerInteractionManagerMixin.java
similarity index 100%
rename from fabric-item-api-v1/src/main/java/net/fabricmc/fabric/mixin/item/client/ClientPlayerInteractionManagerMixin.java
rename to fabric-item-api-v1/src/client/java/net/fabricmc/fabric/mixin/item/client/ClientPlayerInteractionManagerMixin.java
diff --git a/fabric-item-api-v1/src/main/java/net/fabricmc/fabric/mixin/item/client/HeldItemRendererMixin.java b/fabric-item-api-v1/src/client/java/net/fabricmc/fabric/mixin/item/client/HeldItemRendererMixin.java
similarity index 100%
rename from fabric-item-api-v1/src/main/java/net/fabricmc/fabric/mixin/item/client/HeldItemRendererMixin.java
rename to fabric-item-api-v1/src/client/java/net/fabricmc/fabric/mixin/item/client/HeldItemRendererMixin.java
diff --git a/fabric-item-api-v1/src/main/java/net/fabricmc/fabric/mixin/item/client/ItemStackMixin.java b/fabric-item-api-v1/src/client/java/net/fabricmc/fabric/mixin/item/client/ItemStackMixin.java
similarity index 100%
rename from fabric-item-api-v1/src/main/java/net/fabricmc/fabric/mixin/item/client/ItemStackMixin.java
rename to fabric-item-api-v1/src/client/java/net/fabricmc/fabric/mixin/item/client/ItemStackMixin.java
diff --git a/fabric-item-api-v1/src/client/resources/fabric-item-api-v1.client.mixins.json b/fabric-item-api-v1/src/client/resources/fabric-item-api-v1.client.mixins.json
new file mode 100644
index 000000000..daa913dc5
--- /dev/null
+++ b/fabric-item-api-v1/src/client/resources/fabric-item-api-v1.client.mixins.json
@@ -0,0 +1,13 @@
+{
+  "required": true,
+  "package": "net.fabricmc.fabric.mixin.item.client",
+  "compatibilityLevel": "JAVA_16",
+  "client": [
+    "ClientPlayerInteractionManagerMixin",
+    "HeldItemRendererMixin",
+    "ItemStackMixin"
+  ],
+  "injectors": {
+    "defaultRequire": 1
+  }
+}
diff --git a/fabric-item-api-v1/src/main/java/net/fabricmc/fabric/api/item/v1/FabricItem.java b/fabric-item-api-v1/src/main/java/net/fabricmc/fabric/api/item/v1/FabricItem.java
index 547cb644c..3581389b4 100644
--- a/fabric-item-api-v1/src/main/java/net/fabricmc/fabric/api/item/v1/FabricItem.java
+++ b/fabric-item-api-v1/src/main/java/net/fabricmc/fabric/api/item/v1/FabricItem.java
@@ -19,7 +19,6 @@ package net.fabricmc.fabric.api.item.v1;
 import com.google.common.collect.Multimap;
 
 import net.minecraft.block.BlockState;
-import net.minecraft.client.network.ClientPlayerEntity;
 import net.minecraft.entity.EquipmentSlot;
 import net.minecraft.entity.attribute.EntityAttribute;
 import net.minecraft.entity.attribute.EntityAttributeModifier;
@@ -42,7 +41,7 @@ public interface FabricItem {
 	 * This function is called on the client side when the NBT or count of the stack has changed, but not the item,
 	 * and returning false cancels this animation.
 	 *
-	 * @param player   the current player; this may be safely cast to {@link ClientPlayerEntity} in client-only code
+	 * @param player   the current player; this may be safely cast to {@link net.minecraft.client.network.ClientPlayerEntity} in client-only code
 	 * @param hand     the hand; this function applies both to the main hand and the off hand
 	 * @param oldStack the previous stack, of this item
 	 * @param newStack the new stack, also of this item
diff --git a/fabric-item-api-v1/src/main/resources/fabric-item-api-v1.mixins.json b/fabric-item-api-v1/src/main/resources/fabric-item-api-v1.mixins.json
index 524c59b9a..e048e9cc1 100644
--- a/fabric-item-api-v1/src/main/resources/fabric-item-api-v1.mixins.json
+++ b/fabric-item-api-v1/src/main/resources/fabric-item-api-v1.mixins.json
@@ -7,11 +7,6 @@
     "ItemMixin",
     "LivingEntityMixin"
   ],
-  "client": [
-    "client.ClientPlayerInteractionManagerMixin",
-    "client.HeldItemRendererMixin",
-    "client.ItemStackMixin"
-  ],
   "injectors": {
     "defaultRequire": 1
   }
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 7798a4d0d..2c84ff11a 100644
--- a/fabric-item-api-v1/src/main/resources/fabric.mod.json
+++ b/fabric-item-api-v1/src/main/resources/fabric.mod.json
@@ -16,7 +16,11 @@
     "FabricMC"
   ],
   "mixins": [
-    "fabric-item-api-v1.mixins.json"
+    "fabric-item-api-v1.mixins.json",
+    {
+      "config": "fabric-item-api-v1.client.mixins.json",
+      "environment": "client"
+    }
   ],
   "depends": {
     "fabricloader": ">=0.4.0",
diff --git a/fabric-item-groups-v0/src/main/java/net/fabricmc/fabric/impl/item/group/CreativeGuiExtensions.java b/fabric-item-groups-v0/src/client/java/net/fabricmc/fabric/impl/item/group/CreativeGuiExtensions.java
similarity index 100%
rename from fabric-item-groups-v0/src/main/java/net/fabricmc/fabric/impl/item/group/CreativeGuiExtensions.java
rename to fabric-item-groups-v0/src/client/java/net/fabricmc/fabric/impl/item/group/CreativeGuiExtensions.java
diff --git a/fabric-item-groups-v0/src/main/java/net/fabricmc/fabric/impl/item/group/FabricCreativeGuiComponents.java b/fabric-item-groups-v0/src/client/java/net/fabricmc/fabric/impl/item/group/FabricCreativeGuiComponents.java
similarity index 100%
rename from fabric-item-groups-v0/src/main/java/net/fabricmc/fabric/impl/item/group/FabricCreativeGuiComponents.java
rename to fabric-item-groups-v0/src/client/java/net/fabricmc/fabric/impl/item/group/FabricCreativeGuiComponents.java
diff --git a/fabric-item-groups-v0/src/main/java/net/fabricmc/fabric/mixin/item/group/client/MixinCreativePlayerInventoryGui.java b/fabric-item-groups-v0/src/client/java/net/fabricmc/fabric/mixin/item/group/client/MixinCreativePlayerInventoryGui.java
similarity index 100%
rename from fabric-item-groups-v0/src/main/java/net/fabricmc/fabric/mixin/item/group/client/MixinCreativePlayerInventoryGui.java
rename to fabric-item-groups-v0/src/client/java/net/fabricmc/fabric/mixin/item/group/client/MixinCreativePlayerInventoryGui.java
diff --git a/fabric-item-groups-v0/src/main/java/net/fabricmc/fabric/mixin/item/group/client/MixinItemGroup.java b/fabric-item-groups-v0/src/client/java/net/fabricmc/fabric/mixin/item/group/client/MixinItemGroup.java
similarity index 100%
rename from fabric-item-groups-v0/src/main/java/net/fabricmc/fabric/mixin/item/group/client/MixinItemGroup.java
rename to fabric-item-groups-v0/src/client/java/net/fabricmc/fabric/mixin/item/group/client/MixinItemGroup.java
diff --git a/fabric-item-groups-v0/src/client/resources/fabric-item-groups-v0.client.mixins.json b/fabric-item-groups-v0/src/client/resources/fabric-item-groups-v0.client.mixins.json
new file mode 100644
index 000000000..38f03819d
--- /dev/null
+++ b/fabric-item-groups-v0/src/client/resources/fabric-item-groups-v0.client.mixins.json
@@ -0,0 +1,12 @@
+{
+  "required": true,
+  "package": "net.fabricmc.fabric.mixin.item.group.client",
+  "compatibilityLevel": "JAVA_16",
+  "client": [
+    "MixinItemGroup",
+    "MixinCreativePlayerInventoryGui"
+  ],
+  "injectors": {
+    "defaultRequire": 1
+  }
+}
diff --git a/fabric-item-groups-v0/src/main/resources/fabric-item-groups-v0.mixins.json b/fabric-item-groups-v0/src/main/resources/fabric-item-groups-v0.mixins.json
index b63a35dba..11e33697d 100644
--- a/fabric-item-groups-v0/src/main/resources/fabric-item-groups-v0.mixins.json
+++ b/fabric-item-groups-v0/src/main/resources/fabric-item-groups-v0.mixins.json
@@ -5,10 +5,6 @@
   "mixins": [
     "MixinItemGroup"
   ],
-  "client": [
-    "client.MixinItemGroup",
-    "client.MixinCreativePlayerInventoryGui"
-  ],
   "injectors": {
     "defaultRequire": 1
   }
diff --git a/fabric-item-groups-v0/src/main/resources/fabric.mod.json b/fabric-item-groups-v0/src/main/resources/fabric.mod.json
index 9e60fb649..dfd9ac8f1 100644
--- a/fabric-item-groups-v0/src/main/resources/fabric.mod.json
+++ b/fabric-item-groups-v0/src/main/resources/fabric.mod.json
@@ -23,7 +23,11 @@
   },
   "description": "An API for adding custom item groups.",
   "mixins": [
-    "fabric-item-groups-v0.mixins.json"
+    "fabric-item-groups-v0.mixins.json",
+    {
+      "config": "fabric-item-groups-v0.client.mixins.json",
+      "environment": "client"
+    }
   ],
   "custom": {
     "fabric-api:module-lifecycle": "stable"
diff --git a/fabric-key-binding-api-v1/build.gradle b/fabric-key-binding-api-v1/build.gradle
index 7b44b62cf..64dcf3c11 100644
--- a/fabric-key-binding-api-v1/build.gradle
+++ b/fabric-key-binding-api-v1/build.gradle
@@ -1,8 +1,8 @@
 archivesBaseName = "fabric-key-binding-api-v1"
 version = getSubprojectVersion(project)
 
-dependencies {
-	testmodImplementation project(path: ':fabric-api-base', configuration: 'namedElements')
-	testmodImplementation project(path: ':fabric-lifecycle-events-v1', configuration: 'namedElements')
-	testmodImplementation project(path: ':fabric-resource-loader-v0', configuration: 'namedElements')
-}
+testDependencies(project, [
+	':fabric-api-base',
+	':fabric-lifecycle-events-v1',
+	':fabric-resource-loader-v0'
+])
diff --git a/fabric-key-binding-api-v1/src/main/java/net/fabricmc/fabric/api/client/keybinding/v1/KeyBindingHelper.java b/fabric-key-binding-api-v1/src/client/java/net/fabricmc/fabric/api/client/keybinding/v1/KeyBindingHelper.java
similarity index 100%
rename from fabric-key-binding-api-v1/src/main/java/net/fabricmc/fabric/api/client/keybinding/v1/KeyBindingHelper.java
rename to fabric-key-binding-api-v1/src/client/java/net/fabricmc/fabric/api/client/keybinding/v1/KeyBindingHelper.java
diff --git a/fabric-key-binding-api-v1/src/main/java/net/fabricmc/fabric/impl/client/keybinding/KeyBindingRegistryImpl.java b/fabric-key-binding-api-v1/src/client/java/net/fabricmc/fabric/impl/client/keybinding/KeyBindingRegistryImpl.java
similarity index 100%
rename from fabric-key-binding-api-v1/src/main/java/net/fabricmc/fabric/impl/client/keybinding/KeyBindingRegistryImpl.java
rename to fabric-key-binding-api-v1/src/client/java/net/fabricmc/fabric/impl/client/keybinding/KeyBindingRegistryImpl.java
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/client/java/net/fabricmc/fabric/mixin/client/keybinding/KeyBindingAccessor.java
similarity index 100%
rename from fabric-key-binding-api-v1/src/main/java/net/fabricmc/fabric/mixin/client/keybinding/KeyBindingAccessor.java
rename to fabric-key-binding-api-v1/src/client/java/net/fabricmc/fabric/mixin/client/keybinding/KeyBindingAccessor.java
diff --git a/fabric-key-binding-api-v1/src/main/java/net/fabricmc/fabric/mixin/client/keybinding/KeyCodeAccessor.java b/fabric-key-binding-api-v1/src/client/java/net/fabricmc/fabric/mixin/client/keybinding/KeyCodeAccessor.java
similarity index 100%
rename from fabric-key-binding-api-v1/src/main/java/net/fabricmc/fabric/mixin/client/keybinding/KeyCodeAccessor.java
rename to fabric-key-binding-api-v1/src/client/java/net/fabricmc/fabric/mixin/client/keybinding/KeyCodeAccessor.java
diff --git a/fabric-key-binding-api-v1/src/main/java/net/fabricmc/fabric/mixin/client/keybinding/MixinGameOptions.java b/fabric-key-binding-api-v1/src/client/java/net/fabricmc/fabric/mixin/client/keybinding/MixinGameOptions.java
similarity index 100%
rename from fabric-key-binding-api-v1/src/main/java/net/fabricmc/fabric/mixin/client/keybinding/MixinGameOptions.java
rename to fabric-key-binding-api-v1/src/client/java/net/fabricmc/fabric/mixin/client/keybinding/MixinGameOptions.java
diff --git a/fabric-key-binding-api-v1/src/main/resources/assets/fabric-key-binding-api-v1/icon.png b/fabric-key-binding-api-v1/src/client/resources/assets/fabric-key-binding-api-v1/icon.png
similarity index 100%
rename from fabric-key-binding-api-v1/src/main/resources/assets/fabric-key-binding-api-v1/icon.png
rename to fabric-key-binding-api-v1/src/client/resources/assets/fabric-key-binding-api-v1/icon.png
diff --git a/fabric-key-binding-api-v1/src/main/resources/fabric-key-binding-api-v1.mixins.json b/fabric-key-binding-api-v1/src/client/resources/fabric-key-binding-api-v1.mixins.json
similarity index 100%
rename from fabric-key-binding-api-v1/src/main/resources/fabric-key-binding-api-v1.mixins.json
rename to fabric-key-binding-api-v1/src/client/resources/fabric-key-binding-api-v1.mixins.json
diff --git a/fabric-key-binding-api-v1/src/main/resources/fabric.mod.json b/fabric-key-binding-api-v1/src/client/resources/fabric.mod.json
similarity index 100%
rename from fabric-key-binding-api-v1/src/main/resources/fabric.mod.json
rename to fabric-key-binding-api-v1/src/client/resources/fabric.mod.json
diff --git a/fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/api/client/event/lifecycle/v1/ClientBlockEntityEvents.java b/fabric-lifecycle-events-v1/src/client/java/net/fabricmc/fabric/api/client/event/lifecycle/v1/ClientBlockEntityEvents.java
similarity index 100%
rename from fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/api/client/event/lifecycle/v1/ClientBlockEntityEvents.java
rename to fabric-lifecycle-events-v1/src/client/java/net/fabricmc/fabric/api/client/event/lifecycle/v1/ClientBlockEntityEvents.java
diff --git a/fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/api/client/event/lifecycle/v1/ClientChunkEvents.java b/fabric-lifecycle-events-v1/src/client/java/net/fabricmc/fabric/api/client/event/lifecycle/v1/ClientChunkEvents.java
similarity index 100%
rename from fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/api/client/event/lifecycle/v1/ClientChunkEvents.java
rename to fabric-lifecycle-events-v1/src/client/java/net/fabricmc/fabric/api/client/event/lifecycle/v1/ClientChunkEvents.java
diff --git a/fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/api/client/event/lifecycle/v1/ClientEntityEvents.java b/fabric-lifecycle-events-v1/src/client/java/net/fabricmc/fabric/api/client/event/lifecycle/v1/ClientEntityEvents.java
similarity index 100%
rename from fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/api/client/event/lifecycle/v1/ClientEntityEvents.java
rename to fabric-lifecycle-events-v1/src/client/java/net/fabricmc/fabric/api/client/event/lifecycle/v1/ClientEntityEvents.java
diff --git a/fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/api/client/event/lifecycle/v1/ClientLifecycleEvents.java b/fabric-lifecycle-events-v1/src/client/java/net/fabricmc/fabric/api/client/event/lifecycle/v1/ClientLifecycleEvents.java
similarity index 100%
rename from fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/api/client/event/lifecycle/v1/ClientLifecycleEvents.java
rename to fabric-lifecycle-events-v1/src/client/java/net/fabricmc/fabric/api/client/event/lifecycle/v1/ClientLifecycleEvents.java
diff --git a/fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/api/client/event/lifecycle/v1/ClientTickEvents.java b/fabric-lifecycle-events-v1/src/client/java/net/fabricmc/fabric/api/client/event/lifecycle/v1/ClientTickEvents.java
similarity index 100%
rename from fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/api/client/event/lifecycle/v1/ClientTickEvents.java
rename to fabric-lifecycle-events-v1/src/client/java/net/fabricmc/fabric/api/client/event/lifecycle/v1/ClientTickEvents.java
diff --git a/fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/impl/event/lifecycle/ClientLifecycleEventsImpl.java b/fabric-lifecycle-events-v1/src/client/java/net/fabricmc/fabric/impl/event/lifecycle/ClientLifecycleEventsImpl.java
similarity index 100%
rename from fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/impl/event/lifecycle/ClientLifecycleEventsImpl.java
rename to fabric-lifecycle-events-v1/src/client/java/net/fabricmc/fabric/impl/event/lifecycle/ClientLifecycleEventsImpl.java
diff --git a/fabric-lifecycle-events-v1/src/main/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
similarity index 100%
rename from fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/mixin/event/lifecycle/client/ClientChunkManagerMixin.java
rename to fabric-lifecycle-events-v1/src/client/java/net/fabricmc/fabric/mixin/event/lifecycle/client/ClientChunkManagerMixin.java
diff --git a/fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/mixin/event/lifecycle/client/ClientPlayNetworkHandlerMixin.java b/fabric-lifecycle-events-v1/src/client/java/net/fabricmc/fabric/mixin/event/lifecycle/client/ClientPlayNetworkHandlerMixin.java
similarity index 100%
rename from fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/mixin/event/lifecycle/client/ClientPlayNetworkHandlerMixin.java
rename to fabric-lifecycle-events-v1/src/client/java/net/fabricmc/fabric/mixin/event/lifecycle/client/ClientPlayNetworkHandlerMixin.java
diff --git a/fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/mixin/event/lifecycle/client/ClientWorldEntityLoaderMixin.java b/fabric-lifecycle-events-v1/src/client/java/net/fabricmc/fabric/mixin/event/lifecycle/client/ClientWorldEntityLoaderMixin.java
similarity index 100%
rename from fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/mixin/event/lifecycle/client/ClientWorldEntityLoaderMixin.java
rename to fabric-lifecycle-events-v1/src/client/java/net/fabricmc/fabric/mixin/event/lifecycle/client/ClientWorldEntityLoaderMixin.java
diff --git a/fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/mixin/event/lifecycle/client/ClientWorldMixin.java b/fabric-lifecycle-events-v1/src/client/java/net/fabricmc/fabric/mixin/event/lifecycle/client/ClientWorldMixin.java
similarity index 82%
rename from fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/mixin/event/lifecycle/client/ClientWorldMixin.java
rename to fabric-lifecycle-events-v1/src/client/java/net/fabricmc/fabric/mixin/event/lifecycle/client/ClientWorldMixin.java
index c9fa08247..951d643db 100644
--- a/fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/mixin/event/lifecycle/client/ClientWorldMixin.java
+++ b/fabric-lifecycle-events-v1/src/client/java/net/fabricmc/fabric/mixin/event/lifecycle/client/ClientWorldMixin.java
@@ -26,14 +26,12 @@ import net.minecraft.client.world.ClientWorld;
 import net.fabricmc.api.EnvType;
 import net.fabricmc.api.Environment;
 import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
-import net.fabricmc.fabric.mixin.event.lifecycle.WorldMixin;
 
 @Environment(EnvType.CLIENT)
 @Mixin(ClientWorld.class)
-public abstract class ClientWorldMixin extends WorldMixin {
-	// We override our injection on the clientworld so only the client world's tick invocations will run
-	@Override
-	protected void tickWorldAfterBlockEntities(CallbackInfo ci) {
+public abstract class ClientWorldMixin {
+	@Inject(method = "tickEntities", at = @At("TAIL"))
+	public void tickWorldAfterBlockEntities(CallbackInfo ci) {
 		ClientTickEvents.END_WORLD_TICK.invoker().onEndTick((ClientWorld) (Object) this);
 	}
 
diff --git a/fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/mixin/event/lifecycle/client/MinecraftClientMixin.java b/fabric-lifecycle-events-v1/src/client/java/net/fabricmc/fabric/mixin/event/lifecycle/client/MinecraftClientMixin.java
similarity index 100%
rename from fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/mixin/event/lifecycle/client/MinecraftClientMixin.java
rename to fabric-lifecycle-events-v1/src/client/java/net/fabricmc/fabric/mixin/event/lifecycle/client/MinecraftClientMixin.java
diff --git a/fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/mixin/event/lifecycle/client/WorldChunkMixin.java b/fabric-lifecycle-events-v1/src/client/java/net/fabricmc/fabric/mixin/event/lifecycle/client/WorldChunkMixin.java
similarity index 100%
rename from fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/mixin/event/lifecycle/client/WorldChunkMixin.java
rename to fabric-lifecycle-events-v1/src/client/java/net/fabricmc/fabric/mixin/event/lifecycle/client/WorldChunkMixin.java
diff --git a/fabric-lifecycle-events-v1/src/client/resources/fabric-lifecycle-events-v1.client.mixins.json b/fabric-lifecycle-events-v1/src/client/resources/fabric-lifecycle-events-v1.client.mixins.json
new file mode 100644
index 000000000..0df6d82dd
--- /dev/null
+++ b/fabric-lifecycle-events-v1/src/client/resources/fabric-lifecycle-events-v1.client.mixins.json
@@ -0,0 +1,17 @@
+{
+  "required": true,
+  "package": "net.fabricmc.fabric.mixin.event.lifecycle.client",
+  "compatibilityLevel": "JAVA_16",
+  "client": [
+    "ClientChunkManagerMixin",
+    "ClientPlayNetworkHandlerMixin",
+    "ClientWorldEntityLoaderMixin",
+    "ClientWorldMixin",
+    "MinecraftClientMixin",
+    "WorldChunkMixin"
+  ],
+  "injectors": {
+    "defaultRequire": 1,
+    "maxShiftBy": 3
+  }
+}
diff --git a/fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/mixin/event/lifecycle/ServerWorldMixin.java b/fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/mixin/event/lifecycle/ServerWorldMixin.java
index 39b1b2796..454abf4bc 100644
--- a/fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/mixin/event/lifecycle/ServerWorldMixin.java
+++ b/fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/mixin/event/lifecycle/ServerWorldMixin.java
@@ -35,4 +35,9 @@ public abstract class ServerWorldMixin {
 	private void startWorldTick(BooleanSupplier shouldKeepTicking, CallbackInfo ci) {
 		ServerTickEvents.START_WORLD_TICK.invoker().onStartTick((ServerWorld) (Object) this);
 	}
+
+	@Inject(method = "tick", at = @At(value = "TAIL"))
+	private void endWorldTick(BooleanSupplier shouldKeepTicking, CallbackInfo ci) {
+		ServerTickEvents.END_WORLD_TICK.invoker().onEndTick((ServerWorld) (Object) this);
+	}
 }
diff --git a/fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/mixin/event/lifecycle/WorldMixin.java b/fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/mixin/event/lifecycle/WorldMixin.java
index 3ff421f97..cc0bc634c 100644
--- a/fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/mixin/event/lifecycle/WorldMixin.java
+++ b/fabric-lifecycle-events-v1/src/main/java/net/fabricmc/fabric/mixin/event/lifecycle/WorldMixin.java
@@ -22,16 +22,11 @@ import java.util.Set;
 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.server.world.ServerWorld;
 import net.minecraft.util.profiler.Profiler;
 import net.minecraft.world.World;
 import net.minecraft.world.chunk.WorldChunk;
 
-import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
 import net.fabricmc.fabric.impl.event.lifecycle.LoadedChunksCache;
 
 @Mixin(World.class)
@@ -45,13 +40,6 @@ public abstract class WorldMixin implements LoadedChunksCache {
 	@Unique
 	private final Set<WorldChunk> loadedChunks = new HashSet<>();
 
-	@Inject(at = @At("RETURN"), method = "tickBlockEntities")
-	protected void tickWorldAfterBlockEntities(CallbackInfo ci) {
-		if (!this.isClient()) {
-			ServerTickEvents.END_WORLD_TICK.invoker().onEndTick((ServerWorld) (Object) this);
-		}
-	}
-
 	@Override
 	public Set<WorldChunk> fabric_getLoadedChunks() {
 		return this.loadedChunks;
diff --git a/fabric-lifecycle-events-v1/src/main/resources/fabric-lifecycle-events-v1.mixins.json b/fabric-lifecycle-events-v1/src/main/resources/fabric-lifecycle-events-v1.mixins.json
index d7ed0777f..76edd24d8 100644
--- a/fabric-lifecycle-events-v1/src/main/resources/fabric-lifecycle-events-v1.mixins.json
+++ b/fabric-lifecycle-events-v1/src/main/resources/fabric-lifecycle-events-v1.mixins.json
@@ -9,14 +9,6 @@
     "ThreadedAnvilChunkStorageMixin",
     "WorldMixin"
   ],
-  "client": [
-    "client.ClientChunkManagerMixin",
-    "client.ClientPlayNetworkHandlerMixin",
-    "client.ClientWorldEntityLoaderMixin",
-    "client.ClientWorldMixin",
-    "client.MinecraftClientMixin",
-    "client.WorldChunkMixin"
-  ],
   "server": [
     "server.WorldChunkMixin"
   ],
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 139083d4c..4b47c5605 100644
--- a/fabric-lifecycle-events-v1/src/main/resources/fabric.mod.json
+++ b/fabric-lifecycle-events-v1/src/main/resources/fabric.mod.json
@@ -24,7 +24,11 @@
     ]
   },
   "mixins": [
-    "fabric-lifecycle-events-v1.mixins.json"
+    "fabric-lifecycle-events-v1.mixins.json",
+    {
+      "config": "fabric-lifecycle-events-v1.client.mixins.json",
+      "environment": "client"
+    }
   ],
   "depends": {
     "fabricloader": ">=0.4.0",
diff --git a/fabric-mining-level-api-v1/build.gradle b/fabric-mining-level-api-v1/build.gradle
index 8230fc30c..6d1bd31bf 100644
--- a/fabric-mining-level-api-v1/build.gradle
+++ b/fabric-mining-level-api-v1/build.gradle
@@ -6,6 +6,6 @@ moduleDependencies(project, [
 		'fabric-resource-loader-v0'
 ])
 
-dependencies {
-	testmodImplementation project(path: ':fabric-lifecycle-events-v1', configuration: 'namedElements')
-}
+testDependencies(project, [
+		':fabric-lifecycle-events-v1'
+])
diff --git a/fabric-mining-level-api-v1/src/main/java/net/fabricmc/fabric/mixin/mininglevel/client/ClientPlayNetworkHandlerMixin.java b/fabric-mining-level-api-v1/src/client/java/net/fabricmc/fabric/mixin/mininglevel/client/ClientPlayNetworkHandlerMixin.java
similarity index 100%
rename from fabric-mining-level-api-v1/src/main/java/net/fabricmc/fabric/mixin/mininglevel/client/ClientPlayNetworkHandlerMixin.java
rename to fabric-mining-level-api-v1/src/client/java/net/fabricmc/fabric/mixin/mininglevel/client/ClientPlayNetworkHandlerMixin.java
diff --git a/fabric-mining-level-api-v1/src/client/resources/fabric-mining-level-api-v1.client.mixins.json b/fabric-mining-level-api-v1/src/client/resources/fabric-mining-level-api-v1.client.mixins.json
new file mode 100644
index 000000000..a4fb71104
--- /dev/null
+++ b/fabric-mining-level-api-v1/src/client/resources/fabric-mining-level-api-v1.client.mixins.json
@@ -0,0 +1,11 @@
+{
+  "required": true,
+  "package": "net.fabricmc.fabric.mixin.mininglevel.client",
+  "compatibilityLevel": "JAVA_16",
+  "client": [
+    "ClientPlayNetworkHandlerMixin"
+  ],
+  "injectors": {
+    "defaultRequire": 1
+  }
+}
diff --git a/fabric-mining-level-api-v1/src/main/resources/fabric-mining-level-api-v1.mixins.json b/fabric-mining-level-api-v1/src/main/resources/fabric-mining-level-api-v1.mixins.json
index 1d37af00d..37629d090 100644
--- a/fabric-mining-level-api-v1/src/main/resources/fabric-mining-level-api-v1.mixins.json
+++ b/fabric-mining-level-api-v1/src/main/resources/fabric-mining-level-api-v1.mixins.json
@@ -7,9 +7,6 @@
     "ShearsItemMixin",
     "SwordItemMixin"
   ],
-  "client": [
-    "client.ClientPlayNetworkHandlerMixin"
-  ],
   "injectors": {
     "defaultRequire": 1
   }
diff --git a/fabric-mining-level-api-v1/src/main/resources/fabric.mod.json b/fabric-mining-level-api-v1/src/main/resources/fabric.mod.json
index 7dc6e60c9..5462d8832 100644
--- a/fabric-mining-level-api-v1/src/main/resources/fabric.mod.json
+++ b/fabric-mining-level-api-v1/src/main/resources/fabric.mod.json
@@ -27,7 +27,11 @@
   },
   "description": "Adds support for custom mining levels.",
   "mixins": [
-    "fabric-mining-level-api-v1.mixins.json"
+    "fabric-mining-level-api-v1.mixins.json",
+    {
+      "config": "fabric-mining-level-api-v1.client.mixins.json",
+      "environment": "client"
+    }
   ],
   "custom": {
     "fabric-api:module-lifecycle": "stable"
diff --git a/fabric-models-v0/build.gradle b/fabric-models-v0/build.gradle
index 54331b1c6..abdaf24bf 100644
--- a/fabric-models-v0/build.gradle
+++ b/fabric-models-v0/build.gradle
@@ -5,7 +5,7 @@ moduleDependencies(project, [
 		'fabric-api-base'
 ])
 
-dependencies {
-	testmodImplementation project(path: ':fabric-rendering-v1', configuration: 'namedElements')
-	testmodImplementation project(path: ':fabric-resource-loader-v0', configuration: 'namedElements')
-}
+testDependencies(project, [
+		':fabric-rendering-v1',
+		':fabric-resource-loader-v0'
+])
diff --git a/fabric-models-v0/src/main/java/net/fabricmc/fabric/api/client/model/BakedModelManagerHelper.java b/fabric-models-v0/src/client/java/net/fabricmc/fabric/api/client/model/BakedModelManagerHelper.java
similarity index 100%
rename from fabric-models-v0/src/main/java/net/fabricmc/fabric/api/client/model/BakedModelManagerHelper.java
rename to fabric-models-v0/src/client/java/net/fabricmc/fabric/api/client/model/BakedModelManagerHelper.java
diff --git a/fabric-models-v0/src/main/java/net/fabricmc/fabric/api/client/model/ExtraModelProvider.java b/fabric-models-v0/src/client/java/net/fabricmc/fabric/api/client/model/ExtraModelProvider.java
similarity index 100%
rename from fabric-models-v0/src/main/java/net/fabricmc/fabric/api/client/model/ExtraModelProvider.java
rename to fabric-models-v0/src/client/java/net/fabricmc/fabric/api/client/model/ExtraModelProvider.java
diff --git a/fabric-models-v0/src/main/java/net/fabricmc/fabric/api/client/model/ModelAppender.java b/fabric-models-v0/src/client/java/net/fabricmc/fabric/api/client/model/ModelAppender.java
similarity index 100%
rename from fabric-models-v0/src/main/java/net/fabricmc/fabric/api/client/model/ModelAppender.java
rename to fabric-models-v0/src/client/java/net/fabricmc/fabric/api/client/model/ModelAppender.java
diff --git a/fabric-models-v0/src/main/java/net/fabricmc/fabric/api/client/model/ModelLoadingRegistry.java b/fabric-models-v0/src/client/java/net/fabricmc/fabric/api/client/model/ModelLoadingRegistry.java
similarity index 100%
rename from fabric-models-v0/src/main/java/net/fabricmc/fabric/api/client/model/ModelLoadingRegistry.java
rename to fabric-models-v0/src/client/java/net/fabricmc/fabric/api/client/model/ModelLoadingRegistry.java
diff --git a/fabric-models-v0/src/main/java/net/fabricmc/fabric/api/client/model/ModelProviderContext.java b/fabric-models-v0/src/client/java/net/fabricmc/fabric/api/client/model/ModelProviderContext.java
similarity index 100%
rename from fabric-models-v0/src/main/java/net/fabricmc/fabric/api/client/model/ModelProviderContext.java
rename to fabric-models-v0/src/client/java/net/fabricmc/fabric/api/client/model/ModelProviderContext.java
diff --git a/fabric-models-v0/src/main/java/net/fabricmc/fabric/api/client/model/ModelProviderException.java b/fabric-models-v0/src/client/java/net/fabricmc/fabric/api/client/model/ModelProviderException.java
similarity index 100%
rename from fabric-models-v0/src/main/java/net/fabricmc/fabric/api/client/model/ModelProviderException.java
rename to fabric-models-v0/src/client/java/net/fabricmc/fabric/api/client/model/ModelProviderException.java
diff --git a/fabric-models-v0/src/main/java/net/fabricmc/fabric/api/client/model/ModelResourceProvider.java b/fabric-models-v0/src/client/java/net/fabricmc/fabric/api/client/model/ModelResourceProvider.java
similarity index 100%
rename from fabric-models-v0/src/main/java/net/fabricmc/fabric/api/client/model/ModelResourceProvider.java
rename to fabric-models-v0/src/client/java/net/fabricmc/fabric/api/client/model/ModelResourceProvider.java
diff --git a/fabric-models-v0/src/main/java/net/fabricmc/fabric/api/client/model/ModelVariantProvider.java b/fabric-models-v0/src/client/java/net/fabricmc/fabric/api/client/model/ModelVariantProvider.java
similarity index 100%
rename from fabric-models-v0/src/main/java/net/fabricmc/fabric/api/client/model/ModelVariantProvider.java
rename to fabric-models-v0/src/client/java/net/fabricmc/fabric/api/client/model/ModelVariantProvider.java
diff --git a/fabric-models-v0/src/main/java/net/fabricmc/fabric/impl/client/model/BakedModelManagerHooks.java b/fabric-models-v0/src/client/java/net/fabricmc/fabric/impl/client/model/BakedModelManagerHooks.java
similarity index 100%
rename from fabric-models-v0/src/main/java/net/fabricmc/fabric/impl/client/model/BakedModelManagerHooks.java
rename to fabric-models-v0/src/client/java/net/fabricmc/fabric/impl/client/model/BakedModelManagerHooks.java
diff --git a/fabric-models-v0/src/main/java/net/fabricmc/fabric/impl/client/model/ModelLoaderHooks.java b/fabric-models-v0/src/client/java/net/fabricmc/fabric/impl/client/model/ModelLoaderHooks.java
similarity index 100%
rename from fabric-models-v0/src/main/java/net/fabricmc/fabric/impl/client/model/ModelLoaderHooks.java
rename to fabric-models-v0/src/client/java/net/fabricmc/fabric/impl/client/model/ModelLoaderHooks.java
diff --git a/fabric-models-v0/src/main/java/net/fabricmc/fabric/impl/client/model/ModelLoadingRegistryImpl.java b/fabric-models-v0/src/client/java/net/fabricmc/fabric/impl/client/model/ModelLoadingRegistryImpl.java
similarity index 100%
rename from fabric-models-v0/src/main/java/net/fabricmc/fabric/impl/client/model/ModelLoadingRegistryImpl.java
rename to fabric-models-v0/src/client/java/net/fabricmc/fabric/impl/client/model/ModelLoadingRegistryImpl.java
diff --git a/fabric-models-v0/src/main/java/net/fabricmc/fabric/mixin/client/model/MixinBakedModelManager.java b/fabric-models-v0/src/client/java/net/fabricmc/fabric/mixin/client/model/MixinBakedModelManager.java
similarity index 100%
rename from fabric-models-v0/src/main/java/net/fabricmc/fabric/mixin/client/model/MixinBakedModelManager.java
rename to fabric-models-v0/src/client/java/net/fabricmc/fabric/mixin/client/model/MixinBakedModelManager.java
diff --git a/fabric-models-v0/src/main/java/net/fabricmc/fabric/mixin/client/model/MixinModelLoader.java b/fabric-models-v0/src/client/java/net/fabricmc/fabric/mixin/client/model/MixinModelLoader.java
similarity index 100%
rename from fabric-models-v0/src/main/java/net/fabricmc/fabric/mixin/client/model/MixinModelLoader.java
rename to fabric-models-v0/src/client/java/net/fabricmc/fabric/mixin/client/model/MixinModelLoader.java
diff --git a/fabric-models-v0/src/main/resources/assets/fabric-models-v0/icon.png b/fabric-models-v0/src/client/resources/assets/fabric-models-v0/icon.png
similarity index 100%
rename from fabric-models-v0/src/main/resources/assets/fabric-models-v0/icon.png
rename to fabric-models-v0/src/client/resources/assets/fabric-models-v0/icon.png
diff --git a/fabric-models-v0/src/main/resources/fabric-models-v0.mixins.json b/fabric-models-v0/src/client/resources/fabric-models-v0.mixins.json
similarity index 100%
rename from fabric-models-v0/src/main/resources/fabric-models-v0.mixins.json
rename to fabric-models-v0/src/client/resources/fabric-models-v0.mixins.json
diff --git a/fabric-models-v0/src/main/resources/fabric.mod.json b/fabric-models-v0/src/client/resources/fabric.mod.json
similarity index 100%
rename from fabric-models-v0/src/main/resources/fabric.mod.json
rename to fabric-models-v0/src/client/resources/fabric.mod.json
diff --git a/fabric-networking-api-v1/build.gradle b/fabric-networking-api-v1/build.gradle
index 08d820114..8d952d347 100644
--- a/fabric-networking-api-v1/build.gradle
+++ b/fabric-networking-api-v1/build.gradle
@@ -5,8 +5,8 @@ moduleDependencies(project, [
 		'fabric-api-base'
 ])
 
-dependencies {
-	testmodImplementation project(path: ':fabric-command-api-v2', configuration: 'namedElements')
-	testmodImplementation project(path: ':fabric-lifecycle-events-v1', configuration: 'namedElements')
-	testmodImplementation project(path: ':fabric-key-binding-api-v1', configuration: 'namedElements')
-}
+testDependencies(project, [
+	':fabric-command-api-v2',
+	':fabric-lifecycle-events-v1',
+	':fabric-key-binding-api-v1'
+])
diff --git a/fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/api/client/networking/v1/C2SPlayChannelEvents.java b/fabric-networking-api-v1/src/client/java/net/fabricmc/fabric/api/client/networking/v1/C2SPlayChannelEvents.java
similarity index 100%
rename from fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/api/client/networking/v1/C2SPlayChannelEvents.java
rename to fabric-networking-api-v1/src/client/java/net/fabricmc/fabric/api/client/networking/v1/C2SPlayChannelEvents.java
diff --git a/fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/api/client/networking/v1/ClientLoginConnectionEvents.java b/fabric-networking-api-v1/src/client/java/net/fabricmc/fabric/api/client/networking/v1/ClientLoginConnectionEvents.java
similarity index 100%
rename from fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/api/client/networking/v1/ClientLoginConnectionEvents.java
rename to fabric-networking-api-v1/src/client/java/net/fabricmc/fabric/api/client/networking/v1/ClientLoginConnectionEvents.java
diff --git a/fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/api/client/networking/v1/ClientLoginNetworking.java b/fabric-networking-api-v1/src/client/java/net/fabricmc/fabric/api/client/networking/v1/ClientLoginNetworking.java
similarity index 100%
rename from fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/api/client/networking/v1/ClientLoginNetworking.java
rename to fabric-networking-api-v1/src/client/java/net/fabricmc/fabric/api/client/networking/v1/ClientLoginNetworking.java
diff --git a/fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/api/client/networking/v1/ClientPlayConnectionEvents.java b/fabric-networking-api-v1/src/client/java/net/fabricmc/fabric/api/client/networking/v1/ClientPlayConnectionEvents.java
similarity index 100%
rename from fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/api/client/networking/v1/ClientPlayConnectionEvents.java
rename to fabric-networking-api-v1/src/client/java/net/fabricmc/fabric/api/client/networking/v1/ClientPlayConnectionEvents.java
diff --git a/fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/api/client/networking/v1/ClientPlayNetworking.java b/fabric-networking-api-v1/src/client/java/net/fabricmc/fabric/api/client/networking/v1/ClientPlayNetworking.java
similarity index 100%
rename from fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/api/client/networking/v1/ClientPlayNetworking.java
rename to fabric-networking-api-v1/src/client/java/net/fabricmc/fabric/api/client/networking/v1/ClientPlayNetworking.java
diff --git a/fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/api/client/networking/v1/package-info.java b/fabric-networking-api-v1/src/client/java/net/fabricmc/fabric/api/client/networking/v1/package-info.java
similarity index 100%
rename from fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/api/client/networking/v1/package-info.java
rename to fabric-networking-api-v1/src/client/java/net/fabricmc/fabric/api/client/networking/v1/package-info.java
diff --git a/fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/impl/networking/client/ClientLoginNetworkAddon.java b/fabric-networking-api-v1/src/client/java/net/fabricmc/fabric/impl/networking/client/ClientLoginNetworkAddon.java
similarity index 100%
rename from fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/impl/networking/client/ClientLoginNetworkAddon.java
rename to fabric-networking-api-v1/src/client/java/net/fabricmc/fabric/impl/networking/client/ClientLoginNetworkAddon.java
diff --git a/fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/impl/networking/client/ClientNetworkingImpl.java b/fabric-networking-api-v1/src/client/java/net/fabricmc/fabric/impl/networking/client/ClientNetworkingImpl.java
similarity index 98%
rename from fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/impl/networking/client/ClientNetworkingImpl.java
rename to fabric-networking-api-v1/src/client/java/net/fabricmc/fabric/impl/networking/client/ClientNetworkingImpl.java
index 65820f25b..0b4685bbb 100644
--- a/fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/impl/networking/client/ClientNetworkingImpl.java
+++ b/fabric-networking-api-v1/src/client/java/net/fabricmc/fabric/impl/networking/client/ClientNetworkingImpl.java
@@ -92,7 +92,7 @@ public final class ClientNetworkingImpl {
 		// If the client's player is set this will work
 		if (MinecraftClient.getInstance().getNetworkHandler() != null) {
 			currentPlayAddon = null; // Shouldn't need this anymore
-			return ClientNetworkingImpl.getAddon(MinecraftClient.getInstance().getNetworkHandler());
+			return getAddon(MinecraftClient.getInstance().getNetworkHandler());
 		}
 
 		// We haven't hit the end of onGameJoin yet, use our backing field here to access the network handler
diff --git a/fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/impl/networking/client/ClientPlayNetworkAddon.java b/fabric-networking-api-v1/src/client/java/net/fabricmc/fabric/impl/networking/client/ClientPlayNetworkAddon.java
similarity index 100%
rename from fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/impl/networking/client/ClientPlayNetworkAddon.java
rename to fabric-networking-api-v1/src/client/java/net/fabricmc/fabric/impl/networking/client/ClientPlayNetworkAddon.java
diff --git a/fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/mixin/networking/accessor/ConnectScreenAccessor.java b/fabric-networking-api-v1/src/client/java/net/fabricmc/fabric/mixin/networking/accessor/ConnectScreenAccessor.java
similarity index 100%
rename from fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/mixin/networking/accessor/ConnectScreenAccessor.java
rename to fabric-networking-api-v1/src/client/java/net/fabricmc/fabric/mixin/networking/accessor/ConnectScreenAccessor.java
diff --git a/fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/mixin/networking/accessor/MinecraftClientAccessor.java b/fabric-networking-api-v1/src/client/java/net/fabricmc/fabric/mixin/networking/accessor/MinecraftClientAccessor.java
similarity index 100%
rename from fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/mixin/networking/accessor/MinecraftClientAccessor.java
rename to fabric-networking-api-v1/src/client/java/net/fabricmc/fabric/mixin/networking/accessor/MinecraftClientAccessor.java
diff --git a/fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/mixin/networking/client/ClientLoginNetworkHandlerMixin.java b/fabric-networking-api-v1/src/client/java/net/fabricmc/fabric/mixin/networking/client/ClientLoginNetworkHandlerMixin.java
similarity index 100%
rename from fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/mixin/networking/client/ClientLoginNetworkHandlerMixin.java
rename to fabric-networking-api-v1/src/client/java/net/fabricmc/fabric/mixin/networking/client/ClientLoginNetworkHandlerMixin.java
diff --git a/fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/mixin/networking/client/ClientPlayNetworkHandlerMixin.java b/fabric-networking-api-v1/src/client/java/net/fabricmc/fabric/mixin/networking/client/ClientPlayNetworkHandlerMixin.java
similarity index 100%
rename from fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/mixin/networking/client/ClientPlayNetworkHandlerMixin.java
rename to fabric-networking-api-v1/src/client/java/net/fabricmc/fabric/mixin/networking/client/ClientPlayNetworkHandlerMixin.java
diff --git a/fabric-networking-api-v1/src/client/resources/fabric-networking-api-v1.client.mixins.json b/fabric-networking-api-v1/src/client/resources/fabric-networking-api-v1.client.mixins.json
new file mode 100644
index 000000000..356826f22
--- /dev/null
+++ b/fabric-networking-api-v1/src/client/resources/fabric-networking-api-v1.client.mixins.json
@@ -0,0 +1,14 @@
+{
+  "required": true,
+  "package": "net.fabricmc.fabric.mixin.networking",
+  "compatibilityLevel": "JAVA_16",
+  "client": [
+    "accessor.ConnectScreenAccessor",
+    "accessor.MinecraftClientAccessor",
+    "client.ClientLoginNetworkHandlerMixin",
+    "client.ClientPlayNetworkHandlerMixin"
+  ],
+  "injectors": {
+    "defaultRequire": 1
+  }
+}
diff --git a/fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/api/networking/v1/ServerLoginNetworking.java b/fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/api/networking/v1/ServerLoginNetworking.java
index e295113c0..bc8e6dfe8 100644
--- a/fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/api/networking/v1/ServerLoginNetworking.java
+++ b/fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/api/networking/v1/ServerLoginNetworking.java
@@ -27,7 +27,6 @@ import net.minecraft.server.MinecraftServer;
 import net.minecraft.server.network.ServerLoginNetworkHandler;
 import net.minecraft.util.Identifier;
 
-import net.fabricmc.fabric.api.client.networking.v1.ClientLoginNetworking;
 import net.fabricmc.fabric.impl.networking.server.ServerNetworkingImpl;
 import net.fabricmc.fabric.mixin.networking.accessor.ServerLoginNetworkHandlerAccessor;
 
@@ -37,7 +36,7 @@ import net.fabricmc.fabric.mixin.networking.accessor.ServerLoginNetworkHandlerAc
  * <p>Server-side networking functionalities include receiving serverbound query responses and sending clientbound query requests.
  *
  * @see ServerPlayNetworking
- * @see ClientLoginNetworking
+ * @see net.fabricmc.fabric.api.client.networking.v1.ClientLoginNetworking
  */
 public final class ServerLoginNetworking {
 	/**
diff --git a/fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/api/networking/v1/ServerPlayNetworking.java b/fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/api/networking/v1/ServerPlayNetworking.java
index eab7d1494..9160b1bc6 100644
--- a/fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/api/networking/v1/ServerPlayNetworking.java
+++ b/fabric-networking-api-v1/src/main/java/net/fabricmc/fabric/api/networking/v1/ServerPlayNetworking.java
@@ -28,7 +28,6 @@ import net.minecraft.server.network.ServerPlayNetworkHandler;
 import net.minecraft.server.network.ServerPlayerEntity;
 import net.minecraft.util.Identifier;
 
-import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
 import net.fabricmc.fabric.impl.networking.server.ServerNetworkingImpl;
 
 /**
@@ -39,7 +38,7 @@ import net.fabricmc.fabric.impl.networking.server.ServerNetworkingImpl;
  * <p>This class should be only used for the logical server.
  *
  * @see ServerLoginNetworking
- * @see ClientPlayNetworking
+ * @see net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking
  */
 public final class ServerPlayNetworking {
 	/**
diff --git a/fabric-networking-api-v1/src/main/resources/fabric-networking-api-v1.mixins.json b/fabric-networking-api-v1/src/main/resources/fabric-networking-api-v1.mixins.json
index cf4f7bb9c..6f0d8e5e9 100644
--- a/fabric-networking-api-v1/src/main/resources/fabric-networking-api-v1.mixins.json
+++ b/fabric-networking-api-v1/src/main/resources/fabric-networking-api-v1.mixins.json
@@ -14,12 +14,6 @@
     "accessor.ServerLoginNetworkHandlerAccessor",
     "accessor.ThreadedAnvilChunkStorageAccessor"
   ],
-  "client": [
-    "accessor.ConnectScreenAccessor",
-    "accessor.MinecraftClientAccessor",
-    "client.ClientLoginNetworkHandlerMixin",
-    "client.ClientPlayNetworkHandlerMixin"
-  ],
   "injectors": {
     "defaultRequire": 1
   }
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 4264185e7..cd672bf78 100644
--- a/fabric-networking-api-v1/src/main/resources/fabric.mod.json
+++ b/fabric-networking-api-v1/src/main/resources/fabric.mod.json
@@ -29,7 +29,11 @@
   },
   "description": "Low-level, vanilla protocol oriented networking hooks.",
   "mixins": [
-    "fabric-networking-api-v1.mixins.json"
+    "fabric-networking-api-v1.mixins.json",
+    {
+      "config": "fabric-networking-api-v1.client.mixins.json",
+      "environment": "client"
+    }
   ],
   "custom": {
     "fabric-api:module-lifecycle": "stable"
diff --git a/fabric-object-builder-api-v1/build.gradle b/fabric-object-builder-api-v1/build.gradle
index 26b3ca1a5..8e7977d44 100644
--- a/fabric-object-builder-api-v1/build.gradle
+++ b/fabric-object-builder-api-v1/build.gradle
@@ -1,13 +1,13 @@
 archivesBaseName = "fabric-object-builder-api-v1"
 version = getSubprojectVersion(project)
 
-dependencies {
-	testmodImplementation project(path: ':fabric-command-api-v2', configuration: 'namedElements')
-}
-
 moduleDependencies(project, [
-		'fabric-api-base',
-		'fabric-resource-loader-v0'
+	'fabric-api-base',
+	'fabric-resource-loader-v0'
+])
+
+testDependencies(project, [
+	':fabric-command-api-v2'
 ])
 
 loom {
diff --git a/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/api/object/builder/v1/client/model/FabricModelPredicateProviderRegistry.java b/fabric-object-builder-api-v1/src/client/java/net/fabricmc/fabric/api/object/builder/v1/client/model/FabricModelPredicateProviderRegistry.java
similarity index 91%
rename from fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/api/object/builder/v1/client/model/FabricModelPredicateProviderRegistry.java
rename to fabric-object-builder-api-v1/src/client/java/net/fabricmc/fabric/api/object/builder/v1/client/model/FabricModelPredicateProviderRegistry.java
index 60b4423e4..90124bd11 100644
--- a/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/api/object/builder/v1/client/model/FabricModelPredicateProviderRegistry.java
+++ b/fabric-object-builder-api-v1/src/client/java/net/fabricmc/fabric/api/object/builder/v1/client/model/FabricModelPredicateProviderRegistry.java
@@ -20,8 +20,8 @@ import net.minecraft.item.Item;
 import net.minecraft.util.Identifier;
 import net.minecraft.client.item.UnclampedModelPredicateProvider;
 
-import net.fabricmc.fabric.mixin.object.builder.ModelPredicateProviderRegistryAccessor;
-import net.fabricmc.fabric.mixin.object.builder.ModelPredicateProviderRegistrySpecificAccessor;
+import net.fabricmc.fabric.mixin.object.builder.client.ModelPredicateProviderRegistryAccessor;
+import net.fabricmc.fabric.mixin.object.builder.client.ModelPredicateProviderRegistrySpecificAccessor;
 
 /**
  * Allows registering model predicate providers for item models.
diff --git a/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/mixin/object/builder/ModelPredicateProviderRegistryAccessor.java b/fabric-object-builder-api-v1/src/client/java/net/fabricmc/fabric/mixin/object/builder/client/ModelPredicateProviderRegistryAccessor.java
similarity index 95%
rename from fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/mixin/object/builder/ModelPredicateProviderRegistryAccessor.java
rename to fabric-object-builder-api-v1/src/client/java/net/fabricmc/fabric/mixin/object/builder/client/ModelPredicateProviderRegistryAccessor.java
index 9a695d167..20155381e 100644
--- a/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/mixin/object/builder/ModelPredicateProviderRegistryAccessor.java
+++ b/fabric-object-builder-api-v1/src/client/java/net/fabricmc/fabric/mixin/object/builder/client/ModelPredicateProviderRegistryAccessor.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package net.fabricmc.fabric.mixin.object.builder;
+package net.fabricmc.fabric.mixin.object.builder.client;
 
 import org.spongepowered.asm.mixin.Mixin;
 import org.spongepowered.asm.mixin.gen.Invoker;
diff --git a/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/mixin/object/builder/ModelPredicateProviderRegistrySpecificAccessor.java b/fabric-object-builder-api-v1/src/client/java/net/fabricmc/fabric/mixin/object/builder/client/ModelPredicateProviderRegistrySpecificAccessor.java
similarity index 95%
rename from fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/mixin/object/builder/ModelPredicateProviderRegistrySpecificAccessor.java
rename to fabric-object-builder-api-v1/src/client/java/net/fabricmc/fabric/mixin/object/builder/client/ModelPredicateProviderRegistrySpecificAccessor.java
index fbe6cd082..a0c31a655 100644
--- a/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/mixin/object/builder/ModelPredicateProviderRegistrySpecificAccessor.java
+++ b/fabric-object-builder-api-v1/src/client/java/net/fabricmc/fabric/mixin/object/builder/client/ModelPredicateProviderRegistrySpecificAccessor.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package net.fabricmc.fabric.mixin.object.builder;
+package net.fabricmc.fabric.mixin.object.builder.client;
 
 import org.spongepowered.asm.mixin.Mixin;
 import org.spongepowered.asm.mixin.gen.Invoker;
diff --git a/fabric-object-builder-api-v1/src/client/resources/fabric-object-builder-v1.client.mixins.json b/fabric-object-builder-api-v1/src/client/resources/fabric-object-builder-v1.client.mixins.json
new file mode 100644
index 000000000..a2e2d9426
--- /dev/null
+++ b/fabric-object-builder-api-v1/src/client/resources/fabric-object-builder-v1.client.mixins.json
@@ -0,0 +1,12 @@
+{
+  "required": true,
+  "package": "net.fabricmc.fabric.mixin.object.builder.client",
+  "compatibilityLevel": "JAVA_16",
+  "client": [
+    "ModelPredicateProviderRegistryAccessor",
+    "ModelPredicateProviderRegistrySpecificAccessor"
+  ],
+  "injectors": {
+    "defaultRequire": 1
+  }
+}
diff --git a/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/api/object/builder/v1/villager/VillagerProfessionBuilder.java b/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/api/object/builder/v1/villager/VillagerProfessionBuilder.java
index 152cc1feb..19400cb48 100644
--- a/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/api/object/builder/v1/villager/VillagerProfessionBuilder.java
+++ b/fabric-object-builder-api-v1/src/main/java/net/fabricmc/fabric/api/object/builder/v1/villager/VillagerProfessionBuilder.java
@@ -25,7 +25,6 @@ import org.jetbrains.annotations.Nullable;
 
 import net.minecraft.block.Block;
 import net.minecraft.block.Blocks;
-import net.minecraft.client.render.entity.feature.VillagerResourceMetadata;
 import net.minecraft.item.Item;
 import net.minecraft.sound.SoundEvent;
 import net.minecraft.util.Identifier;
@@ -40,7 +39,7 @@ import net.minecraft.world.poi.PointOfInterestType;
  *
  * <p>The texture for the villagers are located at <code>assets/IDENTIFIER_NAMESPACE/textures/entity/villager/profession/IDENTIFIER_PATH.png</code>
  *
- * <p>A corresponding <code>IDENTIFIER_PATH.mcmeta</code> file exits in the same directory to define properties such as the {@link VillagerResourceMetadata.HatType HatType} this profession would use.
+ * <p>A corresponding <code>IDENTIFIER_PATH.mcmeta</code> file exits in the same directory to define properties such as the {@link net.minecraft.client.render.entity.feature.VillagerResourceMetadata.HatType HatType} this profession would use.
  *
  * <p>Note this does not register any trades to these villagers. To register trades, add a new entry with your profession as the key to {@link TradeOffers#PROFESSION_TO_LEVELED_TRADE}.
  */
diff --git a/fabric-object-builder-api-v1/src/main/resources/fabric-object-builder-v1.mixins.json b/fabric-object-builder-api-v1/src/main/resources/fabric-object-builder-v1.mixins.json
index b92c1eeac..cffaf3fcd 100644
--- a/fabric-object-builder-api-v1/src/main/resources/fabric-object-builder-v1.mixins.json
+++ b/fabric-object-builder-api-v1/src/main/resources/fabric-object-builder-v1.mixins.json
@@ -14,10 +14,6 @@
     "TypeAwareTradeMixin",
     "VillagerTypeAccessor"
   ],
-  "client": [
-    "ModelPredicateProviderRegistryAccessor",
-    "ModelPredicateProviderRegistrySpecificAccessor"
-  ],
   "injectors": {
     "defaultRequire": 1
   }
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 156455342..29a34daac 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
@@ -21,7 +21,11 @@
   },
   "description": "Builders for objects vanilla has locked down.",
   "mixins": [
-    "fabric-object-builder-v1.mixins.json"
+    "fabric-object-builder-v1.mixins.json",
+    {
+      "config": "fabric-object-builder-v1.client.mixins.json",
+      "environment": "client"
+    }
   ],
   "accessWidener" : "fabric-object-builder-api-v1.accesswidener",
   "custom": {
diff --git a/fabric-particles-v1/build.gradle b/fabric-particles-v1/build.gradle
index f8beb7994..c94df3e36 100644
--- a/fabric-particles-v1/build.gradle
+++ b/fabric-particles-v1/build.gradle
@@ -2,7 +2,7 @@ archivesBaseName = "fabric-particles-v1"
 version = getSubprojectVersion(project)
 
 loom {
-	accessWidenerPath = file("src/main/resources/fabric-particles-v1.accesswidener")
+	accessWidenerPath = file("src/client/resources/fabric-particles-v1.accesswidener")
 }
 
 moduleDependencies(project, [
diff --git a/fabric-particles-v1/src/main/java/net/fabricmc/fabric/api/client/particle/v1/FabricSpriteProvider.java b/fabric-particles-v1/src/client/java/net/fabricmc/fabric/api/client/particle/v1/FabricSpriteProvider.java
similarity index 100%
rename from fabric-particles-v1/src/main/java/net/fabricmc/fabric/api/client/particle/v1/FabricSpriteProvider.java
rename to fabric-particles-v1/src/client/java/net/fabricmc/fabric/api/client/particle/v1/FabricSpriteProvider.java
diff --git a/fabric-particles-v1/src/main/java/net/fabricmc/fabric/api/client/particle/v1/ParticleFactoryRegistry.java b/fabric-particles-v1/src/client/java/net/fabricmc/fabric/api/client/particle/v1/ParticleFactoryRegistry.java
similarity index 100%
rename from fabric-particles-v1/src/main/java/net/fabricmc/fabric/api/client/particle/v1/ParticleFactoryRegistry.java
rename to fabric-particles-v1/src/client/java/net/fabricmc/fabric/api/client/particle/v1/ParticleFactoryRegistry.java
diff --git a/fabric-particles-v1/src/main/java/net/fabricmc/fabric/api/particle/v1/FabricParticleTypes.java b/fabric-particles-v1/src/client/java/net/fabricmc/fabric/api/particle/v1/FabricParticleTypes.java
similarity index 100%
rename from fabric-particles-v1/src/main/java/net/fabricmc/fabric/api/particle/v1/FabricParticleTypes.java
rename to fabric-particles-v1/src/client/java/net/fabricmc/fabric/api/particle/v1/FabricParticleTypes.java
diff --git a/fabric-particles-v1/src/main/java/net/fabricmc/fabric/impl/client/particle/FabricSpriteProviderImpl.java b/fabric-particles-v1/src/client/java/net/fabricmc/fabric/impl/client/particle/FabricSpriteProviderImpl.java
similarity index 100%
rename from fabric-particles-v1/src/main/java/net/fabricmc/fabric/impl/client/particle/FabricSpriteProviderImpl.java
rename to fabric-particles-v1/src/client/java/net/fabricmc/fabric/impl/client/particle/FabricSpriteProviderImpl.java
diff --git a/fabric-particles-v1/src/main/java/net/fabricmc/fabric/impl/client/particle/ParticleFactoryRegistryImpl.java b/fabric-particles-v1/src/client/java/net/fabricmc/fabric/impl/client/particle/ParticleFactoryRegistryImpl.java
similarity index 100%
rename from fabric-particles-v1/src/main/java/net/fabricmc/fabric/impl/client/particle/ParticleFactoryRegistryImpl.java
rename to fabric-particles-v1/src/client/java/net/fabricmc/fabric/impl/client/particle/ParticleFactoryRegistryImpl.java
diff --git a/fabric-particles-v1/src/main/java/net/fabricmc/fabric/mixin/client/particle/MixinParticleManager.java b/fabric-particles-v1/src/client/java/net/fabricmc/fabric/mixin/client/particle/MixinParticleManager.java
similarity index 100%
rename from fabric-particles-v1/src/main/java/net/fabricmc/fabric/mixin/client/particle/MixinParticleManager.java
rename to fabric-particles-v1/src/client/java/net/fabricmc/fabric/mixin/client/particle/MixinParticleManager.java
diff --git a/fabric-particles-v1/src/main/java/net/fabricmc/fabric/mixin/client/particle/ParticleManagerAccessor.java b/fabric-particles-v1/src/client/java/net/fabricmc/fabric/mixin/client/particle/ParticleManagerAccessor.java
similarity index 100%
rename from fabric-particles-v1/src/main/java/net/fabricmc/fabric/mixin/client/particle/ParticleManagerAccessor.java
rename to fabric-particles-v1/src/client/java/net/fabricmc/fabric/mixin/client/particle/ParticleManagerAccessor.java
diff --git a/fabric-particles-v1/src/main/resources/assets/fabric-particles-v1/icon.png b/fabric-particles-v1/src/client/resources/assets/fabric-particles-v1/icon.png
similarity index 100%
rename from fabric-particles-v1/src/main/resources/assets/fabric-particles-v1/icon.png
rename to fabric-particles-v1/src/client/resources/assets/fabric-particles-v1/icon.png
diff --git a/fabric-particles-v1/src/main/resources/fabric-particles-v1.accesswidener b/fabric-particles-v1/src/client/resources/fabric-particles-v1.accesswidener
similarity index 100%
rename from fabric-particles-v1/src/main/resources/fabric-particles-v1.accesswidener
rename to fabric-particles-v1/src/client/resources/fabric-particles-v1.accesswidener
diff --git a/fabric-particles-v1/src/main/resources/fabric-particles-v1.mixins.json b/fabric-particles-v1/src/client/resources/fabric-particles-v1.mixins.json
similarity index 100%
rename from fabric-particles-v1/src/main/resources/fabric-particles-v1.mixins.json
rename to fabric-particles-v1/src/client/resources/fabric-particles-v1.mixins.json
diff --git a/fabric-particles-v1/src/main/resources/fabric.mod.json b/fabric-particles-v1/src/client/resources/fabric.mod.json
similarity index 100%
rename from fabric-particles-v1/src/main/resources/fabric.mod.json
rename to fabric-particles-v1/src/client/resources/fabric.mod.json
diff --git a/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/impl/registry/sync/FabricRegistryClientInit.java b/fabric-registry-sync-v0/src/client/java/net/fabricmc/fabric/impl/registry/sync/FabricRegistryClientInit.java
similarity index 100%
rename from fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/impl/registry/sync/FabricRegistryClientInit.java
rename to fabric-registry-sync-v0/src/client/java/net/fabricmc/fabric/impl/registry/sync/FabricRegistryClientInit.java
diff --git a/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/mixin/registry/sync/client/MixinBlockColorMap.java b/fabric-registry-sync-v0/src/client/java/net/fabricmc/fabric/mixin/registry/sync/client/MixinBlockColorMap.java
similarity index 100%
rename from fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/mixin/registry/sync/client/MixinBlockColorMap.java
rename to fabric-registry-sync-v0/src/client/java/net/fabricmc/fabric/mixin/registry/sync/client/MixinBlockColorMap.java
diff --git a/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/mixin/registry/sync/client/MixinItemColorMap.java b/fabric-registry-sync-v0/src/client/java/net/fabricmc/fabric/mixin/registry/sync/client/MixinItemColorMap.java
similarity index 100%
rename from fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/mixin/registry/sync/client/MixinItemColorMap.java
rename to fabric-registry-sync-v0/src/client/java/net/fabricmc/fabric/mixin/registry/sync/client/MixinItemColorMap.java
diff --git a/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/mixin/registry/sync/client/MixinItemModelMap.java b/fabric-registry-sync-v0/src/client/java/net/fabricmc/fabric/mixin/registry/sync/client/MixinItemModelMap.java
similarity index 100%
rename from fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/mixin/registry/sync/client/MixinItemModelMap.java
rename to fabric-registry-sync-v0/src/client/java/net/fabricmc/fabric/mixin/registry/sync/client/MixinItemModelMap.java
diff --git a/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/mixin/registry/sync/client/MixinMinecraftClient.java b/fabric-registry-sync-v0/src/client/java/net/fabricmc/fabric/mixin/registry/sync/client/MixinMinecraftClient.java
similarity index 100%
rename from fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/mixin/registry/sync/client/MixinMinecraftClient.java
rename to fabric-registry-sync-v0/src/client/java/net/fabricmc/fabric/mixin/registry/sync/client/MixinMinecraftClient.java
diff --git a/fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/mixin/registry/sync/client/MixinParticleManager.java b/fabric-registry-sync-v0/src/client/java/net/fabricmc/fabric/mixin/registry/sync/client/MixinParticleManager.java
similarity index 100%
rename from fabric-registry-sync-v0/src/main/java/net/fabricmc/fabric/mixin/registry/sync/client/MixinParticleManager.java
rename to fabric-registry-sync-v0/src/client/java/net/fabricmc/fabric/mixin/registry/sync/client/MixinParticleManager.java
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
new file mode 100644
index 000000000..bda956aa1
--- /dev/null
+++ b/fabric-registry-sync-v0/src/client/resources/fabric-registry-sync-v0.client.mixins.json
@@ -0,0 +1,15 @@
+{
+  "required": true,
+  "package": "net.fabricmc.fabric.mixin.registry.sync.client",
+  "compatibilityLevel": "JAVA_16",
+  "client": [
+    "MixinBlockColorMap",
+    "MixinItemColorMap",
+    "MixinItemModelMap",
+    "MixinMinecraftClient",
+    "MixinParticleManager"
+  ],
+  "injectors": {
+    "defaultRequire": 1
+  }
+}
diff --git a/fabric-registry-sync-v0/src/main/resources/fabric-registry-sync-v0.mixins.json b/fabric-registry-sync-v0/src/main/resources/fabric-registry-sync-v0.mixins.json
index 4f5de4b26..b5aa95df0 100644
--- a/fabric-registry-sync-v0/src/main/resources/fabric-registry-sync-v0.mixins.json
+++ b/fabric-registry-sync-v0/src/main/resources/fabric-registry-sync-v0.mixins.json
@@ -16,13 +16,6 @@
     "MixinSimpleRegistry",
     "MixinStructuresToConfiguredStructuresFix"
   ],
-  "client": [
-    "client.MixinBlockColorMap",
-    "client.MixinItemColorMap",
-    "client.MixinItemModelMap",
-    "client.MixinMinecraftClient",
-    "client.MixinParticleManager"
-  ],
   "injectors": {
     "defaultRequire": 1
   }
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 aa069be5c..fe36dd055 100644
--- a/fabric-registry-sync-v0/src/main/resources/fabric.mod.json
+++ b/fabric-registry-sync-v0/src/main/resources/fabric.mod.json
@@ -22,7 +22,11 @@
   },
   "description": "Syncs registry mappings.",
   "mixins": [
-    "fabric-registry-sync-v0.mixins.json"
+    "fabric-registry-sync-v0.mixins.json",
+    {
+      "config": "fabric-registry-sync-v0.client.mixins.json",
+      "environment": "client"
+    }
   ],
   "entrypoints": {
     "main": [
diff --git a/fabric-renderer-api-v1/build.gradle b/fabric-renderer-api-v1/build.gradle
index 2a78b41f7..a350ffa51 100644
--- a/fabric-renderer-api-v1/build.gradle
+++ b/fabric-renderer-api-v1/build.gradle
@@ -2,14 +2,14 @@ archivesBaseName = "fabric-renderer-api-v1"
 version = getSubprojectVersion(project)
 
 moduleDependencies(project, [
-		'fabric-api-base'
+	'fabric-api-base'
 ])
 
-dependencies {
-	testmodImplementation project(path: ':fabric-blockrenderlayer-v1', configuration: 'namedElements')
-	testmodImplementation project(path: ':fabric-models-v0', configuration: 'namedElements')
-	testmodImplementation project(path: ':fabric-object-builder-api-v1', configuration: 'namedElements')
-	testmodImplementation project(path: ':fabric-renderer-indigo', configuration: 'namedElements')
-	testmodImplementation project(path: ':fabric-rendering-data-attachment-v1', configuration: 'namedElements')
-	testmodImplementation project(path: ':fabric-resource-loader-v0', configuration: 'namedElements')
-}
+testDependencies(project, [
+	':fabric-blockrenderlayer-v1',
+	':fabric-models-v0',
+	':fabric-object-builder-api-v1',
+	':fabric-renderer-indigo',
+	':fabric-rendering-data-attachment-v1',
+	':fabric-resource-loader-v0'
+])
diff --git a/fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/api/renderer/v1/Renderer.java b/fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/Renderer.java
similarity index 100%
rename from fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/api/renderer/v1/Renderer.java
rename to fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/Renderer.java
diff --git a/fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/api/renderer/v1/RendererAccess.java b/fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/RendererAccess.java
similarity index 100%
rename from fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/api/renderer/v1/RendererAccess.java
rename to fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/RendererAccess.java
diff --git a/fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/api/renderer/v1/material/BlendMode.java b/fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/material/BlendMode.java
similarity index 100%
rename from fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/api/renderer/v1/material/BlendMode.java
rename to fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/material/BlendMode.java
diff --git a/fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/api/renderer/v1/material/MaterialFinder.java b/fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/material/MaterialFinder.java
similarity index 100%
rename from fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/api/renderer/v1/material/MaterialFinder.java
rename to fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/material/MaterialFinder.java
diff --git a/fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/api/renderer/v1/material/RenderMaterial.java b/fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/material/RenderMaterial.java
similarity index 100%
rename from fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/api/renderer/v1/material/RenderMaterial.java
rename to fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/material/RenderMaterial.java
diff --git a/fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/api/renderer/v1/mesh/Mesh.java b/fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/mesh/Mesh.java
similarity index 100%
rename from fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/api/renderer/v1/mesh/Mesh.java
rename to fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/mesh/Mesh.java
diff --git a/fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/api/renderer/v1/mesh/MeshBuilder.java b/fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/mesh/MeshBuilder.java
similarity index 100%
rename from fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/api/renderer/v1/mesh/MeshBuilder.java
rename to fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/mesh/MeshBuilder.java
diff --git a/fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/api/renderer/v1/mesh/MutableQuadView.java b/fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/mesh/MutableQuadView.java
similarity index 100%
rename from fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/api/renderer/v1/mesh/MutableQuadView.java
rename to fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/mesh/MutableQuadView.java
diff --git a/fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/api/renderer/v1/mesh/QuadEmitter.java b/fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/mesh/QuadEmitter.java
similarity index 100%
rename from fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/api/renderer/v1/mesh/QuadEmitter.java
rename to fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/mesh/QuadEmitter.java
diff --git a/fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/api/renderer/v1/mesh/QuadView.java b/fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/mesh/QuadView.java
similarity index 100%
rename from fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/api/renderer/v1/mesh/QuadView.java
rename to fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/mesh/QuadView.java
diff --git a/fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/api/renderer/v1/model/FabricBakedModel.java b/fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/model/FabricBakedModel.java
similarity index 100%
rename from fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/api/renderer/v1/model/FabricBakedModel.java
rename to fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/model/FabricBakedModel.java
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/client/java/net/fabricmc/fabric/api/renderer/v1/model/ForwardingBakedModel.java
similarity index 100%
rename from fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/api/renderer/v1/model/ForwardingBakedModel.java
rename to fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/model/ForwardingBakedModel.java
diff --git a/fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/api/renderer/v1/model/ModelHelper.java b/fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/model/ModelHelper.java
similarity index 100%
rename from fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/api/renderer/v1/model/ModelHelper.java
rename to fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/model/ModelHelper.java
diff --git a/fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/api/renderer/v1/model/SpriteFinder.java b/fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/model/SpriteFinder.java
similarity index 100%
rename from fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/api/renderer/v1/model/SpriteFinder.java
rename to fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/model/SpriteFinder.java
diff --git a/fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/api/renderer/v1/render/RenderContext.java b/fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/render/RenderContext.java
similarity index 100%
rename from fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/api/renderer/v1/render/RenderContext.java
rename to fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/api/renderer/v1/render/RenderContext.java
diff --git a/fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/impl/renderer/RendererAccessImpl.java b/fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/impl/renderer/RendererAccessImpl.java
similarity index 100%
rename from fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/impl/renderer/RendererAccessImpl.java
rename to fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/impl/renderer/RendererAccessImpl.java
diff --git a/fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/impl/renderer/SpriteFinderImpl.java b/fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/impl/renderer/SpriteFinderImpl.java
similarity index 100%
rename from fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/impl/renderer/SpriteFinderImpl.java
rename to fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/impl/renderer/SpriteFinderImpl.java
diff --git a/fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/mixin/renderer/client/MixinBakedModel.java b/fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/mixin/renderer/client/MixinBakedModel.java
similarity index 100%
rename from fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/mixin/renderer/client/MixinBakedModel.java
rename to fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/mixin/renderer/client/MixinBakedModel.java
diff --git a/fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/mixin/renderer/client/MixinMultipartBakedModel.java b/fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/mixin/renderer/client/MixinMultipartBakedModel.java
similarity index 100%
rename from fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/mixin/renderer/client/MixinMultipartBakedModel.java
rename to fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/mixin/renderer/client/MixinMultipartBakedModel.java
diff --git a/fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/mixin/renderer/client/MixinSpriteAtlasTexture.java b/fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/mixin/renderer/client/MixinSpriteAtlasTexture.java
similarity index 100%
rename from fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/mixin/renderer/client/MixinSpriteAtlasTexture.java
rename to fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/mixin/renderer/client/MixinSpriteAtlasTexture.java
diff --git a/fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/mixin/renderer/client/MixinWeightedBakedModel.java b/fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/mixin/renderer/client/MixinWeightedBakedModel.java
similarity index 100%
rename from fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/mixin/renderer/client/MixinWeightedBakedModel.java
rename to fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/mixin/renderer/client/MixinWeightedBakedModel.java
diff --git a/fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/mixin/renderer/client/debughud/MixinDebugHud.java b/fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/mixin/renderer/client/debughud/MixinDebugHud.java
similarity index 100%
rename from fabric-renderer-api-v1/src/main/java/net/fabricmc/fabric/mixin/renderer/client/debughud/MixinDebugHud.java
rename to fabric-renderer-api-v1/src/client/java/net/fabricmc/fabric/mixin/renderer/client/debughud/MixinDebugHud.java
diff --git a/fabric-renderer-api-v1/src/main/resources/assets/fabric-renderer-api-v1/icon.png b/fabric-renderer-api-v1/src/client/resources/assets/fabric-renderer-api-v1/icon.png
similarity index 100%
rename from fabric-renderer-api-v1/src/main/resources/assets/fabric-renderer-api-v1/icon.png
rename to fabric-renderer-api-v1/src/client/resources/assets/fabric-renderer-api-v1/icon.png
diff --git a/fabric-renderer-api-v1/src/main/resources/fabric-renderer-api-v1.debughud.mixins.json b/fabric-renderer-api-v1/src/client/resources/fabric-renderer-api-v1.debughud.mixins.json
similarity index 100%
rename from fabric-renderer-api-v1/src/main/resources/fabric-renderer-api-v1.debughud.mixins.json
rename to fabric-renderer-api-v1/src/client/resources/fabric-renderer-api-v1.debughud.mixins.json
diff --git a/fabric-renderer-api-v1/src/main/resources/fabric-renderer-api-v1.mixins.json b/fabric-renderer-api-v1/src/client/resources/fabric-renderer-api-v1.mixins.json
similarity index 100%
rename from fabric-renderer-api-v1/src/main/resources/fabric-renderer-api-v1.mixins.json
rename to fabric-renderer-api-v1/src/client/resources/fabric-renderer-api-v1.mixins.json
diff --git a/fabric-renderer-api-v1/src/main/resources/fabric.mod.json b/fabric-renderer-api-v1/src/client/resources/fabric.mod.json
similarity index 100%
rename from fabric-renderer-api-v1/src/main/resources/fabric.mod.json
rename to fabric-renderer-api-v1/src/client/resources/fabric.mod.json
diff --git a/fabric-renderer-indigo/build.gradle b/fabric-renderer-indigo/build.gradle
index 101677076..01189e057 100644
--- a/fabric-renderer-indigo/build.gradle
+++ b/fabric-renderer-indigo/build.gradle
@@ -2,7 +2,7 @@ archivesBaseName = "fabric-renderer-indigo"
 version = getSubprojectVersion(project)
 
 loom {
-	accessWidenerPath = file("src/main/resources/fabric-renderer-indigo.accesswidener")
+	accessWidenerPath = file("src/client/resources/fabric-renderer-indigo.accesswidener")
 }
 
 moduleDependencies(project, [
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/Indigo.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/Indigo.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/Indigo.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/Indigo.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/IndigoConfig.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/IndigoConfig.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/IndigoConfig.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/IndigoConfig.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/IndigoMixinConfigPlugin.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/IndigoMixinConfigPlugin.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/IndigoMixinConfigPlugin.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/IndigoMixinConfigPlugin.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/IndigoRenderer.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/IndigoRenderer.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/IndigoRenderer.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/IndigoRenderer.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/RenderMaterialImpl.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/RenderMaterialImpl.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/RenderMaterialImpl.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/RenderMaterialImpl.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/accessor/AccessChunkRendererRegion.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/accessor/AccessChunkRendererRegion.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/accessor/AccessChunkRendererRegion.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/accessor/AccessChunkRendererRegion.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/AoCalculator.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/AoCalculator.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/AoCalculator.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/AoCalculator.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/AoConfig.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/AoConfig.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/AoConfig.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/AoConfig.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/AoFace.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/AoFace.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/AoFace.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/AoFace.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/AoFaceData.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/AoFaceData.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/AoFaceData.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/AoFaceData.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/AoLuminanceFix.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/AoLuminanceFix.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/AoLuminanceFix.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/AoLuminanceFix.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/AoVertexClampFunction.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/AoVertexClampFunction.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/AoVertexClampFunction.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/AoVertexClampFunction.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/VanillaAoHelper.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/VanillaAoHelper.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/VanillaAoHelper.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/VanillaAoHelper.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/helper/ColorHelper.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/helper/ColorHelper.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/helper/ColorHelper.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/helper/ColorHelper.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/helper/GeometryHelper.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/helper/GeometryHelper.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/helper/GeometryHelper.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/helper/GeometryHelper.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/helper/NormalHelper.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/helper/NormalHelper.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/helper/NormalHelper.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/helper/NormalHelper.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/helper/TextureHelper.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/helper/TextureHelper.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/helper/TextureHelper.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/helper/TextureHelper.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/mesh/EncodingFormat.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/mesh/EncodingFormat.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/mesh/EncodingFormat.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/mesh/EncodingFormat.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/mesh/MeshBuilderImpl.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/mesh/MeshBuilderImpl.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/mesh/MeshBuilderImpl.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/mesh/MeshBuilderImpl.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/mesh/MeshImpl.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/mesh/MeshImpl.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/mesh/MeshImpl.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/mesh/MeshImpl.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/mesh/MutableQuadViewImpl.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/mesh/MutableQuadViewImpl.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/mesh/MutableQuadViewImpl.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/mesh/MutableQuadViewImpl.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/mesh/QuadViewImpl.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/mesh/QuadViewImpl.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/mesh/QuadViewImpl.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/mesh/QuadViewImpl.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/AbstractMeshConsumer.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/AbstractMeshConsumer.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/AbstractMeshConsumer.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/AbstractMeshConsumer.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/AbstractQuadRenderer.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/AbstractQuadRenderer.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/AbstractQuadRenderer.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/AbstractQuadRenderer.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/AbstractRenderContext.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/AbstractRenderContext.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/AbstractRenderContext.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/AbstractRenderContext.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/BlockRenderContext.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/BlockRenderContext.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/BlockRenderContext.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/BlockRenderContext.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/BlockRenderInfo.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/BlockRenderInfo.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/BlockRenderInfo.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/BlockRenderInfo.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/ChunkRenderInfo.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/ChunkRenderInfo.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/ChunkRenderInfo.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/ChunkRenderInfo.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/IndigoQuadHandler.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/IndigoQuadHandler.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/IndigoQuadHandler.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/IndigoQuadHandler.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/ItemRenderContext.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/ItemRenderContext.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/ItemRenderContext.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/ItemRenderContext.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/TerrainBlockRenderInfo.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/TerrainBlockRenderInfo.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/TerrainBlockRenderInfo.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/TerrainBlockRenderInfo.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/TerrainFallbackConsumer.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/TerrainFallbackConsumer.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/TerrainFallbackConsumer.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/TerrainFallbackConsumer.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/TerrainRenderContext.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/TerrainRenderContext.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/TerrainRenderContext.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/TerrainRenderContext.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/mixin/client/indigo/renderer/MixinBlockModelRenderer.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/mixin/client/indigo/renderer/MixinBlockModelRenderer.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/mixin/client/indigo/renderer/MixinBlockModelRenderer.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/mixin/client/indigo/renderer/MixinBlockModelRenderer.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/mixin/client/indigo/renderer/MixinChunkRebuildTask.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/mixin/client/indigo/renderer/MixinChunkRebuildTask.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/mixin/client/indigo/renderer/MixinChunkRebuildTask.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/mixin/client/indigo/renderer/MixinChunkRebuildTask.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/mixin/client/indigo/renderer/MixinChunkRendererRegion.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/mixin/client/indigo/renderer/MixinChunkRendererRegion.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/mixin/client/indigo/renderer/MixinChunkRendererRegion.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/mixin/client/indigo/renderer/MixinChunkRendererRegion.java
diff --git a/fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/mixin/client/indigo/renderer/MixinItemRenderer.java b/fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/mixin/client/indigo/renderer/MixinItemRenderer.java
similarity index 100%
rename from fabric-renderer-indigo/src/main/java/net/fabricmc/fabric/mixin/client/indigo/renderer/MixinItemRenderer.java
rename to fabric-renderer-indigo/src/client/java/net/fabricmc/fabric/mixin/client/indigo/renderer/MixinItemRenderer.java
diff --git a/fabric-renderer-indigo/src/main/resources/assets/fabric-renderer-indigo/icon.png b/fabric-renderer-indigo/src/client/resources/assets/fabric-renderer-indigo/icon.png
similarity index 100%
rename from fabric-renderer-indigo/src/main/resources/assets/fabric-renderer-indigo/icon.png
rename to fabric-renderer-indigo/src/client/resources/assets/fabric-renderer-indigo/icon.png
diff --git a/fabric-renderer-indigo/src/main/resources/fabric-renderer-indigo.accesswidener b/fabric-renderer-indigo/src/client/resources/fabric-renderer-indigo.accesswidener
similarity index 100%
rename from fabric-renderer-indigo/src/main/resources/fabric-renderer-indigo.accesswidener
rename to fabric-renderer-indigo/src/client/resources/fabric-renderer-indigo.accesswidener
diff --git a/fabric-renderer-indigo/src/main/resources/fabric-renderer-indigo.mixins.json b/fabric-renderer-indigo/src/client/resources/fabric-renderer-indigo.mixins.json
old mode 100755
new mode 100644
similarity index 100%
rename from fabric-renderer-indigo/src/main/resources/fabric-renderer-indigo.mixins.json
rename to fabric-renderer-indigo/src/client/resources/fabric-renderer-indigo.mixins.json
diff --git a/fabric-renderer-indigo/src/main/resources/fabric.mod.json b/fabric-renderer-indigo/src/client/resources/fabric.mod.json
old mode 100755
new mode 100644
similarity index 100%
rename from fabric-renderer-indigo/src/main/resources/fabric.mod.json
rename to fabric-renderer-indigo/src/client/resources/fabric.mod.json
diff --git a/fabric-rendering-data-attachment-v1/src/main/java/net/fabricmc/fabric/mixin/rendering/data/attachment/client/MixinChunkRendererRegion.java b/fabric-rendering-data-attachment-v1/src/client/java/net/fabricmc/fabric/mixin/rendering/data/attachment/client/MixinChunkRendererRegion.java
similarity index 100%
rename from fabric-rendering-data-attachment-v1/src/main/java/net/fabricmc/fabric/mixin/rendering/data/attachment/client/MixinChunkRendererRegion.java
rename to fabric-rendering-data-attachment-v1/src/client/java/net/fabricmc/fabric/mixin/rendering/data/attachment/client/MixinChunkRendererRegion.java
diff --git a/fabric-rendering-data-attachment-v1/src/main/java/net/fabricmc/fabric/mixin/rendering/data/attachment/client/MixinChunkRendererRegionBuilder.java b/fabric-rendering-data-attachment-v1/src/client/java/net/fabricmc/fabric/mixin/rendering/data/attachment/client/MixinChunkRendererRegionBuilder.java
similarity index 100%
rename from fabric-rendering-data-attachment-v1/src/main/java/net/fabricmc/fabric/mixin/rendering/data/attachment/client/MixinChunkRendererRegionBuilder.java
rename to fabric-rendering-data-attachment-v1/src/client/java/net/fabricmc/fabric/mixin/rendering/data/attachment/client/MixinChunkRendererRegionBuilder.java
diff --git a/fabric-rendering-data-attachment-v1/src/client/resources/fabric-rendering-data-attachment-v1.client.mixins.json b/fabric-rendering-data-attachment-v1/src/client/resources/fabric-rendering-data-attachment-v1.client.mixins.json
new file mode 100644
index 000000000..f33276a84
--- /dev/null
+++ b/fabric-rendering-data-attachment-v1/src/client/resources/fabric-rendering-data-attachment-v1.client.mixins.json
@@ -0,0 +1,12 @@
+{
+  "required": true,
+  "package": "net.fabricmc.fabric.mixin.rendering.data.attachment.client",
+  "compatibilityLevel": "JAVA_16",
+  "client": [
+    "MixinChunkRendererRegion",
+    "MixinChunkRendererRegionBuilder"
+  ],
+  "injectors": {
+    "defaultRequire": 1
+  }
+}
diff --git a/fabric-rendering-data-attachment-v1/src/main/resources/fabric-rendering-data-attachment-v1.mixins.json b/fabric-rendering-data-attachment-v1/src/main/resources/fabric-rendering-data-attachment-v1.mixins.json
index d9afd2309..dcc44e520 100644
--- a/fabric-rendering-data-attachment-v1/src/main/resources/fabric-rendering-data-attachment-v1.mixins.json
+++ b/fabric-rendering-data-attachment-v1/src/main/resources/fabric-rendering-data-attachment-v1.mixins.json
@@ -6,10 +6,6 @@
     "MixinBlockEntity",
     "MixinViewableWorld"
   ],
-  "client": [
-    "client.MixinChunkRendererRegion",
-    "client.MixinChunkRendererRegionBuilder"
-  ],
   "injectors": {
     "defaultRequire": 1
   }
diff --git a/fabric-rendering-data-attachment-v1/src/main/resources/fabric.mod.json b/fabric-rendering-data-attachment-v1/src/main/resources/fabric.mod.json
index 14b650de4..03fcd4627 100644
--- a/fabric-rendering-data-attachment-v1/src/main/resources/fabric.mod.json
+++ b/fabric-rendering-data-attachment-v1/src/main/resources/fabric.mod.json
@@ -21,7 +21,11 @@
   },
   "description": "Thread-safe hooks for block entity data use during terrain rendering.",
   "mixins": [
-    "fabric-rendering-data-attachment-v1.mixins.json"
+    "fabric-rendering-data-attachment-v1.mixins.json",
+    {
+      "config": "fabric-rendering-data-attachment-v1.client.mixins.json",
+      "environment": "client"
+    }
   ],
   "custom": {
     "fabric-api:module-lifecycle": "stable"
diff --git a/fabric-rendering-fluids-v1/build.gradle b/fabric-rendering-fluids-v1/build.gradle
index 583bb42f0..a478b68d1 100644
--- a/fabric-rendering-fluids-v1/build.gradle
+++ b/fabric-rendering-fluids-v1/build.gradle
@@ -6,6 +6,6 @@ moduleDependencies(project, [
 		'fabric-textures-v0'
 ])
 
-dependencies {
-	testmodImplementation project(path: ':fabric-textures-v0', configuration: 'namedElements')
-}
+testDependencies(project, [
+	':fabric-textures-v0'
+])
diff --git a/fabric-rendering-fluids-v1/src/main/java/net/fabricmc/fabric/api/client/render/fluid/v1/FluidRenderHandler.java b/fabric-rendering-fluids-v1/src/client/java/net/fabricmc/fabric/api/client/render/fluid/v1/FluidRenderHandler.java
similarity index 100%
rename from fabric-rendering-fluids-v1/src/main/java/net/fabricmc/fabric/api/client/render/fluid/v1/FluidRenderHandler.java
rename to fabric-rendering-fluids-v1/src/client/java/net/fabricmc/fabric/api/client/render/fluid/v1/FluidRenderHandler.java
diff --git a/fabric-rendering-fluids-v1/src/main/java/net/fabricmc/fabric/api/client/render/fluid/v1/FluidRenderHandlerRegistry.java b/fabric-rendering-fluids-v1/src/client/java/net/fabricmc/fabric/api/client/render/fluid/v1/FluidRenderHandlerRegistry.java
similarity index 100%
rename from fabric-rendering-fluids-v1/src/main/java/net/fabricmc/fabric/api/client/render/fluid/v1/FluidRenderHandlerRegistry.java
rename to fabric-rendering-fluids-v1/src/client/java/net/fabricmc/fabric/api/client/render/fluid/v1/FluidRenderHandlerRegistry.java
diff --git a/fabric-rendering-fluids-v1/src/main/java/net/fabricmc/fabric/api/client/render/fluid/v1/SimpleFluidRenderHandler.java b/fabric-rendering-fluids-v1/src/client/java/net/fabricmc/fabric/api/client/render/fluid/v1/SimpleFluidRenderHandler.java
similarity index 100%
rename from fabric-rendering-fluids-v1/src/main/java/net/fabricmc/fabric/api/client/render/fluid/v1/SimpleFluidRenderHandler.java
rename to fabric-rendering-fluids-v1/src/client/java/net/fabricmc/fabric/api/client/render/fluid/v1/SimpleFluidRenderHandler.java
diff --git a/fabric-rendering-fluids-v1/src/main/java/net/fabricmc/fabric/impl/client/rendering/fluid/FluidRenderHandlerRegistryImpl.java b/fabric-rendering-fluids-v1/src/client/java/net/fabricmc/fabric/impl/client/rendering/fluid/FluidRenderHandlerRegistryImpl.java
similarity index 100%
rename from fabric-rendering-fluids-v1/src/main/java/net/fabricmc/fabric/impl/client/rendering/fluid/FluidRenderHandlerRegistryImpl.java
rename to fabric-rendering-fluids-v1/src/client/java/net/fabricmc/fabric/impl/client/rendering/fluid/FluidRenderHandlerRegistryImpl.java
diff --git a/fabric-rendering-fluids-v1/src/main/java/net/fabricmc/fabric/impl/client/rendering/fluid/FluidRendererHookContainer.java b/fabric-rendering-fluids-v1/src/client/java/net/fabricmc/fabric/impl/client/rendering/fluid/FluidRendererHookContainer.java
similarity index 100%
rename from fabric-rendering-fluids-v1/src/main/java/net/fabricmc/fabric/impl/client/rendering/fluid/FluidRendererHookContainer.java
rename to fabric-rendering-fluids-v1/src/client/java/net/fabricmc/fabric/impl/client/rendering/fluid/FluidRendererHookContainer.java
diff --git a/fabric-rendering-fluids-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/fluid/MixinFluidRenderer.java b/fabric-rendering-fluids-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/fluid/MixinFluidRenderer.java
similarity index 100%
rename from fabric-rendering-fluids-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/fluid/MixinFluidRenderer.java
rename to fabric-rendering-fluids-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/fluid/MixinFluidRenderer.java
diff --git a/fabric-rendering-fluids-v1/src/main/resources/assets/fabric-rendering-fluids-v1/icon.png b/fabric-rendering-fluids-v1/src/client/resources/assets/fabric-rendering-fluids-v1/icon.png
similarity index 100%
rename from fabric-rendering-fluids-v1/src/main/resources/assets/fabric-rendering-fluids-v1/icon.png
rename to fabric-rendering-fluids-v1/src/client/resources/assets/fabric-rendering-fluids-v1/icon.png
diff --git a/fabric-rendering-fluids-v1/src/main/resources/fabric-rendering-fluids-v1.mixins.json b/fabric-rendering-fluids-v1/src/client/resources/fabric-rendering-fluids-v1.mixins.json
similarity index 100%
rename from fabric-rendering-fluids-v1/src/main/resources/fabric-rendering-fluids-v1.mixins.json
rename to fabric-rendering-fluids-v1/src/client/resources/fabric-rendering-fluids-v1.mixins.json
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 b2f5ac309..f603faf12 100644
--- a/fabric-rendering-fluids-v1/src/main/resources/fabric.mod.json
+++ b/fabric-rendering-fluids-v1/src/main/resources/fabric.mod.json
@@ -23,7 +23,10 @@
   },
   "description": "Hooks for registering fluid renders.",
   "mixins": [
-    "fabric-rendering-fluids-v1.mixins.json"
+    {
+      "config": "fabric-rendering-fluids-v1.mixins.json",
+      "environment": "client"
+    }
   ],
   "custom": {
     "fabric-api:module-lifecycle": "stable"
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/api/client/rendering/v1/ArmorRenderer.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/ArmorRenderer.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/api/client/rendering/v1/ArmorRenderer.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/ArmorRenderer.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/api/client/rendering/v1/BlockEntityRendererRegistry.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/BlockEntityRendererRegistry.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/api/client/rendering/v1/BlockEntityRendererRegistry.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/BlockEntityRendererRegistry.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/api/client/rendering/v1/BuiltinItemRenderer.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/BuiltinItemRenderer.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/api/client/rendering/v1/BuiltinItemRenderer.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/BuiltinItemRenderer.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/api/client/rendering/v1/BuiltinItemRendererRegistry.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/BuiltinItemRendererRegistry.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/api/client/rendering/v1/BuiltinItemRendererRegistry.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/BuiltinItemRendererRegistry.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/api/client/rendering/v1/ColorProviderRegistry.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/ColorProviderRegistry.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/api/client/rendering/v1/ColorProviderRegistry.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/ColorProviderRegistry.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/api/client/rendering/v1/DimensionRenderingRegistry.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/DimensionRenderingRegistry.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/api/client/rendering/v1/DimensionRenderingRegistry.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/DimensionRenderingRegistry.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/api/client/rendering/v1/EntityModelLayerRegistry.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/EntityModelLayerRegistry.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/api/client/rendering/v1/EntityModelLayerRegistry.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/EntityModelLayerRegistry.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/api/client/rendering/v1/EntityRendererRegistry.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/EntityRendererRegistry.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/api/client/rendering/v1/EntityRendererRegistry.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/EntityRendererRegistry.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/api/client/rendering/v1/HudRenderCallback.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/HudRenderCallback.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/api/client/rendering/v1/HudRenderCallback.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/HudRenderCallback.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/api/client/rendering/v1/InvalidateRenderStateCallback.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/InvalidateRenderStateCallback.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/api/client/rendering/v1/InvalidateRenderStateCallback.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/InvalidateRenderStateCallback.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/api/client/rendering/v1/LivingEntityFeatureRenderEvents.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/LivingEntityFeatureRenderEvents.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/api/client/rendering/v1/LivingEntityFeatureRenderEvents.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/LivingEntityFeatureRenderEvents.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/api/client/rendering/v1/LivingEntityFeatureRendererRegistrationCallback.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/LivingEntityFeatureRendererRegistrationCallback.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/api/client/rendering/v1/LivingEntityFeatureRendererRegistrationCallback.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/LivingEntityFeatureRendererRegistrationCallback.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/api/client/rendering/v1/TooltipComponentCallback.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/TooltipComponentCallback.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/api/client/rendering/v1/TooltipComponentCallback.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/TooltipComponentCallback.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/api/client/rendering/v1/WorldRenderContext.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/WorldRenderContext.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/api/client/rendering/v1/WorldRenderContext.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/WorldRenderContext.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/api/client/rendering/v1/WorldRenderEvents.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/WorldRenderEvents.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/api/client/rendering/v1/WorldRenderEvents.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/api/client/rendering/v1/WorldRenderEvents.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/impl/client/rendering/ArmorRendererRegistryImpl.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/impl/client/rendering/ArmorRendererRegistryImpl.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/impl/client/rendering/ArmorRendererRegistryImpl.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/impl/client/rendering/ArmorRendererRegistryImpl.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/impl/client/rendering/BlockEntityRendererRegistryImpl.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/impl/client/rendering/BlockEntityRendererRegistryImpl.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/impl/client/rendering/BlockEntityRendererRegistryImpl.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/impl/client/rendering/BlockEntityRendererRegistryImpl.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/impl/client/rendering/BuiltinItemRendererRegistryImpl.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/impl/client/rendering/BuiltinItemRendererRegistryImpl.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/impl/client/rendering/BuiltinItemRendererRegistryImpl.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/impl/client/rendering/BuiltinItemRendererRegistryImpl.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/impl/client/rendering/ColorProviderRegistryImpl.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/impl/client/rendering/ColorProviderRegistryImpl.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/impl/client/rendering/ColorProviderRegistryImpl.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/impl/client/rendering/ColorProviderRegistryImpl.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/impl/client/rendering/DimensionRenderingRegistryImpl.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/impl/client/rendering/DimensionRenderingRegistryImpl.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/impl/client/rendering/DimensionRenderingRegistryImpl.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/impl/client/rendering/DimensionRenderingRegistryImpl.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/impl/client/rendering/EntityModelLayerImpl.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/impl/client/rendering/EntityModelLayerImpl.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/impl/client/rendering/EntityModelLayerImpl.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/impl/client/rendering/EntityModelLayerImpl.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/impl/client/rendering/EntityRendererRegistryImpl.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/impl/client/rendering/EntityRendererRegistryImpl.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/impl/client/rendering/EntityRendererRegistryImpl.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/impl/client/rendering/EntityRendererRegistryImpl.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/impl/client/rendering/RegistrationHelperImpl.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/impl/client/rendering/RegistrationHelperImpl.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/impl/client/rendering/RegistrationHelperImpl.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/impl/client/rendering/RegistrationHelperImpl.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/impl/client/rendering/WorldRenderContextImpl.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/impl/client/rendering/WorldRenderContextImpl.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/impl/client/rendering/WorldRenderContextImpl.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/impl/client/rendering/WorldRenderContextImpl.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/CapeFeatureRendererMixin.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/CapeFeatureRendererMixin.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/CapeFeatureRendererMixin.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/CapeFeatureRendererMixin.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/DimensionEffectsAccessor.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/DimensionEffectsAccessor.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/DimensionEffectsAccessor.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/DimensionEffectsAccessor.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/EntityModelLayersAccessor.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/EntityModelLayersAccessor.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/EntityModelLayersAccessor.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/EntityModelLayersAccessor.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/EntityModelsMixin.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/EntityModelsMixin.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/EntityModelsMixin.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/EntityModelsMixin.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/LivingEntityRendererAccessor.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/LivingEntityRendererAccessor.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/LivingEntityRendererAccessor.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/LivingEntityRendererAccessor.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/MixinArmorFeatureRenderer.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/MixinArmorFeatureRenderer.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/MixinArmorFeatureRenderer.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/MixinArmorFeatureRenderer.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/MixinBlockColorMap.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/MixinBlockColorMap.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/MixinBlockColorMap.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/MixinBlockColorMap.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/MixinBlockEntityRenderers.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/MixinBlockEntityRenderers.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/MixinBlockEntityRenderers.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/MixinBlockEntityRenderers.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/MixinBuiltinModelItemRenderer.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/MixinBuiltinModelItemRenderer.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/MixinBuiltinModelItemRenderer.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/MixinBuiltinModelItemRenderer.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/MixinEntityRenderers.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/MixinEntityRenderers.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/MixinEntityRenderers.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/MixinEntityRenderers.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/MixinInGameHud.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/MixinInGameHud.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/MixinInGameHud.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/MixinInGameHud.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/MixinItemColorMap.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/MixinItemColorMap.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/MixinItemColorMap.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/MixinItemColorMap.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/MixinWorldRenderer.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/MixinWorldRenderer.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/MixinWorldRenderer.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/MixinWorldRenderer.java
diff --git a/fabric-rendering-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/ScreenMixin.java b/fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/ScreenMixin.java
similarity index 100%
rename from fabric-rendering-v1/src/main/java/net/fabricmc/fabric/mixin/client/rendering/ScreenMixin.java
rename to fabric-rendering-v1/src/client/java/net/fabricmc/fabric/mixin/client/rendering/ScreenMixin.java
diff --git a/fabric-rendering-v1/src/main/resources/assets/fabric-rendering-v1/icon.png b/fabric-rendering-v1/src/client/resources/assets/fabric-rendering-v1/icon.png
similarity index 100%
rename from fabric-rendering-v1/src/main/resources/assets/fabric-rendering-v1/icon.png
rename to fabric-rendering-v1/src/client/resources/assets/fabric-rendering-v1/icon.png
diff --git a/fabric-rendering-v1/src/main/resources/fabric-rendering-v1.mixins.json b/fabric-rendering-v1/src/client/resources/fabric-rendering-v1.mixins.json
similarity index 100%
rename from fabric-rendering-v1/src/main/resources/fabric-rendering-v1.mixins.json
rename to fabric-rendering-v1/src/client/resources/fabric-rendering-v1.mixins.json
diff --git a/fabric-rendering-v1/src/main/resources/fabric.mod.json b/fabric-rendering-v1/src/client/resources/fabric.mod.json
similarity index 100%
rename from fabric-rendering-v1/src/main/resources/fabric.mod.json
rename to fabric-rendering-v1/src/client/resources/fabric.mod.json
diff --git a/fabric-resource-conditions-api-v1/build.gradle b/fabric-resource-conditions-api-v1/build.gradle
index d9b0b0434..92fe427d9 100644
--- a/fabric-resource-conditions-api-v1/build.gradle
+++ b/fabric-resource-conditions-api-v1/build.gradle
@@ -1,6 +1,6 @@
 archivesBaseName = "fabric-resource-conditions-api-v1"
 version = getSubprojectVersion(project)
 
-dependencies {
-	testmodImplementation project(path: ':fabric-gametest-api-v1', configuration: 'namedElements')
-}
+testDependencies(project, [
+	':fabric-gametest-api-v1'
+])
diff --git a/fabric-resource-loader-v0/build.gradle b/fabric-resource-loader-v0/build.gradle
index 32d644bfb..f65ec6e1d 100644
--- a/fabric-resource-loader-v0/build.gradle
+++ b/fabric-resource-loader-v0/build.gradle
@@ -1,11 +1,11 @@
 archivesBaseName = "fabric-resource-loader-v0"
 version = getSubprojectVersion(project)
 
-dependencies {
-	testmodImplementation project(path: ':fabric-lifecycle-events-v1', configuration: 'namedElements')
-	testmodImplementation project(path: ':fabric-api-base', configuration: 'namedElements')
-}
-
 loom {
 	accessWidenerPath = file("src/main/resources/fabric-resource-loader-v0.accesswidener")
 }
+
+testDependencies(project, [
+	':fabric-lifecycle-events-v1',
+	':fabric-api-base'
+])
diff --git a/fabric-resource-loader-v0/src/main/java/net/fabricmc/fabric/mixin/resource/loader/client/ClientBuiltinResourcePackProviderMixin.java b/fabric-resource-loader-v0/src/client/java/net/fabricmc/fabric/mixin/resource/loader/client/ClientBuiltinResourcePackProviderMixin.java
similarity index 100%
rename from fabric-resource-loader-v0/src/main/java/net/fabricmc/fabric/mixin/resource/loader/client/ClientBuiltinResourcePackProviderMixin.java
rename to fabric-resource-loader-v0/src/client/java/net/fabricmc/fabric/mixin/resource/loader/client/ClientBuiltinResourcePackProviderMixin.java
diff --git a/fabric-resource-loader-v0/src/main/java/net/fabricmc/fabric/mixin/resource/loader/client/CreateWorldScreenMixin.java b/fabric-resource-loader-v0/src/client/java/net/fabricmc/fabric/mixin/resource/loader/client/CreateWorldScreenMixin.java
similarity index 100%
rename from fabric-resource-loader-v0/src/main/java/net/fabricmc/fabric/mixin/resource/loader/client/CreateWorldScreenMixin.java
rename to fabric-resource-loader-v0/src/client/java/net/fabricmc/fabric/mixin/resource/loader/client/CreateWorldScreenMixin.java
diff --git a/fabric-resource-loader-v0/src/main/java/net/fabricmc/fabric/mixin/resource/loader/client/FontManagerResourceReloadListenerMixin.java b/fabric-resource-loader-v0/src/client/java/net/fabricmc/fabric/mixin/resource/loader/client/FontManagerResourceReloadListenerMixin.java
similarity index 100%
rename from fabric-resource-loader-v0/src/main/java/net/fabricmc/fabric/mixin/resource/loader/client/FontManagerResourceReloadListenerMixin.java
rename to fabric-resource-loader-v0/src/client/java/net/fabricmc/fabric/mixin/resource/loader/client/FontManagerResourceReloadListenerMixin.java
diff --git a/fabric-resource-loader-v0/src/main/java/net/fabricmc/fabric/mixin/resource/loader/client/GameOptionsMixin.java b/fabric-resource-loader-v0/src/client/java/net/fabricmc/fabric/mixin/resource/loader/client/GameOptionsMixin.java
similarity index 100%
rename from fabric-resource-loader-v0/src/main/java/net/fabricmc/fabric/mixin/resource/loader/client/GameOptionsMixin.java
rename to fabric-resource-loader-v0/src/client/java/net/fabricmc/fabric/mixin/resource/loader/client/GameOptionsMixin.java
diff --git a/fabric-resource-loader-v0/src/main/java/net/fabricmc/fabric/mixin/resource/loader/client/KeyedResourceReloadListenerClientMixin.java b/fabric-resource-loader-v0/src/client/java/net/fabricmc/fabric/mixin/resource/loader/client/KeyedResourceReloadListenerClientMixin.java
similarity index 100%
rename from fabric-resource-loader-v0/src/main/java/net/fabricmc/fabric/mixin/resource/loader/client/KeyedResourceReloadListenerClientMixin.java
rename to fabric-resource-loader-v0/src/client/java/net/fabricmc/fabric/mixin/resource/loader/client/KeyedResourceReloadListenerClientMixin.java
diff --git a/fabric-resource-loader-v0/src/client/resources/fabric-resource-loader-v0.client.mixins.json b/fabric-resource-loader-v0/src/client/resources/fabric-resource-loader-v0.client.mixins.json
new file mode 100644
index 000000000..f2cc70818
--- /dev/null
+++ b/fabric-resource-loader-v0/src/client/resources/fabric-resource-loader-v0.client.mixins.json
@@ -0,0 +1,15 @@
+{
+  "required": true,
+  "package": "net.fabricmc.fabric.mixin.resource.loader.client",
+  "compatibilityLevel": "JAVA_16",
+  "client": [
+    "ClientBuiltinResourcePackProviderMixin",
+    "CreateWorldScreenMixin",
+    "FontManagerResourceReloadListenerMixin",
+    "GameOptionsMixin",
+    "KeyedResourceReloadListenerClientMixin"
+  ],
+  "injectors": {
+    "defaultRequire": 1
+  }
+}
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 feff26275..0334aeef2 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
@@ -15,13 +15,6 @@
     "ResourcePackManagerAccessor",
     "SimpleResourceReloadMixin"
   ],
-  "client": [
-    "client.ClientBuiltinResourcePackProviderMixin",
-    "client.CreateWorldScreenMixin",
-    "client.FontManagerResourceReloadListenerMixin",
-    "client.GameOptionsMixin",
-    "client.KeyedResourceReloadListenerClientMixin"
-  ],
   "injectors": {
     "defaultRequire": 1
   }
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 46ff79bdf..15b84594c 100644
--- a/fabric-resource-loader-v0/src/main/resources/fabric.mod.json
+++ b/fabric-resource-loader-v0/src/main/resources/fabric.mod.json
@@ -20,7 +20,11 @@
   },
   "description": "Asset and data resource loading.",
   "mixins": [
-    "fabric-resource-loader-v0.mixins.json"
+    "fabric-resource-loader-v0.mixins.json",
+    {
+      "config": "fabric-resource-loader-v0.client.mixins.json",
+      "environment": "client"
+    }
   ],
   "accessWidener": "fabric-resource-loader-v0.accesswidener",
   "custom": {
diff --git a/fabric-screen-api-v1/src/main/java/net/fabricmc/fabric/api/client/screen/v1/ScreenEvents.java b/fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/api/client/screen/v1/ScreenEvents.java
similarity index 100%
rename from fabric-screen-api-v1/src/main/java/net/fabricmc/fabric/api/client/screen/v1/ScreenEvents.java
rename to fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/api/client/screen/v1/ScreenEvents.java
diff --git a/fabric-screen-api-v1/src/main/java/net/fabricmc/fabric/api/client/screen/v1/ScreenKeyboardEvents.java b/fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/api/client/screen/v1/ScreenKeyboardEvents.java
similarity index 100%
rename from fabric-screen-api-v1/src/main/java/net/fabricmc/fabric/api/client/screen/v1/ScreenKeyboardEvents.java
rename to fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/api/client/screen/v1/ScreenKeyboardEvents.java
diff --git a/fabric-screen-api-v1/src/main/java/net/fabricmc/fabric/api/client/screen/v1/ScreenMouseEvents.java b/fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/api/client/screen/v1/ScreenMouseEvents.java
similarity index 100%
rename from fabric-screen-api-v1/src/main/java/net/fabricmc/fabric/api/client/screen/v1/ScreenMouseEvents.java
rename to fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/api/client/screen/v1/ScreenMouseEvents.java
diff --git a/fabric-screen-api-v1/src/main/java/net/fabricmc/fabric/api/client/screen/v1/Screens.java b/fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/api/client/screen/v1/Screens.java
similarity index 100%
rename from fabric-screen-api-v1/src/main/java/net/fabricmc/fabric/api/client/screen/v1/Screens.java
rename to fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/api/client/screen/v1/Screens.java
diff --git a/fabric-screen-api-v1/src/main/java/net/fabricmc/fabric/api/client/screen/v1/package-info.java b/fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/api/client/screen/v1/package-info.java
similarity index 100%
rename from fabric-screen-api-v1/src/main/java/net/fabricmc/fabric/api/client/screen/v1/package-info.java
rename to fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/api/client/screen/v1/package-info.java
diff --git a/fabric-screen-api-v1/src/main/java/net/fabricmc/fabric/impl/client/screen/ButtonList.java b/fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/impl/client/screen/ButtonList.java
similarity index 100%
rename from fabric-screen-api-v1/src/main/java/net/fabricmc/fabric/impl/client/screen/ButtonList.java
rename to fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/impl/client/screen/ButtonList.java
diff --git a/fabric-screen-api-v1/src/main/java/net/fabricmc/fabric/impl/client/screen/ScreenEventFactory.java b/fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/impl/client/screen/ScreenEventFactory.java
similarity index 100%
rename from fabric-screen-api-v1/src/main/java/net/fabricmc/fabric/impl/client/screen/ScreenEventFactory.java
rename to fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/impl/client/screen/ScreenEventFactory.java
diff --git a/fabric-screen-api-v1/src/main/java/net/fabricmc/fabric/impl/client/screen/ScreenExtensions.java b/fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/impl/client/screen/ScreenExtensions.java
similarity index 100%
rename from fabric-screen-api-v1/src/main/java/net/fabricmc/fabric/impl/client/screen/ScreenExtensions.java
rename to fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/impl/client/screen/ScreenExtensions.java
diff --git a/fabric-screen-api-v1/src/main/java/net/fabricmc/fabric/mixin/screen/GameRendererMixin.java b/fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/mixin/screen/GameRendererMixin.java
similarity index 100%
rename from fabric-screen-api-v1/src/main/java/net/fabricmc/fabric/mixin/screen/GameRendererMixin.java
rename to fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/mixin/screen/GameRendererMixin.java
diff --git a/fabric-screen-api-v1/src/main/java/net/fabricmc/fabric/mixin/screen/KeyboardMixin.java b/fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/mixin/screen/KeyboardMixin.java
similarity index 100%
rename from fabric-screen-api-v1/src/main/java/net/fabricmc/fabric/mixin/screen/KeyboardMixin.java
rename to fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/mixin/screen/KeyboardMixin.java
diff --git a/fabric-screen-api-v1/src/main/java/net/fabricmc/fabric/mixin/screen/MinecraftClientMixin.java b/fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/mixin/screen/MinecraftClientMixin.java
similarity index 100%
rename from fabric-screen-api-v1/src/main/java/net/fabricmc/fabric/mixin/screen/MinecraftClientMixin.java
rename to fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/mixin/screen/MinecraftClientMixin.java
diff --git a/fabric-screen-api-v1/src/main/java/net/fabricmc/fabric/mixin/screen/MouseMixin.java b/fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/mixin/screen/MouseMixin.java
similarity index 100%
rename from fabric-screen-api-v1/src/main/java/net/fabricmc/fabric/mixin/screen/MouseMixin.java
rename to fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/mixin/screen/MouseMixin.java
diff --git a/fabric-screen-api-v1/src/main/java/net/fabricmc/fabric/mixin/screen/ScreenAccessor.java b/fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/mixin/screen/ScreenAccessor.java
similarity index 100%
rename from fabric-screen-api-v1/src/main/java/net/fabricmc/fabric/mixin/screen/ScreenAccessor.java
rename to fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/mixin/screen/ScreenAccessor.java
diff --git a/fabric-screen-api-v1/src/main/java/net/fabricmc/fabric/mixin/screen/ScreenMixin.java b/fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/mixin/screen/ScreenMixin.java
similarity index 100%
rename from fabric-screen-api-v1/src/main/java/net/fabricmc/fabric/mixin/screen/ScreenMixin.java
rename to fabric-screen-api-v1/src/client/java/net/fabricmc/fabric/mixin/screen/ScreenMixin.java
diff --git a/fabric-screen-api-v1/src/main/resources/assets/fabric-screen-api-v1/icon.png b/fabric-screen-api-v1/src/client/resources/assets/fabric-screen-api-v1/icon.png
similarity index 100%
rename from fabric-screen-api-v1/src/main/resources/assets/fabric-screen-api-v1/icon.png
rename to fabric-screen-api-v1/src/client/resources/assets/fabric-screen-api-v1/icon.png
diff --git a/fabric-screen-api-v1/src/main/resources/fabric-screen-api-v1.mixins.json b/fabric-screen-api-v1/src/client/resources/fabric-screen-api-v1.mixins.json
similarity index 100%
rename from fabric-screen-api-v1/src/main/resources/fabric-screen-api-v1.mixins.json
rename to fabric-screen-api-v1/src/client/resources/fabric-screen-api-v1.mixins.json
diff --git a/fabric-screen-api-v1/src/main/resources/fabric.mod.json b/fabric-screen-api-v1/src/client/resources/fabric.mod.json
similarity index 100%
rename from fabric-screen-api-v1/src/main/resources/fabric.mod.json
rename to fabric-screen-api-v1/src/client/resources/fabric.mod.json
diff --git a/fabric-screen-handler-api-v1/build.gradle b/fabric-screen-handler-api-v1/build.gradle
index cd060ba94..9307647ca 100644
--- a/fabric-screen-handler-api-v1/build.gradle
+++ b/fabric-screen-handler-api-v1/build.gradle
@@ -5,12 +5,12 @@ loom {
 	accessWidenerPath = file('src/main/resources/fabric-screen-handler-api-v1.accesswidener')
 }
 
-dependencies {
-	testmodImplementation(project(path: ':fabric-object-builder-api-v1', configuration: 'namedElements'))
-	testmodRuntimeOnly(project(path: ':fabric-resource-loader-v0', configuration: 'namedElements'))
-}
-
 moduleDependencies(project, [
 		'fabric-api-base',
 		'fabric-networking-api-v1'
 ])
+
+testDependencies(project, [
+	':fabric-object-builder-api-v1',
+	':fabric-resource-loader-v0'
+])
diff --git a/fabric-screen-handler-api-v1/src/main/java/net/fabricmc/fabric/api/client/screenhandler/v1/ScreenRegistry.java b/fabric-screen-handler-api-v1/src/client/java/net/fabricmc/fabric/api/client/screenhandler/v1/ScreenRegistry.java
similarity index 100%
rename from fabric-screen-handler-api-v1/src/main/java/net/fabricmc/fabric/api/client/screenhandler/v1/ScreenRegistry.java
rename to fabric-screen-handler-api-v1/src/client/java/net/fabricmc/fabric/api/client/screenhandler/v1/ScreenRegistry.java
diff --git a/fabric-screen-handler-api-v1/src/main/java/net/fabricmc/fabric/api/client/screenhandler/v1/package-info.java b/fabric-screen-handler-api-v1/src/client/java/net/fabricmc/fabric/api/client/screenhandler/v1/package-info.java
similarity index 100%
rename from fabric-screen-handler-api-v1/src/main/java/net/fabricmc/fabric/api/client/screenhandler/v1/package-info.java
rename to fabric-screen-handler-api-v1/src/client/java/net/fabricmc/fabric/api/client/screenhandler/v1/package-info.java
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/client/java/net/fabricmc/fabric/impl/screenhandler/client/ClientNetworking.java
similarity index 100%
rename from fabric-screen-handler-api-v1/src/main/java/net/fabricmc/fabric/impl/screenhandler/client/ClientNetworking.java
rename to fabric-screen-handler-api-v1/src/client/java/net/fabricmc/fabric/impl/screenhandler/client/ClientNetworking.java
diff --git a/fabric-textures-v0/src/main/java/net/fabricmc/fabric/api/client/texture/DependentSprite.java b/fabric-textures-v0/src/client/java/net/fabricmc/fabric/api/client/texture/DependentSprite.java
similarity index 100%
rename from fabric-textures-v0/src/main/java/net/fabricmc/fabric/api/client/texture/DependentSprite.java
rename to fabric-textures-v0/src/client/java/net/fabricmc/fabric/api/client/texture/DependentSprite.java
diff --git a/fabric-textures-v0/src/main/java/net/fabricmc/fabric/api/event/client/ClientSpriteRegistryCallback.java b/fabric-textures-v0/src/client/java/net/fabricmc/fabric/api/event/client/ClientSpriteRegistryCallback.java
similarity index 100%
rename from fabric-textures-v0/src/main/java/net/fabricmc/fabric/api/event/client/ClientSpriteRegistryCallback.java
rename to fabric-textures-v0/src/client/java/net/fabricmc/fabric/api/event/client/ClientSpriteRegistryCallback.java
diff --git a/fabric-textures-v0/src/main/java/net/fabricmc/fabric/impl/client/texture/FabricSprite.java b/fabric-textures-v0/src/client/java/net/fabricmc/fabric/impl/client/texture/FabricSprite.java
similarity index 100%
rename from fabric-textures-v0/src/main/java/net/fabricmc/fabric/impl/client/texture/FabricSprite.java
rename to fabric-textures-v0/src/client/java/net/fabricmc/fabric/impl/client/texture/FabricSprite.java
diff --git a/fabric-textures-v0/src/main/java/net/fabricmc/fabric/impl/client/texture/SpriteRegistryCallbackHolder.java b/fabric-textures-v0/src/client/java/net/fabricmc/fabric/impl/client/texture/SpriteRegistryCallbackHolder.java
similarity index 100%
rename from fabric-textures-v0/src/main/java/net/fabricmc/fabric/impl/client/texture/SpriteRegistryCallbackHolder.java
rename to fabric-textures-v0/src/client/java/net/fabricmc/fabric/impl/client/texture/SpriteRegistryCallbackHolder.java
diff --git a/fabric-textures-v0/src/main/java/net/fabricmc/fabric/mixin/client/texture/MixinSpriteAtlasTexture.java b/fabric-textures-v0/src/client/java/net/fabricmc/fabric/mixin/client/texture/MixinSpriteAtlasTexture.java
similarity index 100%
rename from fabric-textures-v0/src/main/java/net/fabricmc/fabric/mixin/client/texture/MixinSpriteAtlasTexture.java
rename to fabric-textures-v0/src/client/java/net/fabricmc/fabric/mixin/client/texture/MixinSpriteAtlasTexture.java
diff --git a/fabric-textures-v0/src/main/resources/assets/fabric-textures-v0/icon.png b/fabric-textures-v0/src/client/resources/assets/fabric-textures-v0/icon.png
similarity index 100%
rename from fabric-textures-v0/src/main/resources/assets/fabric-textures-v0/icon.png
rename to fabric-textures-v0/src/client/resources/assets/fabric-textures-v0/icon.png
diff --git a/fabric-textures-v0/src/main/resources/fabric-textures-v0.mixins.json b/fabric-textures-v0/src/client/resources/fabric-textures-v0.mixins.json
similarity index 100%
rename from fabric-textures-v0/src/main/resources/fabric-textures-v0.mixins.json
rename to fabric-textures-v0/src/client/resources/fabric-textures-v0.mixins.json
diff --git a/fabric-textures-v0/src/main/resources/fabric.mod.json b/fabric-textures-v0/src/client/resources/fabric.mod.json
similarity index 100%
rename from fabric-textures-v0/src/main/resources/fabric.mod.json
rename to fabric-textures-v0/src/client/resources/fabric.mod.json
diff --git a/fabric-transfer-api-v1/build.gradle b/fabric-transfer-api-v1/build.gradle
index df1187261..acaa941eb 100644
--- a/fabric-transfer-api-v1/build.gradle
+++ b/fabric-transfer-api-v1/build.gradle
@@ -9,8 +9,8 @@ moduleDependencies(project, [
 	'fabric-textures-v0' // transitive dependency of Rendering Fluids
 ])
 
-dependencies {
-	testmodImplementation project(path: ':fabric-object-builder-api-v1', configuration: 'namedElements')
-	testmodImplementation project(path: ':fabric-rendering-v1', configuration: 'namedElements')
-	testmodImplementation project(path: ':fabric-resource-loader-v0', configuration: 'namedElements')
-}
+testDependencies(project, [
+	':fabric-object-builder-api-v1',
+	':fabric-rendering-v1',
+	':fabric-resource-loader-v0'
+])
diff --git a/fabric-transfer-api-v1/src/main/java/net/fabricmc/fabric/api/transfer/v1/client/fluid/FluidVariantRenderHandler.java b/fabric-transfer-api-v1/src/client/java/net/fabricmc/fabric/api/transfer/v1/client/fluid/FluidVariantRenderHandler.java
similarity index 100%
rename from fabric-transfer-api-v1/src/main/java/net/fabricmc/fabric/api/transfer/v1/client/fluid/FluidVariantRenderHandler.java
rename to fabric-transfer-api-v1/src/client/java/net/fabricmc/fabric/api/transfer/v1/client/fluid/FluidVariantRenderHandler.java
diff --git a/fabric-transfer-api-v1/src/main/java/net/fabricmc/fabric/api/transfer/v1/client/fluid/FluidVariantRendering.java b/fabric-transfer-api-v1/src/client/java/net/fabricmc/fabric/api/transfer/v1/client/fluid/FluidVariantRendering.java
similarity index 100%
rename from fabric-transfer-api-v1/src/main/java/net/fabricmc/fabric/api/transfer/v1/client/fluid/FluidVariantRendering.java
rename to fabric-transfer-api-v1/src/client/java/net/fabricmc/fabric/api/transfer/v1/client/fluid/FluidVariantRendering.java
diff --git a/fabric-transfer-api-v1/src/main/java/net/fabricmc/fabric/api/transfer/v1/fluid/FluidVariant.java b/fabric-transfer-api-v1/src/main/java/net/fabricmc/fabric/api/transfer/v1/fluid/FluidVariant.java
index 555874b4f..05e5351dc 100644
--- a/fabric-transfer-api-v1/src/main/java/net/fabricmc/fabric/api/transfer/v1/fluid/FluidVariant.java
+++ b/fabric-transfer-api-v1/src/main/java/net/fabricmc/fabric/api/transfer/v1/fluid/FluidVariant.java
@@ -24,7 +24,6 @@ import net.minecraft.fluid.Fluids;
 import net.minecraft.nbt.NbtCompound;
 import net.minecraft.network.PacketByteBuf;
 
-import net.fabricmc.fabric.api.transfer.v1.client.fluid.FluidVariantRendering;
 import net.fabricmc.fabric.api.transfer.v1.storage.TransferVariant;
 import net.fabricmc.fabric.impl.transfer.fluid.FluidVariantImpl;
 
@@ -33,7 +32,7 @@ import net.fabricmc.fabric.impl.transfer.fluid.FluidVariantImpl;
  *
  * <p>Do not extend this class. Use {@link #of(Fluid)} and {@link #of(Fluid, NbtCompound)} to create instances.
  *
- * <p>{@link FluidVariantRendering} can be used for client-side rendering of fluid variants.
+ * <p>{@link net.fabricmc.fabric.api.transfer.v1.client.fluid.FluidVariantRendering} can be used for client-side rendering of fluid variants.
  *
  * <p><b>Fluid variants must always be compared with {@link #equals}, never by reference!</b>
  * {@link #hashCode} is guaranteed to be correct and constant time independently of the size of the NBT.
diff --git a/gradle.properties b/gradle.properties
index 5f93e051d..5308fce7c 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx2560M
 version=0.53.0
 minecraft_version=1.19-pre1
 yarn_version=+build.4
-loader_version=0.14.5
+loader_version=0.14.6
 
 prerelease=true
 
diff --git a/gradle/module-validation.gradle b/gradle/module-validation.gradle
index 170a37b4f..0e1cea9c6 100644
--- a/gradle/module-validation.gradle
+++ b/gradle/module-validation.gradle
@@ -34,7 +34,15 @@ class ValidateModuleTask extends DefaultTask {
 
 	@TaskAction
 	void validate() {
-		def json = new JsonSlurper().parse(project.file("src/main/resources/fabric.mod.json") as File) as Map<String, Map<String, String>>;
+		def clientOnlyMod = false
+		def file = (project.file("src/main/resources/fabric.mod.json") as File)
+
+		if (!file.exists()) {
+			file = (project.file("src/client/resources/fabric.mod.json") as File)
+			clientOnlyMod = true
+		}
+
+		def json = new JsonSlurper().parse(file) as Map<String, Map<String, String>>
 
 		if (json.custom == null) {
 			throw new GradleException("Module ${project} does not have a custom value containing module lifecycle!")
diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json
index 9a50a4f25..f8078020f 100644
--- a/src/main/resources/fabric.mod.json
+++ b/src/main/resources/fabric.mod.json
@@ -16,7 +16,7 @@
     "FabricMC"
   ],
   "depends": {
-    "fabricloader": ">=0.14.5",
+    "fabricloader": ">=0.14.6",
     "java": ">=17",
     "minecraft": "~1.19-alpha.22.18.a"
   },