From 9ff28f4026bdf7405e2d23b9a1350f16b0a94853 Mon Sep 17 00:00:00 2001
From: modmuss50 <modmuss50@gmail.com>
Date: Sat, 21 May 2022 16:26:46 +0100
Subject: [PATCH] Split client only code into its own sourceset. (#2179)

A common source of crashes on modded Minecraft servers comes from modders accidently calling client only code from the client, this PR is another large step towards elimitating that.

This PR has been months in the making and years in the planning, requiring major changes to Loom & Loader. In recent Minecraft versions Mojang has made it easier than ever to cleanly split the jar, going against the status-quo of merging the client and server into one jar.

From the start we have designed Fabric to have a very clear split between client and common (client & server) code. Fabric has always encoraged keeping client only code seprate from the server, this can be seen at a fundamental level with the entrypoints in Loader. Fabric API's have all been designed with this mind.

This PR provides a compile safety net around Fabric API using client only code on the server. Even though there are almost 400 changed files, minimal changes beyond moving the files were required to achieve this in Fabric API, thanks to the effort of all contributors in the past.

These changes should not affect modders or players in anyway, a single "universal" jar is still produced. Im happy to awnswer any questions.
---
 build.gradle                                  |  83 ++++++++++++++++--
 .../client/screen/ContainerScreenFactory.java |   0
 .../client/screen/ScreenProviderRegistry.java |   0
 .../container/ScreenProviderRegistryImpl.java |   0
 .../container/ContainerProviderRegistry.java  |   3 +-
 .../api/event/client/ClientTickCallback.java  |   0
 .../api/event/client/ItemTooltipCallback.java |   0
 .../client/LegacyClientEventInvokers.java     |   0
 .../api/event/world/WorldTickCallback.java    |   3 +-
 .../client/keybinding/FabricKeyBinding.java   |   0
 .../client/keybinding/KeyBindingRegistry.java |   0
 .../assets/fabric-keybindings-v0/icon.png     | Bin
 .../resources/fabric.mod.json                 |   0
 .../api/network/ClientSidePacketRegistry.java |   3 +-
 .../ClientSidePacketRegistryImpl.java         |   0
 .../networking/OldClientNetworkingHooks.java  |   0
 .../event/network/C2SPacketTypeCallback.java  |   5 +-
 .../event/network/S2CPacketTypeCallback.java  |   3 +-
 .../fabric/api/network/PacketConsumer.java    |   3 +-
 .../v1/BlockEntityRendererRegistry.java       |   0
 .../v1/EntityModelLayerRegistry.java          |   0
 .../v1/EntityRendererRegistry.java            |   0
 ...tyFeatureRendererRegistrationCallback.java |   0
 .../assets/renderer-registries-v1/icon.png    | Bin
 .../resources/fabric.mod.json                 |   0
 .../client/render/ColorProviderRegistry.java  |   0
 .../render/InvalidateRenderStateCallback.java |   0
 .../rendering/RenderingCallbackInvoker.java   |   0
 .../assets/fabric-rendering-v0/icon.png       | Bin
 .../resources/fabric.mod.json                 |   0
 fabric-api-base/build.gradle                  |   8 +-
 fabric-api-lookup-api-v1/build.gradle         |   8 +-
 fabric-biome-api-v1/build.gradle              |   8 +-
 .../v1/BlockRenderLayerMap.java               |   0
 .../BlockRenderLayerMapImpl.java              |   0
 .../MixinBlockRenderLayer.java                |   0
 .../fabric-blockrenderlayer-v1/icon.png       | Bin
 .../fabric-blockrenderlayer-v1.mixins.json    |   0
 .../resources/fabric.mod.json                 |   0
 fabric-command-api-v2/build.gradle            |   8 +-
 .../command/v2/ClientCommandManager.java      |   0
 .../command/v2/FabricClientCommandSource.java |   0
 .../api/client/command/v2/package-info.java   |   0
 .../client/ClientCommandInternals.java        |   0
 .../client/ClientCommandSourceMixin.java      |   0
 .../client/ClientPlayNetworkHandlerMixin.java |   0
 .../client/ClientPlayerEntityMixin.java       |   0
 .../command/client/MinecraftClientMixin.java  |   0
 .../fabric-command-api-v2.client.mixins.json  |  14 +++
 .../fabric-command-api-v2.mixins.json         |   6 --
 .../src/main/resources/fabric.mod.json        |   6 +-
 .../client/MixinClientPlayNetworkHandler.java |   0
 ...c-content-registries-v0.client.mixins.json |  11 +++
 .../fabric-content-registries-v0.mixins.json  |   3 -
 .../src/main/resources/fabric.mod.json        |   6 +-
 .../datagen/client/MinecraftClientMixin.java  |   0
 ...-data-generation-api-v1.client.mixins.json |  11 +++
 .../fabric-data-generation-api-v1.mixins.json |   3 -
 .../src/main/resources/fabric.mod.json        |   6 +-
 fabric-dimensions-v1/build.gradle             |  12 +--
 fabric-entity-events-v1/build.gradle          |  12 +--
 .../event/elytra/ClientPlayerEntityMixin.java |   0
 ...fabric-entity-events-v1.client.mixins.json |  12 +++
 .../fabric-entity-events-v1.mixins.json       |   3 -
 .../src/main/resources/fabric.mod.json        |   6 +-
 .../MixinClientPlayerInteractionManager.java  |   2 +-
 .../client}/MixinMinecraftClient.java         |   2 +-
 ...c-events-interaction-v0.client.mixins.json |  12 +++
 .../fabric-events-interaction-v0.mixins.json  |   4 -
 .../src/main/resources/fabric.mod.json        |   6 +-
 fabric-game-rule-api-v1/build.gradle          |  10 +--
 .../gamerule/widget/DoubleRuleWidget.java     |   0
 .../impl/gamerule/widget/EnumRuleWidget.java  |   0
 .../client/EditGameRulesScreenAccessor.java   |   0
 .../gamerule/client/RuleListWidgetMixin.java  |   0
 .../client/RuleListWidgetVisitorMixin.java    |   0
 ...fabric-game-rule-api-v1.client.mixins.json |  13 +++
 .../fabric-game-rule-api-v1.mixins.json       |   5 --
 .../src/main/resources/fabric.mod.json        |   6 +-
 .../ClientPlayerInteractionManagerMixin.java  |   0
 .../item/client/HeldItemRendererMixin.java    |   0
 .../mixin/item/client/ItemStackMixin.java     |   0
 .../fabric-item-api-v1.client.mixins.json     |  13 +++
 .../fabric/api/item/v1/FabricItem.java        |   3 +-
 .../resources/fabric-item-api-v1.mixins.json  |   5 --
 .../src/main/resources/fabric.mod.json        |   6 +-
 .../item/group/CreativeGuiExtensions.java     |   0
 .../group/FabricCreativeGuiComponents.java    |   0
 .../MixinCreativePlayerInventoryGui.java      |   0
 .../item/group/client/MixinItemGroup.java     |   0
 .../fabric-item-groups-v0.client.mixins.json  |  12 +++
 .../fabric-item-groups-v0.mixins.json         |   4 -
 .../src/main/resources/fabric.mod.json        |   6 +-
 fabric-key-binding-api-v1/build.gradle        |  10 +--
 .../keybinding/v1/KeyBindingHelper.java       |   0
 .../keybinding/KeyBindingRegistryImpl.java    |   0
 .../client/keybinding/KeyBindingAccessor.java |   0
 .../client/keybinding/KeyCodeAccessor.java    |   0
 .../client/keybinding/MixinGameOptions.java   |   0
 .../assets/fabric-key-binding-api-v1/icon.png | Bin
 .../fabric-key-binding-api-v1.mixins.json     |   0
 .../resources/fabric.mod.json                 |   0
 .../lifecycle/v1/ClientBlockEntityEvents.java |   0
 .../event/lifecycle/v1/ClientChunkEvents.java |   0
 .../lifecycle/v1/ClientEntityEvents.java      |   0
 .../lifecycle/v1/ClientLifecycleEvents.java   |   0
 .../event/lifecycle/v1/ClientTickEvents.java  |   0
 .../lifecycle/ClientLifecycleEventsImpl.java  |   0
 .../client/ClientChunkManagerMixin.java       |   0
 .../client/ClientPlayNetworkHandlerMixin.java |   0
 .../client/ClientWorldEntityLoaderMixin.java  |   0
 .../lifecycle/client/ClientWorldMixin.java    |   8 +-
 .../client/MinecraftClientMixin.java          |   0
 .../lifecycle/client/WorldChunkMixin.java     |   0
 ...ric-lifecycle-events-v1.client.mixins.json |  17 ++++
 .../event/lifecycle/ServerWorldMixin.java     |   5 ++
 .../mixin/event/lifecycle/WorldMixin.java     |  12 ---
 .../fabric-lifecycle-events-v1.mixins.json    |   8 --
 .../src/main/resources/fabric.mod.json        |   6 +-
 fabric-mining-level-api-v1/build.gradle       |   6 +-
 .../client/ClientPlayNetworkHandlerMixin.java |   0
 ...ric-mining-level-api-v1.client.mixins.json |  11 +++
 .../fabric-mining-level-api-v1.mixins.json    |   3 -
 .../src/main/resources/fabric.mod.json        |   6 +-
 fabric-models-v0/build.gradle                 |   8 +-
 .../client/model/BakedModelManagerHelper.java |   0
 .../api/client/model/ExtraModelProvider.java  |   0
 .../api/client/model/ModelAppender.java       |   0
 .../client/model/ModelLoadingRegistry.java    |   0
 .../client/model/ModelProviderContext.java    |   0
 .../client/model/ModelProviderException.java  |   0
 .../client/model/ModelResourceProvider.java   |   0
 .../client/model/ModelVariantProvider.java    |   0
 .../client/model/BakedModelManagerHooks.java  |   0
 .../impl/client/model/ModelLoaderHooks.java   |   0
 .../model/ModelLoadingRegistryImpl.java       |   0
 .../client/model/MixinBakedModelManager.java  |   0
 .../mixin/client/model/MixinModelLoader.java  |   0
 .../assets/fabric-models-v0/icon.png          | Bin
 .../resources/fabric-models-v0.mixins.json    |   0
 .../resources/fabric.mod.json                 |   0
 fabric-networking-api-v1/build.gradle         |  10 +--
 .../networking/v1/C2SPlayChannelEvents.java   |   0
 .../v1/ClientLoginConnectionEvents.java       |   0
 .../networking/v1/ClientLoginNetworking.java  |   0
 .../v1/ClientPlayConnectionEvents.java        |   0
 .../networking/v1/ClientPlayNetworking.java   |   0
 .../client/networking/v1/package-info.java    |   0
 .../client/ClientLoginNetworkAddon.java       |   0
 .../client/ClientNetworkingImpl.java          |   2 +-
 .../client/ClientPlayNetworkAddon.java        |   0
 .../accessor/ConnectScreenAccessor.java       |   0
 .../accessor/MinecraftClientAccessor.java     |   0
 .../ClientLoginNetworkHandlerMixin.java       |   0
 .../client/ClientPlayNetworkHandlerMixin.java |   0
 ...abric-networking-api-v1.client.mixins.json |  14 +++
 .../networking/v1/ServerLoginNetworking.java  |   3 +-
 .../networking/v1/ServerPlayNetworking.java   |   3 +-
 .../fabric-networking-api-v1.mixins.json      |   6 --
 .../src/main/resources/fabric.mod.json        |   6 +-
 fabric-object-builder-api-v1/build.gradle     |  12 +--
 .../FabricModelPredicateProviderRegistry.java |   4 +-
 ...odelPredicateProviderRegistryAccessor.java |   2 +-
 ...icateProviderRegistrySpecificAccessor.java |   2 +-
 ...abric-object-builder-v1.client.mixins.json |  12 +++
 .../villager/VillagerProfessionBuilder.java   |   3 +-
 .../fabric-object-builder-v1.mixins.json      |   4 -
 .../src/main/resources/fabric.mod.json        |   6 +-
 fabric-particles-v1/build.gradle              |   2 +-
 .../particle/v1/FabricSpriteProvider.java     |   0
 .../particle/v1/ParticleFactoryRegistry.java  |   0
 .../api/particle/v1/FabricParticleTypes.java  |   0
 .../particle/FabricSpriteProviderImpl.java    |   0
 .../particle/ParticleFactoryRegistryImpl.java |   0
 .../client/particle/MixinParticleManager.java |   0
 .../particle/ParticleManagerAccessor.java     |   0
 .../assets/fabric-particles-v1/icon.png       | Bin
 .../fabric-particles-v1.accesswidener         |   0
 .../resources/fabric-particles-v1.mixins.json |   0
 .../resources/fabric.mod.json                 |   0
 .../sync/FabricRegistryClientInit.java        |   0
 .../sync/client/MixinBlockColorMap.java       |   0
 .../sync/client/MixinItemColorMap.java        |   0
 .../sync/client/MixinItemModelMap.java        |   0
 .../sync/client/MixinMinecraftClient.java     |   0
 .../sync/client/MixinParticleManager.java     |   0
 ...fabric-registry-sync-v0.client.mixins.json |  15 ++++
 .../fabric-registry-sync-v0.mixins.json       |   7 --
 .../src/main/resources/fabric.mod.json        |   6 +-
 fabric-renderer-api-v1/build.gradle           |  18 ++--
 .../fabric/api/renderer/v1/Renderer.java      |   0
 .../api/renderer/v1/RendererAccess.java       |   0
 .../api/renderer/v1/material/BlendMode.java   |   0
 .../renderer/v1/material/MaterialFinder.java  |   0
 .../renderer/v1/material/RenderMaterial.java  |   0
 .../fabric/api/renderer/v1/mesh/Mesh.java     |   0
 .../api/renderer/v1/mesh/MeshBuilder.java     |   0
 .../api/renderer/v1/mesh/MutableQuadView.java |   0
 .../api/renderer/v1/mesh/QuadEmitter.java     |   0
 .../fabric/api/renderer/v1/mesh/QuadView.java |   0
 .../renderer/v1/model/FabricBakedModel.java   |   0
 .../v1/model/ForwardingBakedModel.java        |   0
 .../api/renderer/v1/model/ModelHelper.java    |   0
 .../api/renderer/v1/model/SpriteFinder.java   |   0
 .../api/renderer/v1/render/RenderContext.java |   0
 .../impl/renderer/RendererAccessImpl.java     |   0
 .../impl/renderer/SpriteFinderImpl.java       |   0
 .../renderer/client/MixinBakedModel.java      |   0
 .../client/MixinMultipartBakedModel.java      |   0
 .../client/MixinSpriteAtlasTexture.java       |   0
 .../client/MixinWeightedBakedModel.java       |   0
 .../client/debughud/MixinDebugHud.java        |   0
 .../assets/fabric-renderer-api-v1/icon.png    | Bin
 ...abric-renderer-api-v1.debughud.mixins.json |   0
 .../fabric-renderer-api-v1.mixins.json        |   0
 .../resources/fabric.mod.json                 |   0
 fabric-renderer-indigo/build.gradle           |   2 +-
 .../fabric/impl/client/indigo/Indigo.java     |   0
 .../impl/client/indigo/IndigoConfig.java      |   0
 .../indigo/IndigoMixinConfigPlugin.java       |   0
 .../indigo/renderer/IndigoRenderer.java       |   0
 .../indigo/renderer/RenderMaterialImpl.java   |   0
 .../accessor/AccessChunkRendererRegion.java   |   0
 .../indigo/renderer/aocalc/AoCalculator.java  |   0
 .../indigo/renderer/aocalc/AoConfig.java      |   0
 .../client/indigo/renderer/aocalc/AoFace.java |   0
 .../indigo/renderer/aocalc/AoFaceData.java    |   0
 .../renderer/aocalc/AoLuminanceFix.java       |   0
 .../aocalc/AoVertexClampFunction.java         |   0
 .../renderer/aocalc/VanillaAoHelper.java      |   0
 .../indigo/renderer/helper/ColorHelper.java   |   0
 .../renderer/helper/GeometryHelper.java       |   0
 .../indigo/renderer/helper/NormalHelper.java  |   0
 .../indigo/renderer/helper/TextureHelper.java |   0
 .../indigo/renderer/mesh/EncodingFormat.java  |   0
 .../indigo/renderer/mesh/MeshBuilderImpl.java |   0
 .../client/indigo/renderer/mesh/MeshImpl.java |   0
 .../renderer/mesh/MutableQuadViewImpl.java    |   0
 .../indigo/renderer/mesh/QuadViewImpl.java    |   0
 .../renderer/render/AbstractMeshConsumer.java |   0
 .../renderer/render/AbstractQuadRenderer.java |   0
 .../render/AbstractRenderContext.java         |   0
 .../renderer/render/BlockRenderContext.java   |   0
 .../renderer/render/BlockRenderInfo.java      |   0
 .../renderer/render/ChunkRenderInfo.java      |   0
 .../renderer/render/IndigoQuadHandler.java    |   0
 .../renderer/render/ItemRenderContext.java    |   0
 .../render/TerrainBlockRenderInfo.java        |   0
 .../render/TerrainFallbackConsumer.java       |   0
 .../renderer/render/TerrainRenderContext.java |   0
 .../renderer/MixinBlockModelRenderer.java     |   0
 .../renderer/MixinChunkRebuildTask.java       |   0
 .../renderer/MixinChunkRendererRegion.java    |   0
 .../indigo/renderer/MixinItemRenderer.java    |   0
 .../assets/fabric-renderer-indigo/icon.png    | Bin
 .../fabric-renderer-indigo.accesswidener      |   0
 .../fabric-renderer-indigo.mixins.json        |   0
 .../resources/fabric.mod.json                 |   0
 .../client/MixinChunkRendererRegion.java      |   0
 .../MixinChunkRendererRegionBuilder.java      |   0
 ...ring-data-attachment-v1.client.mixins.json |  12 +++
 ...c-rendering-data-attachment-v1.mixins.json |   4 -
 .../src/main/resources/fabric.mod.json        |   6 +-
 fabric-rendering-fluids-v1/build.gradle       |   6 +-
 .../render/fluid/v1/FluidRenderHandler.java   |   0
 .../fluid/v1/FluidRenderHandlerRegistry.java  |   0
 .../fluid/v1/SimpleFluidRenderHandler.java    |   0
 .../fluid/FluidRenderHandlerRegistryImpl.java |   0
 .../fluid/FluidRendererHookContainer.java     |   0
 .../rendering/fluid/MixinFluidRenderer.java   |   0
 .../fabric-rendering-fluids-v1/icon.png       | Bin
 .../fabric-rendering-fluids-v1.mixins.json    |   0
 .../src/main/resources/fabric.mod.json        |   5 +-
 .../client/rendering/v1/ArmorRenderer.java    |   0
 .../v1/BlockEntityRendererRegistry.java       |   0
 .../rendering/v1/BuiltinItemRenderer.java     |   0
 .../v1/BuiltinItemRendererRegistry.java       |   0
 .../rendering/v1/ColorProviderRegistry.java   |   0
 .../v1/DimensionRenderingRegistry.java        |   0
 .../v1/EntityModelLayerRegistry.java          |   0
 .../rendering/v1/EntityRendererRegistry.java  |   0
 .../rendering/v1/HudRenderCallback.java       |   0
 .../v1/InvalidateRenderStateCallback.java     |   0
 .../v1/LivingEntityFeatureRenderEvents.java   |   0
 ...tyFeatureRendererRegistrationCallback.java |   0
 .../v1/TooltipComponentCallback.java          |   0
 .../rendering/v1/WorldRenderContext.java      |   0
 .../rendering/v1/WorldRenderEvents.java       |   0
 .../rendering/ArmorRendererRegistryImpl.java  |   0
 .../BlockEntityRendererRegistryImpl.java      |   0
 .../BuiltinItemRendererRegistryImpl.java      |   0
 .../rendering/ColorProviderRegistryImpl.java  |   0
 .../DimensionRenderingRegistryImpl.java       |   0
 .../rendering/EntityModelLayerImpl.java       |   0
 .../rendering/EntityRendererRegistryImpl.java |   0
 .../rendering/RegistrationHelperImpl.java     |   0
 .../rendering/WorldRenderContextImpl.java     |   0
 .../rendering/CapeFeatureRendererMixin.java   |   0
 .../rendering/DimensionEffectsAccessor.java   |   0
 .../rendering/EntityModelLayersAccessor.java  |   0
 .../client/rendering/EntityModelsMixin.java   |   0
 .../LivingEntityRendererAccessor.java         |   0
 .../rendering/MixinArmorFeatureRenderer.java  |   0
 .../client/rendering/MixinBlockColorMap.java  |   0
 .../rendering/MixinBlockEntityRenderers.java  |   0
 .../MixinBuiltinModelItemRenderer.java        |   0
 .../rendering/MixinEntityRenderers.java       |   0
 .../client/rendering/MixinInGameHud.java      |   0
 .../client/rendering/MixinItemColorMap.java   |   0
 .../client/rendering/MixinWorldRenderer.java  |   0
 .../mixin/client/rendering/ScreenMixin.java   |   0
 .../assets/fabric-rendering-v1/icon.png       | Bin
 .../resources/fabric-rendering-v1.mixins.json |   0
 .../resources/fabric.mod.json                 |   0
 .../build.gradle                              |   6 +-
 fabric-resource-loader-v0/build.gradle        |  10 +--
 ...lientBuiltinResourcePackProviderMixin.java |   0
 .../loader/client/CreateWorldScreenMixin.java |   0
 ...ontManagerResourceReloadListenerMixin.java |   0
 .../loader/client/GameOptionsMixin.java       |   0
 ...eyedResourceReloadListenerClientMixin.java |   0
 ...bric-resource-loader-v0.client.mixins.json |  15 ++++
 .../fabric-resource-loader-v0.mixins.json     |   7 --
 .../src/main/resources/fabric.mod.json        |   6 +-
 .../api/client/screen/v1/ScreenEvents.java    |   0
 .../screen/v1/ScreenKeyboardEvents.java       |   0
 .../client/screen/v1/ScreenMouseEvents.java   |   0
 .../fabric/api/client/screen/v1/Screens.java  |   0
 .../api/client/screen/v1/package-info.java    |   0
 .../fabric/impl/client/screen/ButtonList.java |   0
 .../client/screen/ScreenEventFactory.java     |   0
 .../impl/client/screen/ScreenExtensions.java  |   0
 .../mixin/screen/GameRendererMixin.java       |   0
 .../fabric/mixin/screen/KeyboardMixin.java    |   0
 .../mixin/screen/MinecraftClientMixin.java    |   0
 .../fabric/mixin/screen/MouseMixin.java       |   0
 .../fabric/mixin/screen/ScreenAccessor.java   |   0
 .../fabric/mixin/screen/ScreenMixin.java      |   0
 .../assets/fabric-screen-api-v1/icon.png      | Bin
 .../fabric-screen-api-v1.mixins.json          |   0
 .../resources/fabric.mod.json                 |   0
 fabric-screen-handler-api-v1/build.gradle     |  10 +--
 .../screenhandler/v1/ScreenRegistry.java      |   0
 .../client/screenhandler/v1/package-info.java |   0
 .../client/ClientNetworking.java              |   0
 .../api/client/texture/DependentSprite.java   |   0
 .../client/ClientSpriteRegistryCallback.java  |   0
 .../impl/client/texture/FabricSprite.java     |   0
 .../texture/SpriteRegistryCallbackHolder.java |   0
 .../texture/MixinSpriteAtlasTexture.java      |   0
 .../assets/fabric-textures-v0/icon.png        | Bin
 .../resources/fabric-textures-v0.mixins.json  |   0
 .../resources/fabric.mod.json                 |   0
 fabric-transfer-api-v1/build.gradle           |  10 +--
 .../fluid/FluidVariantRenderHandler.java      |   0
 .../client/fluid/FluidVariantRendering.java   |   0
 .../api/transfer/v1/fluid/FluidVariant.java   |   3 +-
 gradle.properties                             |   2 +-
 gradle/module-validation.gradle               |  10 ++-
 src/main/resources/fabric.mod.json            |   2 +-
 360 files changed, 473 insertions(+), 235 deletions(-)
 rename deprecated/fabric-containers-v0/src/{main => client}/java/net/fabricmc/fabric/api/client/screen/ContainerScreenFactory.java (100%)
 rename deprecated/fabric-containers-v0/src/{main => client}/java/net/fabricmc/fabric/api/client/screen/ScreenProviderRegistry.java (100%)
 rename deprecated/fabric-containers-v0/src/{main => client}/java/net/fabricmc/fabric/impl/client/container/ScreenProviderRegistryImpl.java (100%)
 rename deprecated/fabric-events-lifecycle-v0/src/{main => client}/java/net/fabricmc/fabric/api/event/client/ClientTickCallback.java (100%)
 rename deprecated/fabric-events-lifecycle-v0/src/{main => client}/java/net/fabricmc/fabric/api/event/client/ItemTooltipCallback.java (100%)
 rename deprecated/fabric-events-lifecycle-v0/src/{main => client}/java/net/fabricmc/fabric/impl/event/lifecycle/client/LegacyClientEventInvokers.java (100%)
 rename deprecated/fabric-keybindings-v0/src/{main => client}/java/net/fabricmc/fabric/api/client/keybinding/FabricKeyBinding.java (100%)
 rename deprecated/fabric-keybindings-v0/src/{main => client}/java/net/fabricmc/fabric/api/client/keybinding/KeyBindingRegistry.java (100%)
 rename deprecated/fabric-keybindings-v0/src/{main => client}/resources/assets/fabric-keybindings-v0/icon.png (100%)
 rename deprecated/fabric-keybindings-v0/src/{main => client}/resources/fabric.mod.json (100%)
 rename deprecated/fabric-networking-v0/src/{main => client}/java/net/fabricmc/fabric/api/network/ClientSidePacketRegistry.java (95%)
 rename deprecated/fabric-networking-v0/src/{main => client}/java/net/fabricmc/fabric/impl/networking/ClientSidePacketRegistryImpl.java (100%)
 rename deprecated/fabric-networking-v0/src/{main => client}/java/net/fabricmc/fabric/impl/networking/OldClientNetworkingHooks.java (100%)
 rename deprecated/fabric-renderer-registries-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/rendereregistry/v1/BlockEntityRendererRegistry.java (100%)
 rename deprecated/fabric-renderer-registries-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/rendereregistry/v1/EntityModelLayerRegistry.java (100%)
 rename deprecated/fabric-renderer-registries-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/rendereregistry/v1/EntityRendererRegistry.java (100%)
 rename deprecated/fabric-renderer-registries-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/rendereregistry/v1/LivingEntityFeatureRendererRegistrationCallback.java (100%)
 rename deprecated/fabric-renderer-registries-v1/src/{main => client}/resources/assets/renderer-registries-v1/icon.png (100%)
 rename deprecated/fabric-renderer-registries-v1/src/{main => client}/resources/fabric.mod.json (100%)
 rename deprecated/fabric-rendering-v0/src/{main => client}/java/net/fabricmc/fabric/api/client/render/ColorProviderRegistry.java (100%)
 rename deprecated/fabric-rendering-v0/src/{main => client}/java/net/fabricmc/fabric/api/client/render/InvalidateRenderStateCallback.java (100%)
 rename deprecated/fabric-rendering-v0/src/{main => client}/java/net/fabricmc/fabric/impl/client/rendering/RenderingCallbackInvoker.java (100%)
 rename deprecated/fabric-rendering-v0/src/{main => client}/resources/assets/fabric-rendering-v0/icon.png (100%)
 rename deprecated/fabric-rendering-v0/src/{main => client}/resources/fabric.mod.json (100%)
 rename fabric-blockrenderlayer-v1/src/{main => client}/java/net/fabricmc/fabric/api/blockrenderlayer/v1/BlockRenderLayerMap.java (100%)
 rename fabric-blockrenderlayer-v1/src/{main => client}/java/net/fabricmc/fabric/impl/blockrenderlayer/BlockRenderLayerMapImpl.java (100%)
 rename fabric-blockrenderlayer-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/blockrenderlayer/MixinBlockRenderLayer.java (100%)
 rename fabric-blockrenderlayer-v1/src/{main => client}/resources/assets/fabric-blockrenderlayer-v1/icon.png (100%)
 rename fabric-blockrenderlayer-v1/src/{main => client}/resources/fabric-blockrenderlayer-v1.mixins.json (100%)
 rename fabric-blockrenderlayer-v1/src/{main => client}/resources/fabric.mod.json (100%)
 rename fabric-command-api-v2/src/{main => client}/java/net/fabricmc/fabric/api/client/command/v2/ClientCommandManager.java (100%)
 rename fabric-command-api-v2/src/{main => client}/java/net/fabricmc/fabric/api/client/command/v2/FabricClientCommandSource.java (100%)
 rename fabric-command-api-v2/src/{main => client}/java/net/fabricmc/fabric/api/client/command/v2/package-info.java (100%)
 rename fabric-command-api-v2/src/{main => client}/java/net/fabricmc/fabric/impl/command/client/ClientCommandInternals.java (100%)
 rename fabric-command-api-v2/src/{main => client}/java/net/fabricmc/fabric/mixin/command/client/ClientCommandSourceMixin.java (100%)
 rename fabric-command-api-v2/src/{main => client}/java/net/fabricmc/fabric/mixin/command/client/ClientPlayNetworkHandlerMixin.java (100%)
 rename fabric-command-api-v2/src/{main => client}/java/net/fabricmc/fabric/mixin/command/client/ClientPlayerEntityMixin.java (100%)
 rename fabric-command-api-v2/src/{main => client}/java/net/fabricmc/fabric/mixin/command/client/MinecraftClientMixin.java (100%)
 create mode 100644 fabric-command-api-v2/src/client/resources/fabric-command-api-v2.client.mixins.json
 rename fabric-content-registries-v0/src/{main => client}/java/net/fabricmc/fabric/mixin/content/registry/client/MixinClientPlayNetworkHandler.java (100%)
 create mode 100644 fabric-content-registries-v0/src/client/resources/fabric-content-registries-v0.client.mixins.json
 rename fabric-data-generation-api-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/datagen/client/MinecraftClientMixin.java (100%)
 create mode 100644 fabric-data-generation-api-v1/src/client/resources/fabric-data-generation-api-v1.client.mixins.json
 rename fabric-entity-events-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/entity/event/elytra/ClientPlayerEntityMixin.java (100%)
 create mode 100644 fabric-entity-events-v1/src/client/resources/fabric-entity-events-v1.client.mixins.json
 rename fabric-events-interaction-v0/src/{main/java/net/fabricmc/fabric/mixin/event/interaction => client/java/net/fabricmc/fabric/mixin/event/interaction/client}/MixinClientPlayerInteractionManager.java (99%)
 rename fabric-events-interaction-v0/src/{main/java/net/fabricmc/fabric/mixin/event/interaction => client/java/net/fabricmc/fabric/mixin/event/interaction/client}/MixinMinecraftClient.java (98%)
 create mode 100644 fabric-events-interaction-v0/src/client/resources/fabric-events-interaction-v0.client.mixins.json
 rename fabric-game-rule-api-v1/src/{main => client}/java/net/fabricmc/fabric/impl/gamerule/widget/DoubleRuleWidget.java (100%)
 rename fabric-game-rule-api-v1/src/{main => client}/java/net/fabricmc/fabric/impl/gamerule/widget/EnumRuleWidget.java (100%)
 rename fabric-game-rule-api-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/gamerule/client/EditGameRulesScreenAccessor.java (100%)
 rename fabric-game-rule-api-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/gamerule/client/RuleListWidgetMixin.java (100%)
 rename fabric-game-rule-api-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/gamerule/client/RuleListWidgetVisitorMixin.java (100%)
 create mode 100644 fabric-game-rule-api-v1/src/client/resources/fabric-game-rule-api-v1.client.mixins.json
 rename fabric-item-api-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/item/client/ClientPlayerInteractionManagerMixin.java (100%)
 rename fabric-item-api-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/item/client/HeldItemRendererMixin.java (100%)
 rename fabric-item-api-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/item/client/ItemStackMixin.java (100%)
 create mode 100644 fabric-item-api-v1/src/client/resources/fabric-item-api-v1.client.mixins.json
 rename fabric-item-groups-v0/src/{main => client}/java/net/fabricmc/fabric/impl/item/group/CreativeGuiExtensions.java (100%)
 rename fabric-item-groups-v0/src/{main => client}/java/net/fabricmc/fabric/impl/item/group/FabricCreativeGuiComponents.java (100%)
 rename fabric-item-groups-v0/src/{main => client}/java/net/fabricmc/fabric/mixin/item/group/client/MixinCreativePlayerInventoryGui.java (100%)
 rename fabric-item-groups-v0/src/{main => client}/java/net/fabricmc/fabric/mixin/item/group/client/MixinItemGroup.java (100%)
 create mode 100644 fabric-item-groups-v0/src/client/resources/fabric-item-groups-v0.client.mixins.json
 rename fabric-key-binding-api-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/keybinding/v1/KeyBindingHelper.java (100%)
 rename fabric-key-binding-api-v1/src/{main => client}/java/net/fabricmc/fabric/impl/client/keybinding/KeyBindingRegistryImpl.java (100%)
 rename fabric-key-binding-api-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/client/keybinding/KeyBindingAccessor.java (100%)
 rename fabric-key-binding-api-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/client/keybinding/KeyCodeAccessor.java (100%)
 rename fabric-key-binding-api-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/client/keybinding/MixinGameOptions.java (100%)
 rename fabric-key-binding-api-v1/src/{main => client}/resources/assets/fabric-key-binding-api-v1/icon.png (100%)
 rename fabric-key-binding-api-v1/src/{main => client}/resources/fabric-key-binding-api-v1.mixins.json (100%)
 rename fabric-key-binding-api-v1/src/{main => client}/resources/fabric.mod.json (100%)
 rename fabric-lifecycle-events-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/event/lifecycle/v1/ClientBlockEntityEvents.java (100%)
 rename fabric-lifecycle-events-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/event/lifecycle/v1/ClientChunkEvents.java (100%)
 rename fabric-lifecycle-events-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/event/lifecycle/v1/ClientEntityEvents.java (100%)
 rename fabric-lifecycle-events-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/event/lifecycle/v1/ClientLifecycleEvents.java (100%)
 rename fabric-lifecycle-events-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/event/lifecycle/v1/ClientTickEvents.java (100%)
 rename fabric-lifecycle-events-v1/src/{main => client}/java/net/fabricmc/fabric/impl/event/lifecycle/ClientLifecycleEventsImpl.java (100%)
 rename fabric-lifecycle-events-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/event/lifecycle/client/ClientChunkManagerMixin.java (100%)
 rename fabric-lifecycle-events-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/event/lifecycle/client/ClientPlayNetworkHandlerMixin.java (100%)
 rename fabric-lifecycle-events-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/event/lifecycle/client/ClientWorldEntityLoaderMixin.java (100%)
 rename fabric-lifecycle-events-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/event/lifecycle/client/ClientWorldMixin.java (82%)
 rename fabric-lifecycle-events-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/event/lifecycle/client/MinecraftClientMixin.java (100%)
 rename fabric-lifecycle-events-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/event/lifecycle/client/WorldChunkMixin.java (100%)
 create mode 100644 fabric-lifecycle-events-v1/src/client/resources/fabric-lifecycle-events-v1.client.mixins.json
 rename fabric-mining-level-api-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/mininglevel/client/ClientPlayNetworkHandlerMixin.java (100%)
 create mode 100644 fabric-mining-level-api-v1/src/client/resources/fabric-mining-level-api-v1.client.mixins.json
 rename fabric-models-v0/src/{main => client}/java/net/fabricmc/fabric/api/client/model/BakedModelManagerHelper.java (100%)
 rename fabric-models-v0/src/{main => client}/java/net/fabricmc/fabric/api/client/model/ExtraModelProvider.java (100%)
 rename fabric-models-v0/src/{main => client}/java/net/fabricmc/fabric/api/client/model/ModelAppender.java (100%)
 rename fabric-models-v0/src/{main => client}/java/net/fabricmc/fabric/api/client/model/ModelLoadingRegistry.java (100%)
 rename fabric-models-v0/src/{main => client}/java/net/fabricmc/fabric/api/client/model/ModelProviderContext.java (100%)
 rename fabric-models-v0/src/{main => client}/java/net/fabricmc/fabric/api/client/model/ModelProviderException.java (100%)
 rename fabric-models-v0/src/{main => client}/java/net/fabricmc/fabric/api/client/model/ModelResourceProvider.java (100%)
 rename fabric-models-v0/src/{main => client}/java/net/fabricmc/fabric/api/client/model/ModelVariantProvider.java (100%)
 rename fabric-models-v0/src/{main => client}/java/net/fabricmc/fabric/impl/client/model/BakedModelManagerHooks.java (100%)
 rename fabric-models-v0/src/{main => client}/java/net/fabricmc/fabric/impl/client/model/ModelLoaderHooks.java (100%)
 rename fabric-models-v0/src/{main => client}/java/net/fabricmc/fabric/impl/client/model/ModelLoadingRegistryImpl.java (100%)
 rename fabric-models-v0/src/{main => client}/java/net/fabricmc/fabric/mixin/client/model/MixinBakedModelManager.java (100%)
 rename fabric-models-v0/src/{main => client}/java/net/fabricmc/fabric/mixin/client/model/MixinModelLoader.java (100%)
 rename fabric-models-v0/src/{main => client}/resources/assets/fabric-models-v0/icon.png (100%)
 rename fabric-models-v0/src/{main => client}/resources/fabric-models-v0.mixins.json (100%)
 rename fabric-models-v0/src/{main => client}/resources/fabric.mod.json (100%)
 rename fabric-networking-api-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/networking/v1/C2SPlayChannelEvents.java (100%)
 rename fabric-networking-api-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/networking/v1/ClientLoginConnectionEvents.java (100%)
 rename fabric-networking-api-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/networking/v1/ClientLoginNetworking.java (100%)
 rename fabric-networking-api-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/networking/v1/ClientPlayConnectionEvents.java (100%)
 rename fabric-networking-api-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/networking/v1/ClientPlayNetworking.java (100%)
 rename fabric-networking-api-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/networking/v1/package-info.java (100%)
 rename fabric-networking-api-v1/src/{main => client}/java/net/fabricmc/fabric/impl/networking/client/ClientLoginNetworkAddon.java (100%)
 rename fabric-networking-api-v1/src/{main => client}/java/net/fabricmc/fabric/impl/networking/client/ClientNetworkingImpl.java (98%)
 rename fabric-networking-api-v1/src/{main => client}/java/net/fabricmc/fabric/impl/networking/client/ClientPlayNetworkAddon.java (100%)
 rename fabric-networking-api-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/networking/accessor/ConnectScreenAccessor.java (100%)
 rename fabric-networking-api-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/networking/accessor/MinecraftClientAccessor.java (100%)
 rename fabric-networking-api-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/networking/client/ClientLoginNetworkHandlerMixin.java (100%)
 rename fabric-networking-api-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/networking/client/ClientPlayNetworkHandlerMixin.java (100%)
 create mode 100644 fabric-networking-api-v1/src/client/resources/fabric-networking-api-v1.client.mixins.json
 rename fabric-object-builder-api-v1/src/{main => client}/java/net/fabricmc/fabric/api/object/builder/v1/client/model/FabricModelPredicateProviderRegistry.java (91%)
 rename fabric-object-builder-api-v1/src/{main/java/net/fabricmc/fabric/mixin/object/builder => client/java/net/fabricmc/fabric/mixin/object/builder/client}/ModelPredicateProviderRegistryAccessor.java (95%)
 rename fabric-object-builder-api-v1/src/{main/java/net/fabricmc/fabric/mixin/object/builder => client/java/net/fabricmc/fabric/mixin/object/builder/client}/ModelPredicateProviderRegistrySpecificAccessor.java (95%)
 create mode 100644 fabric-object-builder-api-v1/src/client/resources/fabric-object-builder-v1.client.mixins.json
 rename fabric-particles-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/particle/v1/FabricSpriteProvider.java (100%)
 rename fabric-particles-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/particle/v1/ParticleFactoryRegistry.java (100%)
 rename fabric-particles-v1/src/{main => client}/java/net/fabricmc/fabric/api/particle/v1/FabricParticleTypes.java (100%)
 rename fabric-particles-v1/src/{main => client}/java/net/fabricmc/fabric/impl/client/particle/FabricSpriteProviderImpl.java (100%)
 rename fabric-particles-v1/src/{main => client}/java/net/fabricmc/fabric/impl/client/particle/ParticleFactoryRegistryImpl.java (100%)
 rename fabric-particles-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/client/particle/MixinParticleManager.java (100%)
 rename fabric-particles-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/client/particle/ParticleManagerAccessor.java (100%)
 rename fabric-particles-v1/src/{main => client}/resources/assets/fabric-particles-v1/icon.png (100%)
 rename fabric-particles-v1/src/{main => client}/resources/fabric-particles-v1.accesswidener (100%)
 rename fabric-particles-v1/src/{main => client}/resources/fabric-particles-v1.mixins.json (100%)
 rename fabric-particles-v1/src/{main => client}/resources/fabric.mod.json (100%)
 rename fabric-registry-sync-v0/src/{main => client}/java/net/fabricmc/fabric/impl/registry/sync/FabricRegistryClientInit.java (100%)
 rename fabric-registry-sync-v0/src/{main => client}/java/net/fabricmc/fabric/mixin/registry/sync/client/MixinBlockColorMap.java (100%)
 rename fabric-registry-sync-v0/src/{main => client}/java/net/fabricmc/fabric/mixin/registry/sync/client/MixinItemColorMap.java (100%)
 rename fabric-registry-sync-v0/src/{main => client}/java/net/fabricmc/fabric/mixin/registry/sync/client/MixinItemModelMap.java (100%)
 rename fabric-registry-sync-v0/src/{main => client}/java/net/fabricmc/fabric/mixin/registry/sync/client/MixinMinecraftClient.java (100%)
 rename fabric-registry-sync-v0/src/{main => client}/java/net/fabricmc/fabric/mixin/registry/sync/client/MixinParticleManager.java (100%)
 create mode 100644 fabric-registry-sync-v0/src/client/resources/fabric-registry-sync-v0.client.mixins.json
 rename fabric-renderer-api-v1/src/{main => client}/java/net/fabricmc/fabric/api/renderer/v1/Renderer.java (100%)
 rename fabric-renderer-api-v1/src/{main => client}/java/net/fabricmc/fabric/api/renderer/v1/RendererAccess.java (100%)
 rename fabric-renderer-api-v1/src/{main => client}/java/net/fabricmc/fabric/api/renderer/v1/material/BlendMode.java (100%)
 rename fabric-renderer-api-v1/src/{main => client}/java/net/fabricmc/fabric/api/renderer/v1/material/MaterialFinder.java (100%)
 rename fabric-renderer-api-v1/src/{main => client}/java/net/fabricmc/fabric/api/renderer/v1/material/RenderMaterial.java (100%)
 rename fabric-renderer-api-v1/src/{main => client}/java/net/fabricmc/fabric/api/renderer/v1/mesh/Mesh.java (100%)
 rename fabric-renderer-api-v1/src/{main => client}/java/net/fabricmc/fabric/api/renderer/v1/mesh/MeshBuilder.java (100%)
 rename fabric-renderer-api-v1/src/{main => client}/java/net/fabricmc/fabric/api/renderer/v1/mesh/MutableQuadView.java (100%)
 rename fabric-renderer-api-v1/src/{main => client}/java/net/fabricmc/fabric/api/renderer/v1/mesh/QuadEmitter.java (100%)
 rename fabric-renderer-api-v1/src/{main => client}/java/net/fabricmc/fabric/api/renderer/v1/mesh/QuadView.java (100%)
 rename fabric-renderer-api-v1/src/{main => client}/java/net/fabricmc/fabric/api/renderer/v1/model/FabricBakedModel.java (100%)
 rename fabric-renderer-api-v1/src/{main => client}/java/net/fabricmc/fabric/api/renderer/v1/model/ForwardingBakedModel.java (100%)
 rename fabric-renderer-api-v1/src/{main => client}/java/net/fabricmc/fabric/api/renderer/v1/model/ModelHelper.java (100%)
 rename fabric-renderer-api-v1/src/{main => client}/java/net/fabricmc/fabric/api/renderer/v1/model/SpriteFinder.java (100%)
 rename fabric-renderer-api-v1/src/{main => client}/java/net/fabricmc/fabric/api/renderer/v1/render/RenderContext.java (100%)
 rename fabric-renderer-api-v1/src/{main => client}/java/net/fabricmc/fabric/impl/renderer/RendererAccessImpl.java (100%)
 rename fabric-renderer-api-v1/src/{main => client}/java/net/fabricmc/fabric/impl/renderer/SpriteFinderImpl.java (100%)
 rename fabric-renderer-api-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/renderer/client/MixinBakedModel.java (100%)
 rename fabric-renderer-api-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/renderer/client/MixinMultipartBakedModel.java (100%)
 rename fabric-renderer-api-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/renderer/client/MixinSpriteAtlasTexture.java (100%)
 rename fabric-renderer-api-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/renderer/client/MixinWeightedBakedModel.java (100%)
 rename fabric-renderer-api-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/renderer/client/debughud/MixinDebugHud.java (100%)
 rename fabric-renderer-api-v1/src/{main => client}/resources/assets/fabric-renderer-api-v1/icon.png (100%)
 rename fabric-renderer-api-v1/src/{main => client}/resources/fabric-renderer-api-v1.debughud.mixins.json (100%)
 rename fabric-renderer-api-v1/src/{main => client}/resources/fabric-renderer-api-v1.mixins.json (100%)
 rename fabric-renderer-api-v1/src/{main => client}/resources/fabric.mod.json (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/impl/client/indigo/Indigo.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/impl/client/indigo/IndigoConfig.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/impl/client/indigo/IndigoMixinConfigPlugin.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/impl/client/indigo/renderer/IndigoRenderer.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/impl/client/indigo/renderer/RenderMaterialImpl.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/impl/client/indigo/renderer/accessor/AccessChunkRendererRegion.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/AoCalculator.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/AoConfig.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/AoFace.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/AoFaceData.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/AoLuminanceFix.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/AoVertexClampFunction.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/impl/client/indigo/renderer/aocalc/VanillaAoHelper.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/impl/client/indigo/renderer/helper/ColorHelper.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/impl/client/indigo/renderer/helper/GeometryHelper.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/impl/client/indigo/renderer/helper/NormalHelper.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/impl/client/indigo/renderer/helper/TextureHelper.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/impl/client/indigo/renderer/mesh/EncodingFormat.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/impl/client/indigo/renderer/mesh/MeshBuilderImpl.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/impl/client/indigo/renderer/mesh/MeshImpl.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/impl/client/indigo/renderer/mesh/MutableQuadViewImpl.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/impl/client/indigo/renderer/mesh/QuadViewImpl.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/AbstractMeshConsumer.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/AbstractQuadRenderer.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/AbstractRenderContext.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/BlockRenderContext.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/BlockRenderInfo.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/ChunkRenderInfo.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/IndigoQuadHandler.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/ItemRenderContext.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/TerrainBlockRenderInfo.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/TerrainFallbackConsumer.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/impl/client/indigo/renderer/render/TerrainRenderContext.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/mixin/client/indigo/renderer/MixinBlockModelRenderer.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/mixin/client/indigo/renderer/MixinChunkRebuildTask.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/mixin/client/indigo/renderer/MixinChunkRendererRegion.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/java/net/fabricmc/fabric/mixin/client/indigo/renderer/MixinItemRenderer.java (100%)
 rename fabric-renderer-indigo/src/{main => client}/resources/assets/fabric-renderer-indigo/icon.png (100%)
 rename fabric-renderer-indigo/src/{main => client}/resources/fabric-renderer-indigo.accesswidener (100%)
 rename fabric-renderer-indigo/src/{main => client}/resources/fabric-renderer-indigo.mixins.json (100%)
 mode change 100755 => 100644
 rename fabric-renderer-indigo/src/{main => client}/resources/fabric.mod.json (100%)
 mode change 100755 => 100644
 rename fabric-rendering-data-attachment-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/rendering/data/attachment/client/MixinChunkRendererRegion.java (100%)
 rename fabric-rendering-data-attachment-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/rendering/data/attachment/client/MixinChunkRendererRegionBuilder.java (100%)
 create mode 100644 fabric-rendering-data-attachment-v1/src/client/resources/fabric-rendering-data-attachment-v1.client.mixins.json
 rename fabric-rendering-fluids-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/render/fluid/v1/FluidRenderHandler.java (100%)
 rename fabric-rendering-fluids-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/render/fluid/v1/FluidRenderHandlerRegistry.java (100%)
 rename fabric-rendering-fluids-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/render/fluid/v1/SimpleFluidRenderHandler.java (100%)
 rename fabric-rendering-fluids-v1/src/{main => client}/java/net/fabricmc/fabric/impl/client/rendering/fluid/FluidRenderHandlerRegistryImpl.java (100%)
 rename fabric-rendering-fluids-v1/src/{main => client}/java/net/fabricmc/fabric/impl/client/rendering/fluid/FluidRendererHookContainer.java (100%)
 rename fabric-rendering-fluids-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/client/rendering/fluid/MixinFluidRenderer.java (100%)
 rename fabric-rendering-fluids-v1/src/{main => client}/resources/assets/fabric-rendering-fluids-v1/icon.png (100%)
 rename fabric-rendering-fluids-v1/src/{main => client}/resources/fabric-rendering-fluids-v1.mixins.json (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/rendering/v1/ArmorRenderer.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/rendering/v1/BlockEntityRendererRegistry.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/rendering/v1/BuiltinItemRenderer.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/rendering/v1/BuiltinItemRendererRegistry.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/rendering/v1/ColorProviderRegistry.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/rendering/v1/DimensionRenderingRegistry.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/rendering/v1/EntityModelLayerRegistry.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/rendering/v1/EntityRendererRegistry.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/rendering/v1/HudRenderCallback.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/rendering/v1/InvalidateRenderStateCallback.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/rendering/v1/LivingEntityFeatureRenderEvents.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/rendering/v1/LivingEntityFeatureRendererRegistrationCallback.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/rendering/v1/TooltipComponentCallback.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/rendering/v1/WorldRenderContext.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/rendering/v1/WorldRenderEvents.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/impl/client/rendering/ArmorRendererRegistryImpl.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/impl/client/rendering/BlockEntityRendererRegistryImpl.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/impl/client/rendering/BuiltinItemRendererRegistryImpl.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/impl/client/rendering/ColorProviderRegistryImpl.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/impl/client/rendering/DimensionRenderingRegistryImpl.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/impl/client/rendering/EntityModelLayerImpl.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/impl/client/rendering/EntityRendererRegistryImpl.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/impl/client/rendering/RegistrationHelperImpl.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/impl/client/rendering/WorldRenderContextImpl.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/client/rendering/CapeFeatureRendererMixin.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/client/rendering/DimensionEffectsAccessor.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/client/rendering/EntityModelLayersAccessor.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/client/rendering/EntityModelsMixin.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/client/rendering/LivingEntityRendererAccessor.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/client/rendering/MixinArmorFeatureRenderer.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/client/rendering/MixinBlockColorMap.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/client/rendering/MixinBlockEntityRenderers.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/client/rendering/MixinBuiltinModelItemRenderer.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/client/rendering/MixinEntityRenderers.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/client/rendering/MixinInGameHud.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/client/rendering/MixinItemColorMap.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/client/rendering/MixinWorldRenderer.java (100%)
 rename fabric-rendering-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/client/rendering/ScreenMixin.java (100%)
 rename fabric-rendering-v1/src/{main => client}/resources/assets/fabric-rendering-v1/icon.png (100%)
 rename fabric-rendering-v1/src/{main => client}/resources/fabric-rendering-v1.mixins.json (100%)
 rename fabric-rendering-v1/src/{main => client}/resources/fabric.mod.json (100%)
 rename fabric-resource-loader-v0/src/{main => client}/java/net/fabricmc/fabric/mixin/resource/loader/client/ClientBuiltinResourcePackProviderMixin.java (100%)
 rename fabric-resource-loader-v0/src/{main => client}/java/net/fabricmc/fabric/mixin/resource/loader/client/CreateWorldScreenMixin.java (100%)
 rename fabric-resource-loader-v0/src/{main => client}/java/net/fabricmc/fabric/mixin/resource/loader/client/FontManagerResourceReloadListenerMixin.java (100%)
 rename fabric-resource-loader-v0/src/{main => client}/java/net/fabricmc/fabric/mixin/resource/loader/client/GameOptionsMixin.java (100%)
 rename fabric-resource-loader-v0/src/{main => client}/java/net/fabricmc/fabric/mixin/resource/loader/client/KeyedResourceReloadListenerClientMixin.java (100%)
 create mode 100644 fabric-resource-loader-v0/src/client/resources/fabric-resource-loader-v0.client.mixins.json
 rename fabric-screen-api-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/screen/v1/ScreenEvents.java (100%)
 rename fabric-screen-api-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/screen/v1/ScreenKeyboardEvents.java (100%)
 rename fabric-screen-api-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/screen/v1/ScreenMouseEvents.java (100%)
 rename fabric-screen-api-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/screen/v1/Screens.java (100%)
 rename fabric-screen-api-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/screen/v1/package-info.java (100%)
 rename fabric-screen-api-v1/src/{main => client}/java/net/fabricmc/fabric/impl/client/screen/ButtonList.java (100%)
 rename fabric-screen-api-v1/src/{main => client}/java/net/fabricmc/fabric/impl/client/screen/ScreenEventFactory.java (100%)
 rename fabric-screen-api-v1/src/{main => client}/java/net/fabricmc/fabric/impl/client/screen/ScreenExtensions.java (100%)
 rename fabric-screen-api-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/screen/GameRendererMixin.java (100%)
 rename fabric-screen-api-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/screen/KeyboardMixin.java (100%)
 rename fabric-screen-api-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/screen/MinecraftClientMixin.java (100%)
 rename fabric-screen-api-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/screen/MouseMixin.java (100%)
 rename fabric-screen-api-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/screen/ScreenAccessor.java (100%)
 rename fabric-screen-api-v1/src/{main => client}/java/net/fabricmc/fabric/mixin/screen/ScreenMixin.java (100%)
 rename fabric-screen-api-v1/src/{main => client}/resources/assets/fabric-screen-api-v1/icon.png (100%)
 rename fabric-screen-api-v1/src/{main => client}/resources/fabric-screen-api-v1.mixins.json (100%)
 rename fabric-screen-api-v1/src/{main => client}/resources/fabric.mod.json (100%)
 rename fabric-screen-handler-api-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/screenhandler/v1/ScreenRegistry.java (100%)
 rename fabric-screen-handler-api-v1/src/{main => client}/java/net/fabricmc/fabric/api/client/screenhandler/v1/package-info.java (100%)
 rename fabric-screen-handler-api-v1/src/{main => client}/java/net/fabricmc/fabric/impl/screenhandler/client/ClientNetworking.java (100%)
 rename fabric-textures-v0/src/{main => client}/java/net/fabricmc/fabric/api/client/texture/DependentSprite.java (100%)
 rename fabric-textures-v0/src/{main => client}/java/net/fabricmc/fabric/api/event/client/ClientSpriteRegistryCallback.java (100%)
 rename fabric-textures-v0/src/{main => client}/java/net/fabricmc/fabric/impl/client/texture/FabricSprite.java (100%)
 rename fabric-textures-v0/src/{main => client}/java/net/fabricmc/fabric/impl/client/texture/SpriteRegistryCallbackHolder.java (100%)
 rename fabric-textures-v0/src/{main => client}/java/net/fabricmc/fabric/mixin/client/texture/MixinSpriteAtlasTexture.java (100%)
 rename fabric-textures-v0/src/{main => client}/resources/assets/fabric-textures-v0/icon.png (100%)
 rename fabric-textures-v0/src/{main => client}/resources/fabric-textures-v0.mixins.json (100%)
 rename fabric-textures-v0/src/{main => client}/resources/fabric.mod.json (100%)
 rename fabric-transfer-api-v1/src/{main => client}/java/net/fabricmc/fabric/api/transfer/v1/client/fluid/FluidVariantRenderHandler.java (100%)
 rename fabric-transfer-api-v1/src/{main => client}/java/net/fabricmc/fabric/api/transfer/v1/client/fluid/FluidVariantRendering.java (100%)

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"
   },