From f728ca4a4e536d75e9c2325b5a77dea7cde5233f Mon Sep 17 00:00:00 2001 From: Kneelawk Date: Wed, 17 Apr 2024 12:05:04 -0700 Subject: [PATCH] Begin architectury setup --- .gitignore | 1 + build.gradle | 197 ++--------------- common/build.gradle | 124 +++++++++++ .../java/com/jozufozu/flywheel/Flywheel.java | 0 .../flywheel/api/BackendImplemented.java | 0 .../flywheel/api/backend/Backend.java | 0 .../flywheel/api/backend/BackendManager.java | 0 .../jozufozu/flywheel/api/backend/Engine.java | 0 .../flywheel/api/event/BeginFrameEvent.java | 0 .../event/EndClientResourceReloadEvent.java | 0 .../api/event/ReloadLevelRendererEvent.java | 0 .../flywheel/api/event/RenderContext.java | 0 .../flywheel/api/event/RenderStage.java | 0 .../flywheel/api/event/RenderStageEvent.java | 0 .../flywheel/api/instance/Instance.java | 0 .../flywheel/api/instance/InstanceHandle.java | 0 .../flywheel/api/instance/InstanceType.java | 0 .../flywheel/api/instance/InstanceWriter.java | 0 .../flywheel/api/instance/Instancer.java | 0 .../api/instance/InstancerProvider.java | 0 .../api/internal/InternalFlywheelApi.java | 0 .../flywheel/api/internal/package-info.java | 0 .../flywheel/api/layout/ArrayElementType.java | 0 .../flywheel/api/layout/ElementType.java | 0 .../flywheel/api/layout/FloatRepr.java | 0 .../flywheel/api/layout/IntegerRepr.java | 0 .../jozufozu/flywheel/api/layout/Layout.java | 0 .../flywheel/api/layout/LayoutBuilder.java | 0 .../api/layout/MatrixElementType.java | 0 .../api/layout/ScalarElementType.java | 0 .../api/layout/UnsignedIntegerRepr.java | 0 .../flywheel/api/layout/ValueRepr.java | 0 .../api/layout/VectorElementType.java | 0 .../flywheel/api/material/CutoutShader.java | 0 .../flywheel/api/material/DepthTest.java | 0 .../flywheel/api/material/FogShader.java | 0 .../flywheel/api/material/Material.java | 0 .../api/material/MaterialShaders.java | 0 .../flywheel/api/material/Transparency.java | 0 .../flywheel/api/material/WriteMask.java | 0 .../flywheel/api/model/IndexSequence.java | 0 .../com/jozufozu/flywheel/api/model/Mesh.java | 0 .../jozufozu/flywheel/api/model/Model.java | 0 .../flywheel/api/registry/IdRegistry.java | 0 .../flywheel/api/registry/Registry.java | 0 .../com/jozufozu/flywheel/api/task/Plan.java | 0 .../flywheel/api/task/TaskExecutor.java | 0 .../api/vertex/MutableVertexList.java | 0 .../flywheel/api/vertex/VertexList.java | 0 .../flywheel/api/vertex/VertexView.java | 0 .../api/vertex/VertexViewProvider.java | 0 .../vertex/VertexViewProviderRegistry.java | 0 .../api/visual/BlockEntityVisual.java | 0 .../api/visual/DistanceUpdateLimiter.java | 0 .../flywheel/api/visual/DynamicVisual.java | 0 .../jozufozu/flywheel/api/visual/Effect.java | 0 .../flywheel/api/visual/EffectVisual.java | 0 .../flywheel/api/visual/EntityVisual.java | 0 .../flywheel/api/visual/LitVisual.java | 0 .../flywheel/api/visual/TickableVisual.java | 0 .../jozufozu/flywheel/api/visual/Visual.java | 0 .../visualization/BlockEntityVisualizer.java | 0 .../api/visualization/EntityVisualizer.java | 0 .../api/visualization/VisualEmbedding.java | 0 .../api/visualization/VisualManager.java | 0 .../visualization/VisualizationContext.java | 0 .../api/visualization/VisualizationLevel.java | 0 .../visualization/VisualizationManager.java | 0 .../api/visualization/VisualizerRegistry.java | 0 .../jozufozu/flywheel/backend/Backends.java | 0 .../flywheel/backend/InternalVertex.java | 0 .../flywheel/backend/LayoutAttributes.java | 0 .../jozufozu/flywheel/backend/Samplers.java | 0 .../flywheel/backend/ShaderIndices.java | 0 .../backend/compile/ContextShader.java | 0 .../flywheel/backend/compile/FlwPrograms.java | 0 .../backend/compile/IndirectPrograms.java | 0 .../backend/compile/InstancingPrograms.java | 0 .../flywheel/backend/compile/Pipeline.java | 0 .../backend/compile/PipelineCompiler.java | 0 .../backend/compile/PipelineProgramKey.java | 0 .../flywheel/backend/compile/Pipelines.java | 0 .../backend/compile/SourceChecks.java | 0 .../BufferTextureInstanceComponent.java | 0 .../component/InstanceAssemblerComponent.java | 0 .../component/InstanceStructComponent.java | 0 .../component/SsboInstanceComponent.java | 0 .../StringSubstitutionComponent.java | 0 .../component/UberShaderComponent.java | 0 .../backend/compile/core/Compilation.java | 0 .../compile/core/CompilationHarness.java | 0 .../backend/compile/core/Compile.java | 0 .../backend/compile/core/CompilerStats.java | 0 .../compile/core/FailedCompilation.java | 0 .../backend/compile/core/LinkResult.java | 0 .../backend/compile/core/ProgramLinker.java | 0 .../backend/compile/core/ShaderCache.java | 0 .../backend/compile/core/ShaderResult.java | 0 .../backend/compile/core/SourceLoader.java | 0 .../backend/engine/AbstractInstancer.java | 0 .../backend/engine/CommonCrumbling.java | 0 .../flywheel/backend/engine/DrawManager.java | 0 .../flywheel/backend/engine/EngineImpl.java | 0 .../backend/engine/EnvironmentStorage.java | 0 .../flywheel/backend/engine/GroupKey.java | 0 .../flywheel/backend/engine/IndexPool.java | 0 .../backend/engine/InstanceHandleImpl.java | 0 .../flywheel/backend/engine/InstancerKey.java | 0 .../backend/engine/InstancerProviderImpl.java | 0 .../backend/engine/MaterialEncoder.java | 0 .../backend/engine/MaterialRenderState.java | 0 .../flywheel/backend/engine/MeshPool.java | 0 .../backend/engine/TextureBinder.java | 0 .../embed/AbstractEmbeddedEnvironment.java | 0 .../engine/embed/EmbeddedLightTexture.java | 0 .../engine/embed/EmbeddedLightVolume.java | 0 .../engine/embed/EmbeddingUniforms.java | 0 .../backend/engine/embed/Environment.java | 0 .../engine/embed/GlobalEnvironment.java | 0 .../embed/NestedEmbeddedEnvironment.java | 0 .../embed/TopLevelEmbeddedEnvironment.java | 0 .../engine/indirect/IndirectBuffers.java | 0 .../engine/indirect/IndirectCullingGroup.java | 0 .../backend/engine/indirect/IndirectDraw.java | 0 .../engine/indirect/IndirectDrawManager.java | 0 .../engine/indirect/IndirectInstancer.java | 0 .../indirect/ResizableStorageArray.java | 0 .../indirect/ResizableStorageBuffer.java | 0 .../backend/engine/indirect/ScatterList.java | 0 .../engine/indirect/StagingBuffer.java | 0 .../backend/engine/indirect/TransferList.java | 0 .../engine/instancing/InstancedDraw.java | 0 .../instancing/InstancedDrawManager.java | 0 .../engine/instancing/InstancedInstancer.java | 0 .../instancing/InstancedRenderStage.java | 0 .../backend/engine/uniform/FogUniforms.java | 0 .../backend/engine/uniform/FrameUniforms.java | 0 .../backend/engine/uniform/LevelUniforms.java | 0 .../engine/uniform/OptionsUniforms.java | 0 .../engine/uniform/PlayerUniforms.java | 0 .../backend/engine/uniform/UniformBuffer.java | 0 .../backend/engine/uniform/UniformWriter.java | 0 .../backend/engine/uniform/Uniforms.java | 0 .../jozufozu/flywheel/backend/gl/Driver.java | 0 .../flywheel/backend/gl/GlCompat.java | 0 .../jozufozu/flywheel/backend/gl/GlFence.java | 0 .../flywheel/backend/gl/GlNumericType.java | 0 .../flywheel/backend/gl/GlObject.java | 0 .../flywheel/backend/gl/GlPrimitive.java | 0 .../flywheel/backend/gl/GlStateTracker.java | 0 .../flywheel/backend/gl/GlTexture.java | 0 .../flywheel/backend/gl/GlTextureUnit.java | 0 .../flywheel/backend/gl/TextureBuffer.java | 0 .../backend/gl/array/GlVertexArray.java | 0 .../backend/gl/array/GlVertexArrayDSA.java | 0 .../backend/gl/array/GlVertexArrayGL3.java | 0 .../GlVertexArraySeparateAttributes.java | 0 .../backend/gl/array/VertexAttribute.java | 0 .../flywheel/backend/gl/buffer/Buffer.java | 0 .../flywheel/backend/gl/buffer/GlBuffer.java | 0 .../backend/gl/buffer/GlBufferType.java | 0 .../backend/gl/buffer/GlBufferUsage.java | 0 .../flywheel/backend/gl/error/GlError.java | 0 .../backend/gl/error/GlException.java | 0 .../flywheel/backend/gl/shader/GlProgram.java | 0 .../flywheel/backend/gl/shader/GlShader.java | 0 .../backend/gl/shader/ShaderType.java | 0 .../flywheel/backend/glsl/GlslVersion.java | 0 .../flywheel/backend/glsl/LoadError.java | 0 .../flywheel/backend/glsl/LoadResult.java | 0 .../flywheel/backend/glsl/ShaderSources.java | 0 .../backend/glsl/SourceComponent.java | 0 .../flywheel/backend/glsl/SourceFile.java | 0 .../flywheel/backend/glsl/SourceLines.java | 0 .../backend/glsl/error/ConsoleColors.java | 0 .../backend/glsl/error/ErrorBuilder.java | 0 .../backend/glsl/error/ErrorLevel.java | 0 .../backend/glsl/error/lines/Divider.java | 0 .../backend/glsl/error/lines/ErrorLine.java | 0 .../backend/glsl/error/lines/FileLine.java | 0 .../backend/glsl/error/lines/HeaderLine.java | 0 .../backend/glsl/error/lines/NestedLine.java | 0 .../backend/glsl/error/lines/SourceLine.java | 0 .../glsl/error/lines/SpanHighlightLine.java | 0 .../backend/glsl/error/lines/TextLine.java | 0 .../flywheel/backend/glsl/generate/BinOp.java | 0 .../backend/glsl/generate/FnSignature.java | 0 .../backend/glsl/generate/GlslBlock.java | 0 .../backend/glsl/generate/GlslBuilder.java | 0 .../backend/glsl/generate/GlslExpr.java | 0 .../backend/glsl/generate/GlslFn.java | 0 .../backend/glsl/generate/GlslStmt.java | 0 .../backend/glsl/generate/GlslStruct.java | 0 .../backend/glsl/generate/GlslSwitch.java | 0 .../glsl/generate/GlslUniformBlock.java | 0 .../glsl/generate/GlslVertexInput.java | 0 .../flywheel/backend/glsl/parse/Import.java | 0 .../backend/glsl/parse/ShaderField.java | 0 .../backend/glsl/parse/ShaderFunction.java | 0 .../backend/glsl/parse/ShaderStruct.java | 0 .../backend/glsl/parse/ShaderVariable.java | 0 .../backend/glsl/parse/StructField.java | 0 .../flywheel/backend/glsl/span/CharPos.java | 0 .../flywheel/backend/glsl/span/ErrorSpan.java | 0 .../flywheel/backend/glsl/span/Span.java | 0 .../backend/glsl/span/StringSpan.java | 0 .../mixin/AbstractClientPlayerAccessor.java | 0 .../backend/mixin/GameRendererAccessor.java | 0 .../backend/mixin/GlStateManagerMixin.java | 0 .../backend/mixin/LightTextureAccessor.java | 0 .../flywheel/backend/mixin/OptionsMixin.java | 0 .../backend/mixin/OverlayTextureAccessor.java | 0 .../backend/mixin/RenderSystemMixin.java | 0 .../backend/util/AtomicReferenceCounted.java | 0 .../flywheel/backend/util/MemoryBuffer.java | 0 .../backend/util/ReferenceCounted.java | 0 .../flywheel/config/BackendArgument.java | 0 .../jozufozu/flywheel/config/DebugMode.java | 0 .../jozufozu/flywheel/config/FlwCommands.java | 0 .../jozufozu/flywheel/config/FlwConfig.java | 0 .../flywheel/impl/BackendManagerImpl.java | 0 .../flywheel/impl/InternalFlywheelImpl.java | 0 .../impl/event/RenderContextImpl.java | 0 .../extension/BlockEntityTypeExtension.java | 0 .../impl/extension/EntityTypeExtension.java | 0 .../impl/extension/LevelExtension.java | 0 .../impl/extension/PoseStackExtension.java | 0 .../impl/extension/VertexFormatExtension.java | 0 .../impl/layout/ArrayElementTypeImpl.java | 0 .../impl/layout/LayoutBuilderImpl.java | 0 .../flywheel/impl/layout/LayoutImpl.java | 0 .../impl/layout/LayoutInterpreter.java | 0 .../impl/layout/MatrixElementTypeImpl.java | 0 .../impl/layout/ScalarElementTypeImpl.java | 0 .../impl/layout/VectorElementTypeImpl.java | 0 .../impl/mixin/BlockEntityTypeMixin.java | 0 .../impl/mixin/ClientChunkCacheMixin.java | 0 .../flywheel/impl/mixin/ClientLevelMixin.java | 0 .../flywheel/impl/mixin/EntityTypeMixin.java | 0 .../flywheel/impl/mixin/LevelMixin.java | 0 .../impl/mixin/LevelRendererMixin.java | 0 .../flywheel/impl/mixin/MinecraftMixin.java | 0 .../flywheel/impl/mixin/PoseStackMixin.java | 0 .../impl/mixin/VertexFormatMixin.java | 0 .../impl/mixin/fix/FixFabulousDepthMixin.java | 0 .../impl/mixin/fix/FixNormalScalingMixin.java | 0 .../sodium/ChunkBuilderMeshingTaskMixin.java | 0 .../impl/mixin/sodium/SodiumMixinPlugin.java | 0 .../mixin/visualmanage/BlockEntityMixin.java | 0 .../mixin/visualmanage/LevelChunkMixin.java | 0 .../visualmanage/LevelRendererMixin.java | 0 .../mixin/visualmanage/RebuildTaskMixin.java | 0 .../impl/registry/IdRegistryImpl.java | 0 .../flywheel/impl/registry/RegistryImpl.java | 0 .../flywheel/impl/task/FlwTaskExecutor.java | 0 .../impl/task/ParallelTaskExecutor.java | 0 .../impl/task/SerialTaskExecutor.java | 0 .../impl/task/ThreadGroupNotifier.java | 0 .../flywheel/impl/task/WaitGroup.java | 0 .../impl/vertex/InferredVertexFormatInfo.java | 0 .../impl/vertex/InferredVertexView.java | 0 .../vertex/InferredVertexViewProvider.java | 0 .../VertexViewProviderRegistryImpl.java | 0 .../impl/visual/DynamicVisualContextImpl.java | 0 .../visual/TickableVisualContextImpl.java | 0 .../VisualizationEventHandler.java | 0 .../visualization/VisualizationHelper.java | 0 .../VisualizationManagerImpl.java | 0 .../visualization/VisualizerRegistryImpl.java | 0 .../manager/BlockEntityStorage.java | 0 .../visualization/manager/EffectStorage.java | 0 .../visualization/manager/EntityStorage.java | 0 .../manager/VisualManagerImpl.java | 0 .../ratelimit/BandedPrimeLimiter.java | 0 .../ratelimit/DistanceUpdateLimiterImpl.java | 0 .../visualization/ratelimit/NonLimiter.java | 0 .../impl/visualization/storage/Action.java | 0 .../storage/LitVisualStorage.java | 0 .../impl/visualization/storage/Storage.java | 0 .../visualization/storage/Transaction.java | 0 .../flywheel/lib/backend/SimpleBackend.java | 0 .../com/jozufozu/flywheel/lib/box/Box.java | 0 .../jozufozu/flywheel/lib/box/MutableBox.java | 0 .../lib/instance/AbstractInstance.java | 0 .../lib/instance/ColoredLitInstance.java | 0 .../flywheel/lib/instance/FlatLit.java | 0 .../flywheel/lib/instance/InstanceTypes.java | 0 .../lib/instance/OrientedInstance.java | 0 .../flywheel/lib/instance/ShadowInstance.java | 0 .../lib/instance/SimpleInstanceType.java | 0 .../lib/instance/TransformedInstance.java | 0 .../flywheel/lib/light/LightPacking.java | 0 .../flywheel/lib/light/LightVolume.java | 0 .../flywheel/lib/material/CutoutShaders.java | 0 .../flywheel/lib/material/FogShaders.java | 0 .../flywheel/lib/material/Materials.java | 0 .../lib/material/SimpleCutoutShader.java | 0 .../lib/material/SimpleFogShader.java | 0 .../flywheel/lib/material/SimpleMaterial.java | 0 .../lib/material/SimpleMaterialShaders.java | 0 .../lib/material/StandardMaterialShaders.java | 0 .../flywheel/lib/math/MatrixMath.java | 0 .../jozufozu/flywheel/lib/math/MoreMath.java | 0 .../flywheel/lib/math/RenderMath.java | 0 .../lib/memory/AbstractMemoryBlockImpl.java | 0 .../lib/memory/DebugMemoryBlockImpl.java | 0 .../flywheel/lib/memory/FlwMemoryTracker.java | 0 .../flywheel/lib/memory/MemoryBlock.java | 0 .../flywheel/lib/memory/MemoryBlockImpl.java | 0 .../lib/memory/TrackedMemoryBlockImpl.java | 0 .../flywheel/lib/model/LineModelBuilder.java | 0 .../flywheel/lib/model/ModelCache.java | 0 .../flywheel/lib/model/ModelHolder.java | 0 .../flywheel/lib/model/ModelUtil.java | 0 .../jozufozu/flywheel/lib/model/Models.java | 0 .../flywheel/lib/model/QuadIndexSequence.java | 0 .../jozufozu/flywheel/lib/model/QuadMesh.java | 0 .../flywheel/lib/model/SimpleMesh.java | 0 .../flywheel/lib/model/SimpleModel.java | 0 .../flywheel/lib/model/SingleMeshModel.java | 0 .../lib/model/baked/BakedModelBufferer.java | 0 .../lib/model/baked/BakedModelBuilder.java | 0 .../lib/model/baked/BlockModelBuilder.java | 0 .../flywheel/lib/model/baked/MeshEmitter.java | 0 .../model/baked/MultiBlockModelBuilder.java | 0 .../lib/model/baked/PartialModel.java | 0 .../baked/TransformingVertexConsumer.java | 0 .../lib/model/baked/VirtualBlockGetter.java | 0 .../model/baked/VirtualEmptyBlockGetter.java | 0 .../lib/model/baked/VirtualLightEngine.java | 0 .../lib/model/part/ModelPartConverter.java | 0 .../flywheel/lib/model/part/VertexWriter.java | 0 .../flywheel/lib/task/BarrierPlan.java | 0 .../flywheel/lib/task/Distribute.java | 0 .../flywheel/lib/task/DynamicNestedPlan.java | 0 .../com/jozufozu/flywheel/lib/task/Flag.java | 0 .../flywheel/lib/task/ForEachPlan.java | 0 .../flywheel/lib/task/ForEachSlicePlan.java | 0 .../flywheel/lib/task/IfElsePlan.java | 0 .../flywheel/lib/task/MapContextPlan.java | 0 .../jozufozu/flywheel/lib/task/NamedFlag.java | 0 .../flywheel/lib/task/NestedPlan.java | 0 .../jozufozu/flywheel/lib/task/PlanMap.java | 0 .../jozufozu/flywheel/lib/task/RaisePlan.java | 0 .../flywheel/lib/task/RunnablePlan.java | 0 .../flywheel/lib/task/SimplePlan.java | 0 .../flywheel/lib/task/SimplyComposedPlan.java | 0 .../jozufozu/flywheel/lib/task/StageFlag.java | 0 .../flywheel/lib/task/SyncedPlan.java | 0 .../flywheel/lib/task/Synchronizer.java | 0 .../jozufozu/flywheel/lib/task/UnitPlan.java | 0 .../BooleanSupplierWithContext.java | 0 .../task/functional/ConsumerWithContext.java | 0 .../task/functional/RunnableWithContext.java | 0 .../task/functional/SupplierWithContext.java | 0 .../lib/task/functional/package-info.java | 0 .../flywheel/lib/transform/Affine.java | 0 .../lib/transform/PoseTransformStack.java | 0 .../flywheel/lib/transform/Rotate.java | 0 .../flywheel/lib/transform/Scale.java | 0 .../flywheel/lib/transform/Transform.java | 0 .../lib/transform/TransformStack.java | 0 .../flywheel/lib/transform/Translate.java | 0 .../flywheel/lib/util/AtomicBitset.java | 0 .../jozufozu/flywheel/lib/util/FlwUtil.java | 0 .../flywheel/lib/util/LevelAttached.java | 0 .../com/jozufozu/flywheel/lib/util/Pair.java | 0 .../flywheel/lib/util/ResourceUtil.java | 0 .../flywheel/lib/util/SectionUtil.java | 0 .../flywheel/lib/util/ShadersModHandler.java | 0 .../flywheel/lib/util/StringUtil.java | 0 .../com/jozufozu/flywheel/lib/util/Unit.java | 0 .../lib/vertex/AbstractVertexView.java | 0 .../flywheel/lib/vertex/EmptyVertexList.java | 0 .../flywheel/lib/vertex/FullVertexView.java | 0 .../lib/vertex/NoOverlayVertexView.java | 0 .../lib/vertex/PosTexNormalVertexView.java | 0 .../flywheel/lib/vertex/PosVertexView.java | 0 .../lib/visual/AbstractBlockEntityVisual.java | 0 .../lib/visual/AbstractEntityVisual.java | 0 .../flywheel/lib/visual/AbstractVisual.java | 0 .../flywheel/lib/visual/EntityComponent.java | 0 .../lib/visual/EntityVisibilityTester.java | 0 .../flywheel/lib/visual/InstanceRecycler.java | 0 .../visual/SimpleBlockEntityVisualizer.java | 0 .../lib/visual/SimpleDynamicVisual.java | 0 .../lib/visual/SimpleEntityVisual.java | 0 .../lib/visual/SimpleEntityVisualizer.java | 0 .../lib/visual/SimpleTickableVisual.java | 0 .../flywheel/lib/visual/SmartRecycler.java | 0 .../lib/visual/component/FireComponent.java | 0 .../lib/visual/component/HitboxComponent.java | 0 .../lib/visual/component/ShadowComponent.java | 0 .../jozufozu/flywheel/vanilla/BellVisual.java | 0 .../flywheel/vanilla/ChestVisual.java | 0 .../flywheel/vanilla/MinecartVisual.java | 0 .../flywheel/vanilla/ShulkerBoxVisual.java | 0 .../flywheel/vanilla/TntMinecartVisual.java | 0 .../flywheel/vanilla/VanillaVisuals.java | 0 .../vanilla/effect/ExampleEffect.java | 0 .../src}/main/resources/META-INF/mods.toml | 0 .../flywheel/flywheel/cutout/epsilon.glsl | 0 .../assets/flywheel/flywheel/cutout/half.glsl | 0 .../assets/flywheel/flywheel/cutout/off.glsl | 0 .../flywheel/flywheel/cutout/one_tenth.glsl | 0 .../assets/flywheel/flywheel/fog/linear.glsl | 0 .../flywheel/flywheel/fog/linear_fade.glsl | 0 .../assets/flywheel/flywheel/fog/none.glsl | 0 .../flywheel/instance/cull/oriented.glsl | 0 .../flywheel/instance/cull/shadow.glsl | 0 .../flywheel/instance/cull/transformed.glsl | 0 .../flywheel/flywheel/instance/oriented.vert | 0 .../flywheel/flywheel/instance/shadow.vert | 0 .../flywheel/instance/transformed.vert | 0 .../flywheel/flywheel/internal/api_impl.frag | 0 .../flywheel/flywheel/internal/api_impl.vert | 0 .../flywheel/flywheel/internal/colorizer.glsl | 0 .../flywheel/flywheel/internal/common.frag | 0 .../flywheel/flywheel/internal/common.vert | 0 .../flywheel/internal/components_header.frag | 0 .../flywheel/internal/components_header.vert | 0 .../flywheel/flywheel/internal/diffuse.glsl | 0 .../flywheel/internal/fog_distance.glsl | 0 .../flywheel/internal/indirect/apply.glsl | 0 .../internal/indirect/buffer_bindings.glsl | 0 .../flywheel/internal/indirect/cull.glsl | 0 .../internal/indirect/cull_api_impl.glsl | 0 .../internal/indirect/draw_command.glsl | 0 .../flywheel/internal/indirect/main.frag | 0 .../flywheel/internal/indirect/main.vert | 0 .../internal/indirect/model_descriptor.glsl | 0 .../flywheel/internal/indirect/scatter.glsl | 0 .../flywheel/internal/instancing/main.frag | 0 .../flywheel/internal/instancing/main.vert | 0 .../flywheel/flywheel/internal/material.glsl | 0 .../flywheel/internal/packed_material.glsl | 0 .../flywheel/internal/uniforms/fog.glsl | 0 .../flywheel/internal/uniforms/frame.glsl | 0 .../flywheel/internal/uniforms/level.glsl | 0 .../flywheel/internal/uniforms/options.glsl | 0 .../flywheel/internal/uniforms/player.glsl | 0 .../flywheel/internal/uniforms/uniforms.glsl | 0 .../flywheel/internal/vertex_input.vert | 0 .../flywheel/flywheel/material/default.frag | 0 .../flywheel/flywheel/material/default.vert | 0 .../flywheel/flywheel/material/lines.frag | 0 .../flywheel/flywheel/material/lines.vert | 0 .../flywheel/flywheel/material/wireframe.frag | 0 .../flywheel/flywheel/material/wireframe.vert | 0 .../assets/flywheel/flywheel/util/color.glsl | 0 .../assets/flywheel/flywheel/util/matrix.glsl | 0 .../flywheel/flywheel/util/quaternion.glsl | 0 .../resources/assets/flywheel/lang/en_us.json | 0 .../resources/flywheel.backend.mixins.json | 0 .../main/resources/flywheel.impl.mixins.json | 0 .../flywheel.impl.sodium.mixins.json | 0 {src => common/src}/main/resources/logo.png | Bin .../src}/main/resources/pack.mcmeta | 0 .../backend/glsl/MockShaderSources.java | 0 .../flywheel/backend/glsl/TestBase.java | 0 .../backend/glsl/TestErrorMessages.java | 0 .../backend/glsl/TestShaderSourceLoading.java | 0 .../flywheel/impl/task/WaitGroupTest.java | 0 .../lib/task/PlanCompositionTest.java | 0 .../flywheel/lib/task/PlanExecutionTest.java | 0 .../flywheel/lib/util/TestAtomicBitset.java | 0 fabric/build.gradle | 151 +++++++++++++ forge/build.gradle | 147 +++++++++++++ forge/gradle.properties | 1 + gradle.properties | 4 + gradle/wrapper/gradle-wrapper.jar | Bin 62076 -> 43453 bytes gradle/wrapper/gradle-wrapper.properties | 3 +- gradlew | 22 +- gradlew.bat | 20 +- old.build.gradle | 205 ++++++++++++++++++ settings.gradle | 15 +- 476 files changed, 684 insertions(+), 206 deletions(-) create mode 100644 common/build.gradle rename {src => common/src}/main/java/com/jozufozu/flywheel/Flywheel.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/BackendImplemented.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/backend/Backend.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/backend/BackendManager.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/backend/Engine.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/event/BeginFrameEvent.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/event/EndClientResourceReloadEvent.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/event/ReloadLevelRendererEvent.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/event/RenderContext.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/event/RenderStage.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/event/RenderStageEvent.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/instance/Instance.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/instance/InstanceHandle.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/instance/InstanceType.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/instance/InstanceWriter.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/instance/Instancer.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/instance/InstancerProvider.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/internal/InternalFlywheelApi.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/internal/package-info.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/layout/ArrayElementType.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/layout/ElementType.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/layout/FloatRepr.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/layout/IntegerRepr.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/layout/Layout.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/layout/LayoutBuilder.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/layout/MatrixElementType.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/layout/ScalarElementType.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/layout/UnsignedIntegerRepr.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/layout/ValueRepr.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/layout/VectorElementType.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/material/CutoutShader.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/material/DepthTest.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/material/FogShader.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/material/Material.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/material/MaterialShaders.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/material/Transparency.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/material/WriteMask.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/model/IndexSequence.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/model/Mesh.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/model/Model.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/registry/IdRegistry.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/registry/Registry.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/task/Plan.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/task/TaskExecutor.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/vertex/MutableVertexList.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/vertex/VertexList.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/vertex/VertexView.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/vertex/VertexViewProvider.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/vertex/VertexViewProviderRegistry.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/visual/BlockEntityVisual.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/visual/DistanceUpdateLimiter.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/visual/DynamicVisual.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/visual/Effect.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/visual/EffectVisual.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/visual/EntityVisual.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/visual/LitVisual.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/visual/TickableVisual.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/visual/Visual.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/visualization/BlockEntityVisualizer.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/visualization/EntityVisualizer.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/visualization/VisualEmbedding.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/visualization/VisualManager.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/visualization/VisualizationContext.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/visualization/VisualizationLevel.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/visualization/VisualizationManager.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/api/visualization/VisualizerRegistry.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/Backends.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/InternalVertex.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/LayoutAttributes.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/Samplers.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/ShaderIndices.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/compile/ContextShader.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/compile/FlwPrograms.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/compile/IndirectPrograms.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/compile/InstancingPrograms.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/compile/Pipeline.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/compile/PipelineCompiler.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/compile/PipelineProgramKey.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/compile/Pipelines.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/compile/SourceChecks.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/compile/component/BufferTextureInstanceComponent.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/compile/component/InstanceAssemblerComponent.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/compile/component/InstanceStructComponent.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/compile/component/SsboInstanceComponent.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/compile/component/StringSubstitutionComponent.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/compile/component/UberShaderComponent.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/compile/core/Compilation.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/compile/core/CompilationHarness.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/compile/core/Compile.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/compile/core/CompilerStats.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/compile/core/FailedCompilation.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/compile/core/LinkResult.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/compile/core/ProgramLinker.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/compile/core/ShaderCache.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/compile/core/ShaderResult.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/compile/core/SourceLoader.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/AbstractInstancer.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/CommonCrumbling.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/DrawManager.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/EngineImpl.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/EnvironmentStorage.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/GroupKey.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/IndexPool.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/InstanceHandleImpl.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/InstancerKey.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/InstancerProviderImpl.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/MaterialEncoder.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/MaterialRenderState.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/MeshPool.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/TextureBinder.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/embed/AbstractEmbeddedEnvironment.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/embed/EmbeddedLightTexture.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/embed/EmbeddedLightVolume.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/embed/EmbeddingUniforms.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/embed/Environment.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/embed/GlobalEnvironment.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/embed/NestedEmbeddedEnvironment.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/embed/TopLevelEmbeddedEnvironment.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectBuffers.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectCullingGroup.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectDraw.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectDrawManager.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectInstancer.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/indirect/ResizableStorageArray.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/indirect/ResizableStorageBuffer.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/indirect/ScatterList.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/indirect/StagingBuffer.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/indirect/TransferList.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/instancing/InstancedDraw.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/instancing/InstancedDrawManager.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/instancing/InstancedInstancer.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/instancing/InstancedRenderStage.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/uniform/FogUniforms.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/uniform/FrameUniforms.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/uniform/LevelUniforms.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/uniform/OptionsUniforms.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/uniform/PlayerUniforms.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/uniform/UniformBuffer.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/uniform/UniformWriter.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/engine/uniform/Uniforms.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/gl/Driver.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/gl/GlCompat.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/gl/GlFence.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/gl/GlNumericType.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/gl/GlObject.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/gl/GlPrimitive.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/gl/GlStateTracker.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/gl/GlTexture.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/gl/GlTextureUnit.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/gl/TextureBuffer.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/gl/array/GlVertexArray.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/gl/array/GlVertexArrayDSA.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/gl/array/GlVertexArrayGL3.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/gl/array/GlVertexArraySeparateAttributes.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/gl/array/VertexAttribute.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/gl/buffer/Buffer.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/gl/buffer/GlBuffer.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/gl/buffer/GlBufferType.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/gl/buffer/GlBufferUsage.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/gl/error/GlError.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/gl/error/GlException.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/gl/shader/GlProgram.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/gl/shader/GlShader.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/gl/shader/ShaderType.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/GlslVersion.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/LoadError.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/LoadResult.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/ShaderSources.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/SourceComponent.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/SourceFile.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/SourceLines.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/error/ConsoleColors.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/error/ErrorBuilder.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/error/ErrorLevel.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/Divider.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/ErrorLine.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/FileLine.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/HeaderLine.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/NestedLine.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/SourceLine.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/SpanHighlightLine.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/TextLine.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/generate/BinOp.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/generate/FnSignature.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslBlock.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslBuilder.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslExpr.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslFn.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslStmt.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslStruct.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslSwitch.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslUniformBlock.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslVertexInput.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/parse/Import.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/parse/ShaderField.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/parse/ShaderFunction.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/parse/ShaderStruct.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/parse/ShaderVariable.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/parse/StructField.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/span/CharPos.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/span/ErrorSpan.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/span/Span.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/glsl/span/StringSpan.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/mixin/AbstractClientPlayerAccessor.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/mixin/GameRendererAccessor.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/mixin/GlStateManagerMixin.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/mixin/LightTextureAccessor.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/mixin/OptionsMixin.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/mixin/OverlayTextureAccessor.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/mixin/RenderSystemMixin.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/util/AtomicReferenceCounted.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/util/MemoryBuffer.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/backend/util/ReferenceCounted.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/config/BackendArgument.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/config/DebugMode.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/config/FlwCommands.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/config/FlwConfig.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/BackendManagerImpl.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/InternalFlywheelImpl.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/event/RenderContextImpl.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/extension/BlockEntityTypeExtension.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/extension/EntityTypeExtension.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/extension/LevelExtension.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/extension/PoseStackExtension.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/extension/VertexFormatExtension.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/layout/ArrayElementTypeImpl.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/layout/LayoutBuilderImpl.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/layout/LayoutImpl.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/layout/LayoutInterpreter.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/layout/MatrixElementTypeImpl.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/layout/ScalarElementTypeImpl.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/layout/VectorElementTypeImpl.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/mixin/BlockEntityTypeMixin.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/mixin/ClientChunkCacheMixin.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/mixin/ClientLevelMixin.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/mixin/EntityTypeMixin.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/mixin/LevelMixin.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/mixin/LevelRendererMixin.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/mixin/MinecraftMixin.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/mixin/PoseStackMixin.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/mixin/VertexFormatMixin.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/mixin/fix/FixFabulousDepthMixin.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/mixin/fix/FixNormalScalingMixin.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/mixin/sodium/ChunkBuilderMeshingTaskMixin.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/mixin/sodium/SodiumMixinPlugin.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/mixin/visualmanage/BlockEntityMixin.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/mixin/visualmanage/LevelChunkMixin.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/mixin/visualmanage/LevelRendererMixin.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/mixin/visualmanage/RebuildTaskMixin.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/registry/IdRegistryImpl.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/registry/RegistryImpl.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/task/FlwTaskExecutor.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/task/ParallelTaskExecutor.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/task/SerialTaskExecutor.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/task/ThreadGroupNotifier.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/task/WaitGroup.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/vertex/InferredVertexFormatInfo.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/vertex/InferredVertexView.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/vertex/InferredVertexViewProvider.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/vertex/VertexViewProviderRegistryImpl.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/visual/DynamicVisualContextImpl.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/visual/TickableVisualContextImpl.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/visualization/VisualizationEventHandler.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/visualization/VisualizationHelper.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/visualization/VisualizationManagerImpl.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/visualization/VisualizerRegistryImpl.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/visualization/manager/BlockEntityStorage.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/visualization/manager/EffectStorage.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/visualization/manager/EntityStorage.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/visualization/manager/VisualManagerImpl.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/visualization/ratelimit/BandedPrimeLimiter.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/visualization/ratelimit/DistanceUpdateLimiterImpl.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/visualization/ratelimit/NonLimiter.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/visualization/storage/Action.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/visualization/storage/LitVisualStorage.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/visualization/storage/Storage.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/impl/visualization/storage/Transaction.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/backend/SimpleBackend.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/box/Box.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/box/MutableBox.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/instance/AbstractInstance.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/instance/ColoredLitInstance.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/instance/FlatLit.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/instance/InstanceTypes.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/instance/OrientedInstance.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/instance/ShadowInstance.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/instance/SimpleInstanceType.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/instance/TransformedInstance.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/light/LightPacking.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/light/LightVolume.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/material/CutoutShaders.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/material/FogShaders.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/material/Materials.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/material/SimpleCutoutShader.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/material/SimpleFogShader.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/material/SimpleMaterial.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/material/SimpleMaterialShaders.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/material/StandardMaterialShaders.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/math/MatrixMath.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/math/MoreMath.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/math/RenderMath.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/memory/AbstractMemoryBlockImpl.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/memory/DebugMemoryBlockImpl.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/memory/FlwMemoryTracker.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/memory/MemoryBlock.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/memory/MemoryBlockImpl.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/memory/TrackedMemoryBlockImpl.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/model/LineModelBuilder.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/model/ModelCache.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/model/ModelHolder.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/model/ModelUtil.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/model/Models.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/model/QuadIndexSequence.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/model/QuadMesh.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/model/SimpleMesh.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/model/SimpleModel.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/model/SingleMeshModel.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/model/baked/BakedModelBufferer.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/model/baked/BakedModelBuilder.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/model/baked/BlockModelBuilder.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/model/baked/MeshEmitter.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/model/baked/MultiBlockModelBuilder.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/model/baked/PartialModel.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/model/baked/TransformingVertexConsumer.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/model/baked/VirtualBlockGetter.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/model/baked/VirtualEmptyBlockGetter.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/model/baked/VirtualLightEngine.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/model/part/ModelPartConverter.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/model/part/VertexWriter.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/task/BarrierPlan.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/task/Distribute.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/task/DynamicNestedPlan.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/task/Flag.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/task/ForEachPlan.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/task/ForEachSlicePlan.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/task/IfElsePlan.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/task/MapContextPlan.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/task/NamedFlag.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/task/NestedPlan.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/task/PlanMap.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/task/RaisePlan.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/task/RunnablePlan.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/task/SimplePlan.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/task/SimplyComposedPlan.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/task/StageFlag.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/task/SyncedPlan.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/task/Synchronizer.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/task/UnitPlan.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/task/functional/BooleanSupplierWithContext.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/task/functional/ConsumerWithContext.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/task/functional/RunnableWithContext.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/task/functional/SupplierWithContext.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/task/functional/package-info.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/transform/Affine.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/transform/PoseTransformStack.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/transform/Rotate.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/transform/Scale.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/transform/Transform.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/transform/TransformStack.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/transform/Translate.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/util/AtomicBitset.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/util/FlwUtil.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/util/LevelAttached.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/util/Pair.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/util/ResourceUtil.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/util/SectionUtil.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/util/ShadersModHandler.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/util/StringUtil.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/util/Unit.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/vertex/AbstractVertexView.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/vertex/EmptyVertexList.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/vertex/FullVertexView.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/vertex/NoOverlayVertexView.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/vertex/PosTexNormalVertexView.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/vertex/PosVertexView.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/visual/AbstractBlockEntityVisual.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/visual/AbstractEntityVisual.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/visual/AbstractVisual.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/visual/EntityComponent.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/visual/EntityVisibilityTester.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/visual/InstanceRecycler.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/visual/SimpleBlockEntityVisualizer.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/visual/SimpleDynamicVisual.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/visual/SimpleEntityVisual.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/visual/SimpleEntityVisualizer.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/visual/SimpleTickableVisual.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/visual/SmartRecycler.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/visual/component/FireComponent.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/visual/component/HitboxComponent.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/lib/visual/component/ShadowComponent.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/vanilla/BellVisual.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/vanilla/ChestVisual.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/vanilla/MinecartVisual.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/vanilla/ShulkerBoxVisual.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/vanilla/TntMinecartVisual.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/vanilla/VanillaVisuals.java (100%) rename {src => common/src}/main/java/com/jozufozu/flywheel/vanilla/effect/ExampleEffect.java (100%) rename {src => common/src}/main/resources/META-INF/mods.toml (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/cutout/epsilon.glsl (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/cutout/half.glsl (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/cutout/off.glsl (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/cutout/one_tenth.glsl (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/fog/linear.glsl (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/fog/linear_fade.glsl (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/fog/none.glsl (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/instance/cull/oriented.glsl (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/instance/cull/shadow.glsl (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/instance/cull/transformed.glsl (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/instance/oriented.vert (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/instance/shadow.vert (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/instance/transformed.vert (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/internal/api_impl.frag (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/internal/api_impl.vert (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/internal/colorizer.glsl (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/internal/common.frag (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/internal/common.vert (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/internal/components_header.frag (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/internal/components_header.vert (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/internal/diffuse.glsl (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/internal/fog_distance.glsl (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/internal/indirect/apply.glsl (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/internal/indirect/buffer_bindings.glsl (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/internal/indirect/cull.glsl (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/internal/indirect/cull_api_impl.glsl (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/internal/indirect/draw_command.glsl (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/internal/indirect/main.frag (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/internal/indirect/main.vert (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/internal/indirect/model_descriptor.glsl (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/internal/indirect/scatter.glsl (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/internal/instancing/main.frag (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/internal/instancing/main.vert (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/internal/material.glsl (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/internal/packed_material.glsl (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/internal/uniforms/fog.glsl (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/internal/uniforms/frame.glsl (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/internal/uniforms/level.glsl (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/internal/uniforms/options.glsl (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/internal/uniforms/player.glsl (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/internal/uniforms/uniforms.glsl (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/internal/vertex_input.vert (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/material/default.frag (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/material/default.vert (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/material/lines.frag (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/material/lines.vert (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/material/wireframe.frag (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/material/wireframe.vert (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/util/color.glsl (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/util/matrix.glsl (100%) rename {src => common/src}/main/resources/assets/flywheel/flywheel/util/quaternion.glsl (100%) rename {src => common/src}/main/resources/assets/flywheel/lang/en_us.json (100%) rename {src => common/src}/main/resources/flywheel.backend.mixins.json (100%) rename {src => common/src}/main/resources/flywheel.impl.mixins.json (100%) rename {src => common/src}/main/resources/flywheel.impl.sodium.mixins.json (100%) rename {src => common/src}/main/resources/logo.png (100%) rename {src => common/src}/main/resources/pack.mcmeta (100%) rename {src => common/src}/test/java/com/jozufozu/flywheel/backend/glsl/MockShaderSources.java (100%) rename {src => common/src}/test/java/com/jozufozu/flywheel/backend/glsl/TestBase.java (100%) rename {src => common/src}/test/java/com/jozufozu/flywheel/backend/glsl/TestErrorMessages.java (100%) rename {src => common/src}/test/java/com/jozufozu/flywheel/backend/glsl/TestShaderSourceLoading.java (100%) rename {src => common/src}/test/java/com/jozufozu/flywheel/impl/task/WaitGroupTest.java (100%) rename {src => common/src}/test/java/com/jozufozu/flywheel/lib/task/PlanCompositionTest.java (100%) rename {src => common/src}/test/java/com/jozufozu/flywheel/lib/task/PlanExecutionTest.java (100%) rename {src => common/src}/test/java/com/jozufozu/flywheel/lib/util/TestAtomicBitset.java (100%) create mode 100644 fabric/build.gradle create mode 100644 forge/build.gradle create mode 100644 forge/gradle.properties create mode 100644 old.build.gradle diff --git a/.gitignore b/.gitignore index 88fc08b84..c5cbdefa4 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ build/ gradle-app.setting out/ logs/ +dist/ ## IntelliJ IDEA diff --git a/build.gradle b/build.gradle index 6caf08ab3..1ec9b2791 100644 --- a/build.gradle +++ b/build.gradle @@ -1,108 +1,34 @@ plugins { id 'eclipse' id 'idea' - id 'maven-publish' - id 'net.minecraftforge.gradle' version "${forgegradle_version}" - id 'org.parchmentmc.librarian.forgegradle' version "${librarian_version}" - id 'org.spongepowered.mixin' version "${mixingradle_version}" + // make sure gradle loads the same arch plugin across all subprojects + id 'dev.architectury.loom' apply false } -boolean dev = System.getenv('RELEASE') == null || System.getenv('RELEASE').equalsIgnoreCase('false'); - -ext.buildNumber = System.getenv('BUILD_NUMBER') - -group = 'com.jozufozu.flywheel' -archivesBaseName = "flywheel-forge-${artifact_minecraft_version}" -version = mod_version + (dev && buildNumber != null ? "-${buildNumber}" : '') - -java.toolchain.languageVersion = JavaLanguageVersion.of(17) - println "Java: ${System.getProperty 'java.version'}, JVM: ${System.getProperty 'java.vm.version'} (${System.getProperty 'java.vendor'}), Arch: ${System.getProperty 'os.arch'}" -minecraft { - mappings channel: 'parchment', version: "${parchment_version}-${minecraft_version}" - copyIdeResources = true +subprojects { + boolean dev = System.getenv('RELEASE') == null || System.getenv('RELEASE').equalsIgnoreCase('false'); - runs { - configureEach { - workingDirectory project.file('run') + ext.buildNumber = System.getenv('BUILD_NUMBER') - property 'forge.logging.markers', '' - property 'forge.logging.console.level', 'debug' + group = 'com.jozufozu.flywheel' + version = mod_version + (dev && buildNumber != null ? "-${buildNumber}" : '') - property 'mixin.env.remapRefMap', 'true' - property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" - - mods { - flywheel { - source sourceSets.main - } - } + tasks { + // make builds reproducible + withType(AbstractArchiveTask).configureEach { + preserveFileTimestamps = false + reproducibleFileOrder = true } - client { - property 'flw.dumpShaderSource', 'true' - property 'flw.debugMemorySafety', 'true' - } - - server { - args '--nogui' + // module metadata is often broken on multi-platform projects + withType(GenerateModuleMetadata).configureEach { + enabled = false } } } -repositories { - maven { - url 'https://www.cursemaven.com' - content { - includeGroup "curse.maven" - } - } - maven { - name 'tterrag maven' - url 'https://maven.tterrag.com/' - } - maven { - name = "Modrinth" - url = "https://api.modrinth.com/maven" - content { - includeGroup "maven.modrinth" - } - } - mavenCentral() -} - -dependencies { - testImplementation 'org.junit.jupiter:junit-jupiter:5.8.1' - minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" - - compileOnly fg.deobf("maven.modrinth:embeddium:0.3.9+mc1.20.1") - compileOnly fg.deobf("maven.modrinth:oculus:1.20.1-1.6.15a") - // implementation fg.deobf("maven.modrinth:starlight-forge:1.1.2+1.20") - - // https://discord.com/channels/313125603924639766/725850371834118214/910619168821354497 - // Prevent Mixin annotation processor from getting into IntelliJ's annotation processor settings - // This allows 'Settings > Build, Execution, and Deployment > Build Tools > Gradle > Build and run using' set to IntelliJ to work correctly - // if (System.getProperty('idea.sync.active') != 'true') { - annotationProcessor "org.spongepowered:mixin:${mixin_version}:processor" - // } -} - -test { - useJUnitPlatform() -} - -mixin { - add sourceSets.main, 'flywheel.refmap.json' - - config 'flywheel.backend.mixins.json' - config 'flywheel.impl.mixins.json' - config 'flywheel.impl.sodium.mixins.json' - - debug.verbose = true - debug.export = true -} - idea { // Tell IDEA to always download sources/javadoc artifacts from maven. module { @@ -110,96 +36,3 @@ idea { downloadSources = true } } - -// Workaround for SpongePowered/MixinGradle#38 -afterEvaluate { - tasks.configureReobfTaskForReobfJar.mustRunAfter(tasks.compileJava) -} - -tasks.withType(JavaCompile).configureEach { - options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation -} - -javadoc { - source = [sourceSets.main.allJava] - // prevent java 8's strict doclint for javadocs from failing builds - options.addStringOption('Xdoclint:none', '-quiet') -} - -compileJava { - options.compilerArgs = ['-Xdiags:verbose'] -} - -tasks.named('processResources', ProcessResources).configure { - var replaceProperties = [ - minecraft_version : minecraft_version, - minecraft_version_range: minecraft_version_range, - forge_version : forge_version, - forge_version_range : forge_version_range, - loader_version_range : loader_version_range, - mod_version : mod_version - ] - inputs.properties replaceProperties - - filesMatching(['META-INF/mods.toml', 'pack.mcmeta']) { - expand replaceProperties + [project: project] - } -} - -apply from: rootProject.file('gradle/package-infos.gradle') - -void addLicense(jarTask) { - jarTask.from('LICENSE.md') { - rename '(.*)\\.(.*)', '$1_' + archivesBaseName + '.$2' - } -} - -void addManifest(jarTask) { - jarTask.manifest { - attributes([ - 'Specification-Title' : 'flywheel', - // 'Specification-Vendor': 'flywheel authors', - 'Specification-Version' : '1', // We are version 1 of ourselves - 'Implementation-Title' : project.jar.archiveBaseName, - 'Implementation-Version' : project.jar.archiveVersion, - // 'Implementation-Vendor': 'flywheel authors', - 'Implementation-Timestamp': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"), - ]) - } -} - -tasks.named('jar', Jar).configure { - archiveClassifier = '' - - finalizedBy 'reobfJar' - addManifest(it) - addLicense(it) -} - -java { - withSourcesJar() - withJavadocJar() -} - -publishing { - publications { - register('mavenJava', MavenPublication) { - artifact jar - artifact sourcesJar - artifact javadocJar - - artifactId = archivesBaseName - - fg.component(it) - } - } - repositories { - maven { - url "file://${project.projectDir}/mcmodsrepo" - } - - if (project.hasProperty('mavendir')) { - maven { url mavendir } - } - } -} diff --git a/common/build.gradle b/common/build.gradle new file mode 100644 index 000000000..3e4ebaeeb --- /dev/null +++ b/common/build.gradle @@ -0,0 +1,124 @@ +plugins { + id 'maven-publish' + id 'dev.architectury.loom' +} + +base { + archivesName = "flywheel-${project.name}-${artifact_minecraft_version}" +} + +repositories { + maven { + name = 'ParchmentMC' + url = 'https://maven.parchmentmc.org' + } + mavenCentral() +} + +dependencies { + minecraft "com.mojang:minecraft:$minecraft_version" + mappings(loom.layered() { + officialMojangMappings() + parchment("org.parchmentmc.data:parchment-${minecraft_version}:${parchment_version}@zip") + }) + + modCompileOnly "net.fabricmc:fabric-loader:$fabric_loader_version" +} + +java { + JavaVersion javaVersion = JavaVersion.toVersion(java_version) + sourceCompatibility = javaVersion + targetCompatibility = javaVersion + + toolchain.languageVersion = JavaLanguageVersion.of(java_version) + + withSourcesJar() + withJavadocJar() +} + +processResources.configure { + from(project(':common').sourceSets.main.resources) + + var replaceProperties = [ + minecraft_version : minecraft_version, + minecraft_version_range: minecraft_version_range, + forge_version : forge_version, + forge_version_range : forge_version_range, + loader_version_range : loader_version_range, + mod_version : mod_version + ] + inputs.properties replaceProperties + + filesMatching(['META-INF/mods.toml', 'META-INF/neoforge.mods.toml', 'pack.mcmeta', 'fabric.mod.json']) { + expand replaceProperties + [project: project] + } +} + +tasks.withType(JavaCompile).configureEach { + options.encoding = 'UTF-8' + options.release = Integer.parseInt(java_version) + options.compilerArgs = ['-Xdiags:verbose'] +} + +jar.configure { + archiveClassifier = '' + addManifest(it) + addLicense(it) +} + +sourcesJar.configure { + addManifest(it) + addLicense(it) +} + +javadoc.configure { + // prevent java 8's strict doclint for javadocs from failing builds + options.addStringOption('Xdoclint:none', '-quiet') +} + +test.configure { + useJUnitPlatform() +} + +void addLicense(jarTask) { + jarTask.from('LICENSE.md') { + rename '(.*)\\.(.*)', '$1_' + archivesBaseName + '.$2' + } +} + +void addManifest(jarTask) { + jarTask.manifest { + attributes([ + 'Specification-Title' : 'flywheel', + // 'Specification-Vendor': 'flywheel authors', + 'Specification-Version' : '1', // We are version 1 of ourselves + 'Implementation-Title' : project.jar.archiveBaseName, + 'Implementation-Version' : project.jar.archiveVersion, + // 'Implementation-Vendor': 'flywheel authors', + 'Implementation-Timestamp': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"), + ]) + } +} + +publishing { + publications { + register('mavenJava', MavenPublication) { + from(components["java"]) + artifactId = "flywheel-${project.name}-intermediary-${artifact_minecraft_version}" + } + register('mojmapJava', MavenPublication) { + artifact jar + artifact sourcesJar + artifactId = "flywheel-${project.name}-mojmap-${artifact_minecraft_version}" + } + } + repositories { + maven { + url "file://${project.projectDir}/mcmodsrepo" + } + + if (project.hasProperty('mavendir')) { + maven { url rootProject.file(property('mavendir')) } + } + } +} diff --git a/src/main/java/com/jozufozu/flywheel/Flywheel.java b/common/src/main/java/com/jozufozu/flywheel/Flywheel.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/Flywheel.java rename to common/src/main/java/com/jozufozu/flywheel/Flywheel.java diff --git a/src/main/java/com/jozufozu/flywheel/api/BackendImplemented.java b/common/src/main/java/com/jozufozu/flywheel/api/BackendImplemented.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/BackendImplemented.java rename to common/src/main/java/com/jozufozu/flywheel/api/BackendImplemented.java diff --git a/src/main/java/com/jozufozu/flywheel/api/backend/Backend.java b/common/src/main/java/com/jozufozu/flywheel/api/backend/Backend.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/backend/Backend.java rename to common/src/main/java/com/jozufozu/flywheel/api/backend/Backend.java diff --git a/src/main/java/com/jozufozu/flywheel/api/backend/BackendManager.java b/common/src/main/java/com/jozufozu/flywheel/api/backend/BackendManager.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/backend/BackendManager.java rename to common/src/main/java/com/jozufozu/flywheel/api/backend/BackendManager.java diff --git a/src/main/java/com/jozufozu/flywheel/api/backend/Engine.java b/common/src/main/java/com/jozufozu/flywheel/api/backend/Engine.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/backend/Engine.java rename to common/src/main/java/com/jozufozu/flywheel/api/backend/Engine.java diff --git a/src/main/java/com/jozufozu/flywheel/api/event/BeginFrameEvent.java b/common/src/main/java/com/jozufozu/flywheel/api/event/BeginFrameEvent.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/event/BeginFrameEvent.java rename to common/src/main/java/com/jozufozu/flywheel/api/event/BeginFrameEvent.java diff --git a/src/main/java/com/jozufozu/flywheel/api/event/EndClientResourceReloadEvent.java b/common/src/main/java/com/jozufozu/flywheel/api/event/EndClientResourceReloadEvent.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/event/EndClientResourceReloadEvent.java rename to common/src/main/java/com/jozufozu/flywheel/api/event/EndClientResourceReloadEvent.java diff --git a/src/main/java/com/jozufozu/flywheel/api/event/ReloadLevelRendererEvent.java b/common/src/main/java/com/jozufozu/flywheel/api/event/ReloadLevelRendererEvent.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/event/ReloadLevelRendererEvent.java rename to common/src/main/java/com/jozufozu/flywheel/api/event/ReloadLevelRendererEvent.java diff --git a/src/main/java/com/jozufozu/flywheel/api/event/RenderContext.java b/common/src/main/java/com/jozufozu/flywheel/api/event/RenderContext.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/event/RenderContext.java rename to common/src/main/java/com/jozufozu/flywheel/api/event/RenderContext.java diff --git a/src/main/java/com/jozufozu/flywheel/api/event/RenderStage.java b/common/src/main/java/com/jozufozu/flywheel/api/event/RenderStage.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/event/RenderStage.java rename to common/src/main/java/com/jozufozu/flywheel/api/event/RenderStage.java diff --git a/src/main/java/com/jozufozu/flywheel/api/event/RenderStageEvent.java b/common/src/main/java/com/jozufozu/flywheel/api/event/RenderStageEvent.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/event/RenderStageEvent.java rename to common/src/main/java/com/jozufozu/flywheel/api/event/RenderStageEvent.java diff --git a/src/main/java/com/jozufozu/flywheel/api/instance/Instance.java b/common/src/main/java/com/jozufozu/flywheel/api/instance/Instance.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/instance/Instance.java rename to common/src/main/java/com/jozufozu/flywheel/api/instance/Instance.java diff --git a/src/main/java/com/jozufozu/flywheel/api/instance/InstanceHandle.java b/common/src/main/java/com/jozufozu/flywheel/api/instance/InstanceHandle.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/instance/InstanceHandle.java rename to common/src/main/java/com/jozufozu/flywheel/api/instance/InstanceHandle.java diff --git a/src/main/java/com/jozufozu/flywheel/api/instance/InstanceType.java b/common/src/main/java/com/jozufozu/flywheel/api/instance/InstanceType.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/instance/InstanceType.java rename to common/src/main/java/com/jozufozu/flywheel/api/instance/InstanceType.java diff --git a/src/main/java/com/jozufozu/flywheel/api/instance/InstanceWriter.java b/common/src/main/java/com/jozufozu/flywheel/api/instance/InstanceWriter.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/instance/InstanceWriter.java rename to common/src/main/java/com/jozufozu/flywheel/api/instance/InstanceWriter.java diff --git a/src/main/java/com/jozufozu/flywheel/api/instance/Instancer.java b/common/src/main/java/com/jozufozu/flywheel/api/instance/Instancer.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/instance/Instancer.java rename to common/src/main/java/com/jozufozu/flywheel/api/instance/Instancer.java diff --git a/src/main/java/com/jozufozu/flywheel/api/instance/InstancerProvider.java b/common/src/main/java/com/jozufozu/flywheel/api/instance/InstancerProvider.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/instance/InstancerProvider.java rename to common/src/main/java/com/jozufozu/flywheel/api/instance/InstancerProvider.java diff --git a/src/main/java/com/jozufozu/flywheel/api/internal/InternalFlywheelApi.java b/common/src/main/java/com/jozufozu/flywheel/api/internal/InternalFlywheelApi.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/internal/InternalFlywheelApi.java rename to common/src/main/java/com/jozufozu/flywheel/api/internal/InternalFlywheelApi.java diff --git a/src/main/java/com/jozufozu/flywheel/api/internal/package-info.java b/common/src/main/java/com/jozufozu/flywheel/api/internal/package-info.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/internal/package-info.java rename to common/src/main/java/com/jozufozu/flywheel/api/internal/package-info.java diff --git a/src/main/java/com/jozufozu/flywheel/api/layout/ArrayElementType.java b/common/src/main/java/com/jozufozu/flywheel/api/layout/ArrayElementType.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/layout/ArrayElementType.java rename to common/src/main/java/com/jozufozu/flywheel/api/layout/ArrayElementType.java diff --git a/src/main/java/com/jozufozu/flywheel/api/layout/ElementType.java b/common/src/main/java/com/jozufozu/flywheel/api/layout/ElementType.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/layout/ElementType.java rename to common/src/main/java/com/jozufozu/flywheel/api/layout/ElementType.java diff --git a/src/main/java/com/jozufozu/flywheel/api/layout/FloatRepr.java b/common/src/main/java/com/jozufozu/flywheel/api/layout/FloatRepr.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/layout/FloatRepr.java rename to common/src/main/java/com/jozufozu/flywheel/api/layout/FloatRepr.java diff --git a/src/main/java/com/jozufozu/flywheel/api/layout/IntegerRepr.java b/common/src/main/java/com/jozufozu/flywheel/api/layout/IntegerRepr.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/layout/IntegerRepr.java rename to common/src/main/java/com/jozufozu/flywheel/api/layout/IntegerRepr.java diff --git a/src/main/java/com/jozufozu/flywheel/api/layout/Layout.java b/common/src/main/java/com/jozufozu/flywheel/api/layout/Layout.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/layout/Layout.java rename to common/src/main/java/com/jozufozu/flywheel/api/layout/Layout.java diff --git a/src/main/java/com/jozufozu/flywheel/api/layout/LayoutBuilder.java b/common/src/main/java/com/jozufozu/flywheel/api/layout/LayoutBuilder.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/layout/LayoutBuilder.java rename to common/src/main/java/com/jozufozu/flywheel/api/layout/LayoutBuilder.java diff --git a/src/main/java/com/jozufozu/flywheel/api/layout/MatrixElementType.java b/common/src/main/java/com/jozufozu/flywheel/api/layout/MatrixElementType.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/layout/MatrixElementType.java rename to common/src/main/java/com/jozufozu/flywheel/api/layout/MatrixElementType.java diff --git a/src/main/java/com/jozufozu/flywheel/api/layout/ScalarElementType.java b/common/src/main/java/com/jozufozu/flywheel/api/layout/ScalarElementType.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/layout/ScalarElementType.java rename to common/src/main/java/com/jozufozu/flywheel/api/layout/ScalarElementType.java diff --git a/src/main/java/com/jozufozu/flywheel/api/layout/UnsignedIntegerRepr.java b/common/src/main/java/com/jozufozu/flywheel/api/layout/UnsignedIntegerRepr.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/layout/UnsignedIntegerRepr.java rename to common/src/main/java/com/jozufozu/flywheel/api/layout/UnsignedIntegerRepr.java diff --git a/src/main/java/com/jozufozu/flywheel/api/layout/ValueRepr.java b/common/src/main/java/com/jozufozu/flywheel/api/layout/ValueRepr.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/layout/ValueRepr.java rename to common/src/main/java/com/jozufozu/flywheel/api/layout/ValueRepr.java diff --git a/src/main/java/com/jozufozu/flywheel/api/layout/VectorElementType.java b/common/src/main/java/com/jozufozu/flywheel/api/layout/VectorElementType.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/layout/VectorElementType.java rename to common/src/main/java/com/jozufozu/flywheel/api/layout/VectorElementType.java diff --git a/src/main/java/com/jozufozu/flywheel/api/material/CutoutShader.java b/common/src/main/java/com/jozufozu/flywheel/api/material/CutoutShader.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/material/CutoutShader.java rename to common/src/main/java/com/jozufozu/flywheel/api/material/CutoutShader.java diff --git a/src/main/java/com/jozufozu/flywheel/api/material/DepthTest.java b/common/src/main/java/com/jozufozu/flywheel/api/material/DepthTest.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/material/DepthTest.java rename to common/src/main/java/com/jozufozu/flywheel/api/material/DepthTest.java diff --git a/src/main/java/com/jozufozu/flywheel/api/material/FogShader.java b/common/src/main/java/com/jozufozu/flywheel/api/material/FogShader.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/material/FogShader.java rename to common/src/main/java/com/jozufozu/flywheel/api/material/FogShader.java diff --git a/src/main/java/com/jozufozu/flywheel/api/material/Material.java b/common/src/main/java/com/jozufozu/flywheel/api/material/Material.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/material/Material.java rename to common/src/main/java/com/jozufozu/flywheel/api/material/Material.java diff --git a/src/main/java/com/jozufozu/flywheel/api/material/MaterialShaders.java b/common/src/main/java/com/jozufozu/flywheel/api/material/MaterialShaders.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/material/MaterialShaders.java rename to common/src/main/java/com/jozufozu/flywheel/api/material/MaterialShaders.java diff --git a/src/main/java/com/jozufozu/flywheel/api/material/Transparency.java b/common/src/main/java/com/jozufozu/flywheel/api/material/Transparency.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/material/Transparency.java rename to common/src/main/java/com/jozufozu/flywheel/api/material/Transparency.java diff --git a/src/main/java/com/jozufozu/flywheel/api/material/WriteMask.java b/common/src/main/java/com/jozufozu/flywheel/api/material/WriteMask.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/material/WriteMask.java rename to common/src/main/java/com/jozufozu/flywheel/api/material/WriteMask.java diff --git a/src/main/java/com/jozufozu/flywheel/api/model/IndexSequence.java b/common/src/main/java/com/jozufozu/flywheel/api/model/IndexSequence.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/model/IndexSequence.java rename to common/src/main/java/com/jozufozu/flywheel/api/model/IndexSequence.java diff --git a/src/main/java/com/jozufozu/flywheel/api/model/Mesh.java b/common/src/main/java/com/jozufozu/flywheel/api/model/Mesh.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/model/Mesh.java rename to common/src/main/java/com/jozufozu/flywheel/api/model/Mesh.java diff --git a/src/main/java/com/jozufozu/flywheel/api/model/Model.java b/common/src/main/java/com/jozufozu/flywheel/api/model/Model.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/model/Model.java rename to common/src/main/java/com/jozufozu/flywheel/api/model/Model.java diff --git a/src/main/java/com/jozufozu/flywheel/api/registry/IdRegistry.java b/common/src/main/java/com/jozufozu/flywheel/api/registry/IdRegistry.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/registry/IdRegistry.java rename to common/src/main/java/com/jozufozu/flywheel/api/registry/IdRegistry.java diff --git a/src/main/java/com/jozufozu/flywheel/api/registry/Registry.java b/common/src/main/java/com/jozufozu/flywheel/api/registry/Registry.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/registry/Registry.java rename to common/src/main/java/com/jozufozu/flywheel/api/registry/Registry.java diff --git a/src/main/java/com/jozufozu/flywheel/api/task/Plan.java b/common/src/main/java/com/jozufozu/flywheel/api/task/Plan.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/task/Plan.java rename to common/src/main/java/com/jozufozu/flywheel/api/task/Plan.java diff --git a/src/main/java/com/jozufozu/flywheel/api/task/TaskExecutor.java b/common/src/main/java/com/jozufozu/flywheel/api/task/TaskExecutor.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/task/TaskExecutor.java rename to common/src/main/java/com/jozufozu/flywheel/api/task/TaskExecutor.java diff --git a/src/main/java/com/jozufozu/flywheel/api/vertex/MutableVertexList.java b/common/src/main/java/com/jozufozu/flywheel/api/vertex/MutableVertexList.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/vertex/MutableVertexList.java rename to common/src/main/java/com/jozufozu/flywheel/api/vertex/MutableVertexList.java diff --git a/src/main/java/com/jozufozu/flywheel/api/vertex/VertexList.java b/common/src/main/java/com/jozufozu/flywheel/api/vertex/VertexList.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/vertex/VertexList.java rename to common/src/main/java/com/jozufozu/flywheel/api/vertex/VertexList.java diff --git a/src/main/java/com/jozufozu/flywheel/api/vertex/VertexView.java b/common/src/main/java/com/jozufozu/flywheel/api/vertex/VertexView.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/vertex/VertexView.java rename to common/src/main/java/com/jozufozu/flywheel/api/vertex/VertexView.java diff --git a/src/main/java/com/jozufozu/flywheel/api/vertex/VertexViewProvider.java b/common/src/main/java/com/jozufozu/flywheel/api/vertex/VertexViewProvider.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/vertex/VertexViewProvider.java rename to common/src/main/java/com/jozufozu/flywheel/api/vertex/VertexViewProvider.java diff --git a/src/main/java/com/jozufozu/flywheel/api/vertex/VertexViewProviderRegistry.java b/common/src/main/java/com/jozufozu/flywheel/api/vertex/VertexViewProviderRegistry.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/vertex/VertexViewProviderRegistry.java rename to common/src/main/java/com/jozufozu/flywheel/api/vertex/VertexViewProviderRegistry.java diff --git a/src/main/java/com/jozufozu/flywheel/api/visual/BlockEntityVisual.java b/common/src/main/java/com/jozufozu/flywheel/api/visual/BlockEntityVisual.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/visual/BlockEntityVisual.java rename to common/src/main/java/com/jozufozu/flywheel/api/visual/BlockEntityVisual.java diff --git a/src/main/java/com/jozufozu/flywheel/api/visual/DistanceUpdateLimiter.java b/common/src/main/java/com/jozufozu/flywheel/api/visual/DistanceUpdateLimiter.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/visual/DistanceUpdateLimiter.java rename to common/src/main/java/com/jozufozu/flywheel/api/visual/DistanceUpdateLimiter.java diff --git a/src/main/java/com/jozufozu/flywheel/api/visual/DynamicVisual.java b/common/src/main/java/com/jozufozu/flywheel/api/visual/DynamicVisual.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/visual/DynamicVisual.java rename to common/src/main/java/com/jozufozu/flywheel/api/visual/DynamicVisual.java diff --git a/src/main/java/com/jozufozu/flywheel/api/visual/Effect.java b/common/src/main/java/com/jozufozu/flywheel/api/visual/Effect.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/visual/Effect.java rename to common/src/main/java/com/jozufozu/flywheel/api/visual/Effect.java diff --git a/src/main/java/com/jozufozu/flywheel/api/visual/EffectVisual.java b/common/src/main/java/com/jozufozu/flywheel/api/visual/EffectVisual.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/visual/EffectVisual.java rename to common/src/main/java/com/jozufozu/flywheel/api/visual/EffectVisual.java diff --git a/src/main/java/com/jozufozu/flywheel/api/visual/EntityVisual.java b/common/src/main/java/com/jozufozu/flywheel/api/visual/EntityVisual.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/visual/EntityVisual.java rename to common/src/main/java/com/jozufozu/flywheel/api/visual/EntityVisual.java diff --git a/src/main/java/com/jozufozu/flywheel/api/visual/LitVisual.java b/common/src/main/java/com/jozufozu/flywheel/api/visual/LitVisual.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/visual/LitVisual.java rename to common/src/main/java/com/jozufozu/flywheel/api/visual/LitVisual.java diff --git a/src/main/java/com/jozufozu/flywheel/api/visual/TickableVisual.java b/common/src/main/java/com/jozufozu/flywheel/api/visual/TickableVisual.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/visual/TickableVisual.java rename to common/src/main/java/com/jozufozu/flywheel/api/visual/TickableVisual.java diff --git a/src/main/java/com/jozufozu/flywheel/api/visual/Visual.java b/common/src/main/java/com/jozufozu/flywheel/api/visual/Visual.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/visual/Visual.java rename to common/src/main/java/com/jozufozu/flywheel/api/visual/Visual.java diff --git a/src/main/java/com/jozufozu/flywheel/api/visualization/BlockEntityVisualizer.java b/common/src/main/java/com/jozufozu/flywheel/api/visualization/BlockEntityVisualizer.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/visualization/BlockEntityVisualizer.java rename to common/src/main/java/com/jozufozu/flywheel/api/visualization/BlockEntityVisualizer.java diff --git a/src/main/java/com/jozufozu/flywheel/api/visualization/EntityVisualizer.java b/common/src/main/java/com/jozufozu/flywheel/api/visualization/EntityVisualizer.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/visualization/EntityVisualizer.java rename to common/src/main/java/com/jozufozu/flywheel/api/visualization/EntityVisualizer.java diff --git a/src/main/java/com/jozufozu/flywheel/api/visualization/VisualEmbedding.java b/common/src/main/java/com/jozufozu/flywheel/api/visualization/VisualEmbedding.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/visualization/VisualEmbedding.java rename to common/src/main/java/com/jozufozu/flywheel/api/visualization/VisualEmbedding.java diff --git a/src/main/java/com/jozufozu/flywheel/api/visualization/VisualManager.java b/common/src/main/java/com/jozufozu/flywheel/api/visualization/VisualManager.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/visualization/VisualManager.java rename to common/src/main/java/com/jozufozu/flywheel/api/visualization/VisualManager.java diff --git a/src/main/java/com/jozufozu/flywheel/api/visualization/VisualizationContext.java b/common/src/main/java/com/jozufozu/flywheel/api/visualization/VisualizationContext.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/visualization/VisualizationContext.java rename to common/src/main/java/com/jozufozu/flywheel/api/visualization/VisualizationContext.java diff --git a/src/main/java/com/jozufozu/flywheel/api/visualization/VisualizationLevel.java b/common/src/main/java/com/jozufozu/flywheel/api/visualization/VisualizationLevel.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/visualization/VisualizationLevel.java rename to common/src/main/java/com/jozufozu/flywheel/api/visualization/VisualizationLevel.java diff --git a/src/main/java/com/jozufozu/flywheel/api/visualization/VisualizationManager.java b/common/src/main/java/com/jozufozu/flywheel/api/visualization/VisualizationManager.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/visualization/VisualizationManager.java rename to common/src/main/java/com/jozufozu/flywheel/api/visualization/VisualizationManager.java diff --git a/src/main/java/com/jozufozu/flywheel/api/visualization/VisualizerRegistry.java b/common/src/main/java/com/jozufozu/flywheel/api/visualization/VisualizerRegistry.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/api/visualization/VisualizerRegistry.java rename to common/src/main/java/com/jozufozu/flywheel/api/visualization/VisualizerRegistry.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/Backends.java b/common/src/main/java/com/jozufozu/flywheel/backend/Backends.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/Backends.java rename to common/src/main/java/com/jozufozu/flywheel/backend/Backends.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/InternalVertex.java b/common/src/main/java/com/jozufozu/flywheel/backend/InternalVertex.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/InternalVertex.java rename to common/src/main/java/com/jozufozu/flywheel/backend/InternalVertex.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/LayoutAttributes.java b/common/src/main/java/com/jozufozu/flywheel/backend/LayoutAttributes.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/LayoutAttributes.java rename to common/src/main/java/com/jozufozu/flywheel/backend/LayoutAttributes.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/Samplers.java b/common/src/main/java/com/jozufozu/flywheel/backend/Samplers.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/Samplers.java rename to common/src/main/java/com/jozufozu/flywheel/backend/Samplers.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/ShaderIndices.java b/common/src/main/java/com/jozufozu/flywheel/backend/ShaderIndices.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/ShaderIndices.java rename to common/src/main/java/com/jozufozu/flywheel/backend/ShaderIndices.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/compile/ContextShader.java b/common/src/main/java/com/jozufozu/flywheel/backend/compile/ContextShader.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/compile/ContextShader.java rename to common/src/main/java/com/jozufozu/flywheel/backend/compile/ContextShader.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/compile/FlwPrograms.java b/common/src/main/java/com/jozufozu/flywheel/backend/compile/FlwPrograms.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/compile/FlwPrograms.java rename to common/src/main/java/com/jozufozu/flywheel/backend/compile/FlwPrograms.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/compile/IndirectPrograms.java b/common/src/main/java/com/jozufozu/flywheel/backend/compile/IndirectPrograms.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/compile/IndirectPrograms.java rename to common/src/main/java/com/jozufozu/flywheel/backend/compile/IndirectPrograms.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/compile/InstancingPrograms.java b/common/src/main/java/com/jozufozu/flywheel/backend/compile/InstancingPrograms.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/compile/InstancingPrograms.java rename to common/src/main/java/com/jozufozu/flywheel/backend/compile/InstancingPrograms.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/compile/Pipeline.java b/common/src/main/java/com/jozufozu/flywheel/backend/compile/Pipeline.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/compile/Pipeline.java rename to common/src/main/java/com/jozufozu/flywheel/backend/compile/Pipeline.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/compile/PipelineCompiler.java b/common/src/main/java/com/jozufozu/flywheel/backend/compile/PipelineCompiler.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/compile/PipelineCompiler.java rename to common/src/main/java/com/jozufozu/flywheel/backend/compile/PipelineCompiler.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/compile/PipelineProgramKey.java b/common/src/main/java/com/jozufozu/flywheel/backend/compile/PipelineProgramKey.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/compile/PipelineProgramKey.java rename to common/src/main/java/com/jozufozu/flywheel/backend/compile/PipelineProgramKey.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/compile/Pipelines.java b/common/src/main/java/com/jozufozu/flywheel/backend/compile/Pipelines.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/compile/Pipelines.java rename to common/src/main/java/com/jozufozu/flywheel/backend/compile/Pipelines.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/compile/SourceChecks.java b/common/src/main/java/com/jozufozu/flywheel/backend/compile/SourceChecks.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/compile/SourceChecks.java rename to common/src/main/java/com/jozufozu/flywheel/backend/compile/SourceChecks.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/compile/component/BufferTextureInstanceComponent.java b/common/src/main/java/com/jozufozu/flywheel/backend/compile/component/BufferTextureInstanceComponent.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/compile/component/BufferTextureInstanceComponent.java rename to common/src/main/java/com/jozufozu/flywheel/backend/compile/component/BufferTextureInstanceComponent.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/compile/component/InstanceAssemblerComponent.java b/common/src/main/java/com/jozufozu/flywheel/backend/compile/component/InstanceAssemblerComponent.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/compile/component/InstanceAssemblerComponent.java rename to common/src/main/java/com/jozufozu/flywheel/backend/compile/component/InstanceAssemblerComponent.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/compile/component/InstanceStructComponent.java b/common/src/main/java/com/jozufozu/flywheel/backend/compile/component/InstanceStructComponent.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/compile/component/InstanceStructComponent.java rename to common/src/main/java/com/jozufozu/flywheel/backend/compile/component/InstanceStructComponent.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/compile/component/SsboInstanceComponent.java b/common/src/main/java/com/jozufozu/flywheel/backend/compile/component/SsboInstanceComponent.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/compile/component/SsboInstanceComponent.java rename to common/src/main/java/com/jozufozu/flywheel/backend/compile/component/SsboInstanceComponent.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/compile/component/StringSubstitutionComponent.java b/common/src/main/java/com/jozufozu/flywheel/backend/compile/component/StringSubstitutionComponent.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/compile/component/StringSubstitutionComponent.java rename to common/src/main/java/com/jozufozu/flywheel/backend/compile/component/StringSubstitutionComponent.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/compile/component/UberShaderComponent.java b/common/src/main/java/com/jozufozu/flywheel/backend/compile/component/UberShaderComponent.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/compile/component/UberShaderComponent.java rename to common/src/main/java/com/jozufozu/flywheel/backend/compile/component/UberShaderComponent.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/compile/core/Compilation.java b/common/src/main/java/com/jozufozu/flywheel/backend/compile/core/Compilation.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/compile/core/Compilation.java rename to common/src/main/java/com/jozufozu/flywheel/backend/compile/core/Compilation.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/compile/core/CompilationHarness.java b/common/src/main/java/com/jozufozu/flywheel/backend/compile/core/CompilationHarness.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/compile/core/CompilationHarness.java rename to common/src/main/java/com/jozufozu/flywheel/backend/compile/core/CompilationHarness.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/compile/core/Compile.java b/common/src/main/java/com/jozufozu/flywheel/backend/compile/core/Compile.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/compile/core/Compile.java rename to common/src/main/java/com/jozufozu/flywheel/backend/compile/core/Compile.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/compile/core/CompilerStats.java b/common/src/main/java/com/jozufozu/flywheel/backend/compile/core/CompilerStats.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/compile/core/CompilerStats.java rename to common/src/main/java/com/jozufozu/flywheel/backend/compile/core/CompilerStats.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/compile/core/FailedCompilation.java b/common/src/main/java/com/jozufozu/flywheel/backend/compile/core/FailedCompilation.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/compile/core/FailedCompilation.java rename to common/src/main/java/com/jozufozu/flywheel/backend/compile/core/FailedCompilation.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/compile/core/LinkResult.java b/common/src/main/java/com/jozufozu/flywheel/backend/compile/core/LinkResult.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/compile/core/LinkResult.java rename to common/src/main/java/com/jozufozu/flywheel/backend/compile/core/LinkResult.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/compile/core/ProgramLinker.java b/common/src/main/java/com/jozufozu/flywheel/backend/compile/core/ProgramLinker.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/compile/core/ProgramLinker.java rename to common/src/main/java/com/jozufozu/flywheel/backend/compile/core/ProgramLinker.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/compile/core/ShaderCache.java b/common/src/main/java/com/jozufozu/flywheel/backend/compile/core/ShaderCache.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/compile/core/ShaderCache.java rename to common/src/main/java/com/jozufozu/flywheel/backend/compile/core/ShaderCache.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/compile/core/ShaderResult.java b/common/src/main/java/com/jozufozu/flywheel/backend/compile/core/ShaderResult.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/compile/core/ShaderResult.java rename to common/src/main/java/com/jozufozu/flywheel/backend/compile/core/ShaderResult.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/compile/core/SourceLoader.java b/common/src/main/java/com/jozufozu/flywheel/backend/compile/core/SourceLoader.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/compile/core/SourceLoader.java rename to common/src/main/java/com/jozufozu/flywheel/backend/compile/core/SourceLoader.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/AbstractInstancer.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/AbstractInstancer.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/AbstractInstancer.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/AbstractInstancer.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/CommonCrumbling.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/CommonCrumbling.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/CommonCrumbling.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/CommonCrumbling.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/DrawManager.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/DrawManager.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/DrawManager.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/DrawManager.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/EngineImpl.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/EngineImpl.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/EngineImpl.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/EngineImpl.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/EnvironmentStorage.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/EnvironmentStorage.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/EnvironmentStorage.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/EnvironmentStorage.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/GroupKey.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/GroupKey.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/GroupKey.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/GroupKey.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/IndexPool.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/IndexPool.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/IndexPool.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/IndexPool.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/InstanceHandleImpl.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/InstanceHandleImpl.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/InstanceHandleImpl.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/InstanceHandleImpl.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/InstancerKey.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/InstancerKey.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/InstancerKey.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/InstancerKey.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/InstancerProviderImpl.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/InstancerProviderImpl.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/InstancerProviderImpl.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/InstancerProviderImpl.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/MaterialEncoder.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/MaterialEncoder.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/MaterialEncoder.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/MaterialEncoder.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/MaterialRenderState.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/MaterialRenderState.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/MaterialRenderState.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/MaterialRenderState.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/MeshPool.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/MeshPool.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/MeshPool.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/MeshPool.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/TextureBinder.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/TextureBinder.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/TextureBinder.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/TextureBinder.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/embed/AbstractEmbeddedEnvironment.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/embed/AbstractEmbeddedEnvironment.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/embed/AbstractEmbeddedEnvironment.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/embed/AbstractEmbeddedEnvironment.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/embed/EmbeddedLightTexture.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/embed/EmbeddedLightTexture.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/embed/EmbeddedLightTexture.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/embed/EmbeddedLightTexture.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/embed/EmbeddedLightVolume.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/embed/EmbeddedLightVolume.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/embed/EmbeddedLightVolume.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/embed/EmbeddedLightVolume.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/embed/EmbeddingUniforms.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/embed/EmbeddingUniforms.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/embed/EmbeddingUniforms.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/embed/EmbeddingUniforms.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/embed/Environment.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/embed/Environment.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/embed/Environment.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/embed/Environment.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/embed/GlobalEnvironment.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/embed/GlobalEnvironment.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/embed/GlobalEnvironment.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/embed/GlobalEnvironment.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/embed/NestedEmbeddedEnvironment.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/embed/NestedEmbeddedEnvironment.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/embed/NestedEmbeddedEnvironment.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/embed/NestedEmbeddedEnvironment.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/embed/TopLevelEmbeddedEnvironment.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/embed/TopLevelEmbeddedEnvironment.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/embed/TopLevelEmbeddedEnvironment.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/embed/TopLevelEmbeddedEnvironment.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectBuffers.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectBuffers.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectBuffers.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectBuffers.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectCullingGroup.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectCullingGroup.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectCullingGroup.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectCullingGroup.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectDraw.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectDraw.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectDraw.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectDraw.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectDrawManager.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectDrawManager.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectDrawManager.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectDrawManager.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectInstancer.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectInstancer.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectInstancer.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectInstancer.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/ResizableStorageArray.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/ResizableStorageArray.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/indirect/ResizableStorageArray.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/ResizableStorageArray.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/ResizableStorageBuffer.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/ResizableStorageBuffer.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/indirect/ResizableStorageBuffer.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/ResizableStorageBuffer.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/ScatterList.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/ScatterList.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/indirect/ScatterList.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/ScatterList.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/StagingBuffer.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/StagingBuffer.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/indirect/StagingBuffer.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/StagingBuffer.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/TransferList.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/TransferList.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/indirect/TransferList.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/indirect/TransferList.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/instancing/InstancedDraw.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/instancing/InstancedDraw.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/instancing/InstancedDraw.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/instancing/InstancedDraw.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/instancing/InstancedDrawManager.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/instancing/InstancedDrawManager.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/instancing/InstancedDrawManager.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/instancing/InstancedDrawManager.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/instancing/InstancedInstancer.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/instancing/InstancedInstancer.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/instancing/InstancedInstancer.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/instancing/InstancedInstancer.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/instancing/InstancedRenderStage.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/instancing/InstancedRenderStage.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/instancing/InstancedRenderStage.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/instancing/InstancedRenderStage.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/uniform/FogUniforms.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/uniform/FogUniforms.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/uniform/FogUniforms.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/uniform/FogUniforms.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/uniform/FrameUniforms.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/uniform/FrameUniforms.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/uniform/FrameUniforms.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/uniform/FrameUniforms.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/uniform/LevelUniforms.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/uniform/LevelUniforms.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/uniform/LevelUniforms.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/uniform/LevelUniforms.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/uniform/OptionsUniforms.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/uniform/OptionsUniforms.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/uniform/OptionsUniforms.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/uniform/OptionsUniforms.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/uniform/PlayerUniforms.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/uniform/PlayerUniforms.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/uniform/PlayerUniforms.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/uniform/PlayerUniforms.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/uniform/UniformBuffer.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/uniform/UniformBuffer.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/uniform/UniformBuffer.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/uniform/UniformBuffer.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/uniform/UniformWriter.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/uniform/UniformWriter.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/uniform/UniformWriter.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/uniform/UniformWriter.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/engine/uniform/Uniforms.java b/common/src/main/java/com/jozufozu/flywheel/backend/engine/uniform/Uniforms.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/engine/uniform/Uniforms.java rename to common/src/main/java/com/jozufozu/flywheel/backend/engine/uniform/Uniforms.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/gl/Driver.java b/common/src/main/java/com/jozufozu/flywheel/backend/gl/Driver.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/gl/Driver.java rename to common/src/main/java/com/jozufozu/flywheel/backend/gl/Driver.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/gl/GlCompat.java b/common/src/main/java/com/jozufozu/flywheel/backend/gl/GlCompat.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/gl/GlCompat.java rename to common/src/main/java/com/jozufozu/flywheel/backend/gl/GlCompat.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/gl/GlFence.java b/common/src/main/java/com/jozufozu/flywheel/backend/gl/GlFence.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/gl/GlFence.java rename to common/src/main/java/com/jozufozu/flywheel/backend/gl/GlFence.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/gl/GlNumericType.java b/common/src/main/java/com/jozufozu/flywheel/backend/gl/GlNumericType.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/gl/GlNumericType.java rename to common/src/main/java/com/jozufozu/flywheel/backend/gl/GlNumericType.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/gl/GlObject.java b/common/src/main/java/com/jozufozu/flywheel/backend/gl/GlObject.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/gl/GlObject.java rename to common/src/main/java/com/jozufozu/flywheel/backend/gl/GlObject.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/gl/GlPrimitive.java b/common/src/main/java/com/jozufozu/flywheel/backend/gl/GlPrimitive.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/gl/GlPrimitive.java rename to common/src/main/java/com/jozufozu/flywheel/backend/gl/GlPrimitive.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/gl/GlStateTracker.java b/common/src/main/java/com/jozufozu/flywheel/backend/gl/GlStateTracker.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/gl/GlStateTracker.java rename to common/src/main/java/com/jozufozu/flywheel/backend/gl/GlStateTracker.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/gl/GlTexture.java b/common/src/main/java/com/jozufozu/flywheel/backend/gl/GlTexture.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/gl/GlTexture.java rename to common/src/main/java/com/jozufozu/flywheel/backend/gl/GlTexture.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/gl/GlTextureUnit.java b/common/src/main/java/com/jozufozu/flywheel/backend/gl/GlTextureUnit.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/gl/GlTextureUnit.java rename to common/src/main/java/com/jozufozu/flywheel/backend/gl/GlTextureUnit.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/gl/TextureBuffer.java b/common/src/main/java/com/jozufozu/flywheel/backend/gl/TextureBuffer.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/gl/TextureBuffer.java rename to common/src/main/java/com/jozufozu/flywheel/backend/gl/TextureBuffer.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/gl/array/GlVertexArray.java b/common/src/main/java/com/jozufozu/flywheel/backend/gl/array/GlVertexArray.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/gl/array/GlVertexArray.java rename to common/src/main/java/com/jozufozu/flywheel/backend/gl/array/GlVertexArray.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/gl/array/GlVertexArrayDSA.java b/common/src/main/java/com/jozufozu/flywheel/backend/gl/array/GlVertexArrayDSA.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/gl/array/GlVertexArrayDSA.java rename to common/src/main/java/com/jozufozu/flywheel/backend/gl/array/GlVertexArrayDSA.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/gl/array/GlVertexArrayGL3.java b/common/src/main/java/com/jozufozu/flywheel/backend/gl/array/GlVertexArrayGL3.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/gl/array/GlVertexArrayGL3.java rename to common/src/main/java/com/jozufozu/flywheel/backend/gl/array/GlVertexArrayGL3.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/gl/array/GlVertexArraySeparateAttributes.java b/common/src/main/java/com/jozufozu/flywheel/backend/gl/array/GlVertexArraySeparateAttributes.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/gl/array/GlVertexArraySeparateAttributes.java rename to common/src/main/java/com/jozufozu/flywheel/backend/gl/array/GlVertexArraySeparateAttributes.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/gl/array/VertexAttribute.java b/common/src/main/java/com/jozufozu/flywheel/backend/gl/array/VertexAttribute.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/gl/array/VertexAttribute.java rename to common/src/main/java/com/jozufozu/flywheel/backend/gl/array/VertexAttribute.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/gl/buffer/Buffer.java b/common/src/main/java/com/jozufozu/flywheel/backend/gl/buffer/Buffer.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/gl/buffer/Buffer.java rename to common/src/main/java/com/jozufozu/flywheel/backend/gl/buffer/Buffer.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/gl/buffer/GlBuffer.java b/common/src/main/java/com/jozufozu/flywheel/backend/gl/buffer/GlBuffer.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/gl/buffer/GlBuffer.java rename to common/src/main/java/com/jozufozu/flywheel/backend/gl/buffer/GlBuffer.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/gl/buffer/GlBufferType.java b/common/src/main/java/com/jozufozu/flywheel/backend/gl/buffer/GlBufferType.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/gl/buffer/GlBufferType.java rename to common/src/main/java/com/jozufozu/flywheel/backend/gl/buffer/GlBufferType.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/gl/buffer/GlBufferUsage.java b/common/src/main/java/com/jozufozu/flywheel/backend/gl/buffer/GlBufferUsage.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/gl/buffer/GlBufferUsage.java rename to common/src/main/java/com/jozufozu/flywheel/backend/gl/buffer/GlBufferUsage.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/gl/error/GlError.java b/common/src/main/java/com/jozufozu/flywheel/backend/gl/error/GlError.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/gl/error/GlError.java rename to common/src/main/java/com/jozufozu/flywheel/backend/gl/error/GlError.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/gl/error/GlException.java b/common/src/main/java/com/jozufozu/flywheel/backend/gl/error/GlException.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/gl/error/GlException.java rename to common/src/main/java/com/jozufozu/flywheel/backend/gl/error/GlException.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/gl/shader/GlProgram.java b/common/src/main/java/com/jozufozu/flywheel/backend/gl/shader/GlProgram.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/gl/shader/GlProgram.java rename to common/src/main/java/com/jozufozu/flywheel/backend/gl/shader/GlProgram.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/gl/shader/GlShader.java b/common/src/main/java/com/jozufozu/flywheel/backend/gl/shader/GlShader.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/gl/shader/GlShader.java rename to common/src/main/java/com/jozufozu/flywheel/backend/gl/shader/GlShader.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/gl/shader/ShaderType.java b/common/src/main/java/com/jozufozu/flywheel/backend/gl/shader/ShaderType.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/gl/shader/ShaderType.java rename to common/src/main/java/com/jozufozu/flywheel/backend/gl/shader/ShaderType.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/GlslVersion.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/GlslVersion.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/GlslVersion.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/GlslVersion.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/LoadError.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/LoadError.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/LoadError.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/LoadError.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/LoadResult.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/LoadResult.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/LoadResult.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/LoadResult.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/ShaderSources.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/ShaderSources.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/ShaderSources.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/ShaderSources.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/SourceComponent.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/SourceComponent.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/SourceComponent.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/SourceComponent.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/SourceFile.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/SourceFile.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/SourceFile.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/SourceFile.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/SourceLines.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/SourceLines.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/SourceLines.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/SourceLines.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/error/ConsoleColors.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/error/ConsoleColors.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/error/ConsoleColors.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/error/ConsoleColors.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/error/ErrorBuilder.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/error/ErrorBuilder.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/error/ErrorBuilder.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/error/ErrorBuilder.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/error/ErrorLevel.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/error/ErrorLevel.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/error/ErrorLevel.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/error/ErrorLevel.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/Divider.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/Divider.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/Divider.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/Divider.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/ErrorLine.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/ErrorLine.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/ErrorLine.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/ErrorLine.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/FileLine.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/FileLine.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/FileLine.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/FileLine.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/HeaderLine.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/HeaderLine.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/HeaderLine.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/HeaderLine.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/NestedLine.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/NestedLine.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/NestedLine.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/NestedLine.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/SourceLine.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/SourceLine.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/SourceLine.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/SourceLine.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/SpanHighlightLine.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/SpanHighlightLine.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/SpanHighlightLine.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/SpanHighlightLine.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/TextLine.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/TextLine.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/TextLine.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/error/lines/TextLine.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/generate/BinOp.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/generate/BinOp.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/generate/BinOp.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/generate/BinOp.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/generate/FnSignature.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/generate/FnSignature.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/generate/FnSignature.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/generate/FnSignature.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslBlock.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslBlock.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslBlock.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslBlock.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslBuilder.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslBuilder.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslBuilder.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslBuilder.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslExpr.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslExpr.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslExpr.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslExpr.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslFn.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslFn.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslFn.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslFn.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslStmt.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslStmt.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslStmt.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslStmt.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslStruct.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslStruct.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslStruct.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslStruct.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslSwitch.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslSwitch.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslSwitch.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslSwitch.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslUniformBlock.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslUniformBlock.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslUniformBlock.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslUniformBlock.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslVertexInput.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslVertexInput.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslVertexInput.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/generate/GlslVertexInput.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/parse/Import.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/parse/Import.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/parse/Import.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/parse/Import.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/parse/ShaderField.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/parse/ShaderField.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/parse/ShaderField.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/parse/ShaderField.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/parse/ShaderFunction.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/parse/ShaderFunction.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/parse/ShaderFunction.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/parse/ShaderFunction.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/parse/ShaderStruct.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/parse/ShaderStruct.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/parse/ShaderStruct.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/parse/ShaderStruct.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/parse/ShaderVariable.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/parse/ShaderVariable.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/parse/ShaderVariable.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/parse/ShaderVariable.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/parse/StructField.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/parse/StructField.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/parse/StructField.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/parse/StructField.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/span/CharPos.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/span/CharPos.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/span/CharPos.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/span/CharPos.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/span/ErrorSpan.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/span/ErrorSpan.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/span/ErrorSpan.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/span/ErrorSpan.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/span/Span.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/span/Span.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/span/Span.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/span/Span.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/glsl/span/StringSpan.java b/common/src/main/java/com/jozufozu/flywheel/backend/glsl/span/StringSpan.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/glsl/span/StringSpan.java rename to common/src/main/java/com/jozufozu/flywheel/backend/glsl/span/StringSpan.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/mixin/AbstractClientPlayerAccessor.java b/common/src/main/java/com/jozufozu/flywheel/backend/mixin/AbstractClientPlayerAccessor.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/mixin/AbstractClientPlayerAccessor.java rename to common/src/main/java/com/jozufozu/flywheel/backend/mixin/AbstractClientPlayerAccessor.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/mixin/GameRendererAccessor.java b/common/src/main/java/com/jozufozu/flywheel/backend/mixin/GameRendererAccessor.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/mixin/GameRendererAccessor.java rename to common/src/main/java/com/jozufozu/flywheel/backend/mixin/GameRendererAccessor.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/mixin/GlStateManagerMixin.java b/common/src/main/java/com/jozufozu/flywheel/backend/mixin/GlStateManagerMixin.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/mixin/GlStateManagerMixin.java rename to common/src/main/java/com/jozufozu/flywheel/backend/mixin/GlStateManagerMixin.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/mixin/LightTextureAccessor.java b/common/src/main/java/com/jozufozu/flywheel/backend/mixin/LightTextureAccessor.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/mixin/LightTextureAccessor.java rename to common/src/main/java/com/jozufozu/flywheel/backend/mixin/LightTextureAccessor.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/mixin/OptionsMixin.java b/common/src/main/java/com/jozufozu/flywheel/backend/mixin/OptionsMixin.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/mixin/OptionsMixin.java rename to common/src/main/java/com/jozufozu/flywheel/backend/mixin/OptionsMixin.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/mixin/OverlayTextureAccessor.java b/common/src/main/java/com/jozufozu/flywheel/backend/mixin/OverlayTextureAccessor.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/mixin/OverlayTextureAccessor.java rename to common/src/main/java/com/jozufozu/flywheel/backend/mixin/OverlayTextureAccessor.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/mixin/RenderSystemMixin.java b/common/src/main/java/com/jozufozu/flywheel/backend/mixin/RenderSystemMixin.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/mixin/RenderSystemMixin.java rename to common/src/main/java/com/jozufozu/flywheel/backend/mixin/RenderSystemMixin.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/util/AtomicReferenceCounted.java b/common/src/main/java/com/jozufozu/flywheel/backend/util/AtomicReferenceCounted.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/util/AtomicReferenceCounted.java rename to common/src/main/java/com/jozufozu/flywheel/backend/util/AtomicReferenceCounted.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/util/MemoryBuffer.java b/common/src/main/java/com/jozufozu/flywheel/backend/util/MemoryBuffer.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/util/MemoryBuffer.java rename to common/src/main/java/com/jozufozu/flywheel/backend/util/MemoryBuffer.java diff --git a/src/main/java/com/jozufozu/flywheel/backend/util/ReferenceCounted.java b/common/src/main/java/com/jozufozu/flywheel/backend/util/ReferenceCounted.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/backend/util/ReferenceCounted.java rename to common/src/main/java/com/jozufozu/flywheel/backend/util/ReferenceCounted.java diff --git a/src/main/java/com/jozufozu/flywheel/config/BackendArgument.java b/common/src/main/java/com/jozufozu/flywheel/config/BackendArgument.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/config/BackendArgument.java rename to common/src/main/java/com/jozufozu/flywheel/config/BackendArgument.java diff --git a/src/main/java/com/jozufozu/flywheel/config/DebugMode.java b/common/src/main/java/com/jozufozu/flywheel/config/DebugMode.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/config/DebugMode.java rename to common/src/main/java/com/jozufozu/flywheel/config/DebugMode.java diff --git a/src/main/java/com/jozufozu/flywheel/config/FlwCommands.java b/common/src/main/java/com/jozufozu/flywheel/config/FlwCommands.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/config/FlwCommands.java rename to common/src/main/java/com/jozufozu/flywheel/config/FlwCommands.java diff --git a/src/main/java/com/jozufozu/flywheel/config/FlwConfig.java b/common/src/main/java/com/jozufozu/flywheel/config/FlwConfig.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/config/FlwConfig.java rename to common/src/main/java/com/jozufozu/flywheel/config/FlwConfig.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/BackendManagerImpl.java b/common/src/main/java/com/jozufozu/flywheel/impl/BackendManagerImpl.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/BackendManagerImpl.java rename to common/src/main/java/com/jozufozu/flywheel/impl/BackendManagerImpl.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/InternalFlywheelImpl.java b/common/src/main/java/com/jozufozu/flywheel/impl/InternalFlywheelImpl.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/InternalFlywheelImpl.java rename to common/src/main/java/com/jozufozu/flywheel/impl/InternalFlywheelImpl.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/event/RenderContextImpl.java b/common/src/main/java/com/jozufozu/flywheel/impl/event/RenderContextImpl.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/event/RenderContextImpl.java rename to common/src/main/java/com/jozufozu/flywheel/impl/event/RenderContextImpl.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/extension/BlockEntityTypeExtension.java b/common/src/main/java/com/jozufozu/flywheel/impl/extension/BlockEntityTypeExtension.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/extension/BlockEntityTypeExtension.java rename to common/src/main/java/com/jozufozu/flywheel/impl/extension/BlockEntityTypeExtension.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/extension/EntityTypeExtension.java b/common/src/main/java/com/jozufozu/flywheel/impl/extension/EntityTypeExtension.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/extension/EntityTypeExtension.java rename to common/src/main/java/com/jozufozu/flywheel/impl/extension/EntityTypeExtension.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/extension/LevelExtension.java b/common/src/main/java/com/jozufozu/flywheel/impl/extension/LevelExtension.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/extension/LevelExtension.java rename to common/src/main/java/com/jozufozu/flywheel/impl/extension/LevelExtension.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/extension/PoseStackExtension.java b/common/src/main/java/com/jozufozu/flywheel/impl/extension/PoseStackExtension.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/extension/PoseStackExtension.java rename to common/src/main/java/com/jozufozu/flywheel/impl/extension/PoseStackExtension.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/extension/VertexFormatExtension.java b/common/src/main/java/com/jozufozu/flywheel/impl/extension/VertexFormatExtension.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/extension/VertexFormatExtension.java rename to common/src/main/java/com/jozufozu/flywheel/impl/extension/VertexFormatExtension.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/layout/ArrayElementTypeImpl.java b/common/src/main/java/com/jozufozu/flywheel/impl/layout/ArrayElementTypeImpl.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/layout/ArrayElementTypeImpl.java rename to common/src/main/java/com/jozufozu/flywheel/impl/layout/ArrayElementTypeImpl.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/layout/LayoutBuilderImpl.java b/common/src/main/java/com/jozufozu/flywheel/impl/layout/LayoutBuilderImpl.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/layout/LayoutBuilderImpl.java rename to common/src/main/java/com/jozufozu/flywheel/impl/layout/LayoutBuilderImpl.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/layout/LayoutImpl.java b/common/src/main/java/com/jozufozu/flywheel/impl/layout/LayoutImpl.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/layout/LayoutImpl.java rename to common/src/main/java/com/jozufozu/flywheel/impl/layout/LayoutImpl.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/layout/LayoutInterpreter.java b/common/src/main/java/com/jozufozu/flywheel/impl/layout/LayoutInterpreter.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/layout/LayoutInterpreter.java rename to common/src/main/java/com/jozufozu/flywheel/impl/layout/LayoutInterpreter.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/layout/MatrixElementTypeImpl.java b/common/src/main/java/com/jozufozu/flywheel/impl/layout/MatrixElementTypeImpl.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/layout/MatrixElementTypeImpl.java rename to common/src/main/java/com/jozufozu/flywheel/impl/layout/MatrixElementTypeImpl.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/layout/ScalarElementTypeImpl.java b/common/src/main/java/com/jozufozu/flywheel/impl/layout/ScalarElementTypeImpl.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/layout/ScalarElementTypeImpl.java rename to common/src/main/java/com/jozufozu/flywheel/impl/layout/ScalarElementTypeImpl.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/layout/VectorElementTypeImpl.java b/common/src/main/java/com/jozufozu/flywheel/impl/layout/VectorElementTypeImpl.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/layout/VectorElementTypeImpl.java rename to common/src/main/java/com/jozufozu/flywheel/impl/layout/VectorElementTypeImpl.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/mixin/BlockEntityTypeMixin.java b/common/src/main/java/com/jozufozu/flywheel/impl/mixin/BlockEntityTypeMixin.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/mixin/BlockEntityTypeMixin.java rename to common/src/main/java/com/jozufozu/flywheel/impl/mixin/BlockEntityTypeMixin.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/mixin/ClientChunkCacheMixin.java b/common/src/main/java/com/jozufozu/flywheel/impl/mixin/ClientChunkCacheMixin.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/mixin/ClientChunkCacheMixin.java rename to common/src/main/java/com/jozufozu/flywheel/impl/mixin/ClientChunkCacheMixin.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/mixin/ClientLevelMixin.java b/common/src/main/java/com/jozufozu/flywheel/impl/mixin/ClientLevelMixin.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/mixin/ClientLevelMixin.java rename to common/src/main/java/com/jozufozu/flywheel/impl/mixin/ClientLevelMixin.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/mixin/EntityTypeMixin.java b/common/src/main/java/com/jozufozu/flywheel/impl/mixin/EntityTypeMixin.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/mixin/EntityTypeMixin.java rename to common/src/main/java/com/jozufozu/flywheel/impl/mixin/EntityTypeMixin.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/mixin/LevelMixin.java b/common/src/main/java/com/jozufozu/flywheel/impl/mixin/LevelMixin.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/mixin/LevelMixin.java rename to common/src/main/java/com/jozufozu/flywheel/impl/mixin/LevelMixin.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/mixin/LevelRendererMixin.java b/common/src/main/java/com/jozufozu/flywheel/impl/mixin/LevelRendererMixin.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/mixin/LevelRendererMixin.java rename to common/src/main/java/com/jozufozu/flywheel/impl/mixin/LevelRendererMixin.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/mixin/MinecraftMixin.java b/common/src/main/java/com/jozufozu/flywheel/impl/mixin/MinecraftMixin.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/mixin/MinecraftMixin.java rename to common/src/main/java/com/jozufozu/flywheel/impl/mixin/MinecraftMixin.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/mixin/PoseStackMixin.java b/common/src/main/java/com/jozufozu/flywheel/impl/mixin/PoseStackMixin.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/mixin/PoseStackMixin.java rename to common/src/main/java/com/jozufozu/flywheel/impl/mixin/PoseStackMixin.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/mixin/VertexFormatMixin.java b/common/src/main/java/com/jozufozu/flywheel/impl/mixin/VertexFormatMixin.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/mixin/VertexFormatMixin.java rename to common/src/main/java/com/jozufozu/flywheel/impl/mixin/VertexFormatMixin.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/mixin/fix/FixFabulousDepthMixin.java b/common/src/main/java/com/jozufozu/flywheel/impl/mixin/fix/FixFabulousDepthMixin.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/mixin/fix/FixFabulousDepthMixin.java rename to common/src/main/java/com/jozufozu/flywheel/impl/mixin/fix/FixFabulousDepthMixin.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/mixin/fix/FixNormalScalingMixin.java b/common/src/main/java/com/jozufozu/flywheel/impl/mixin/fix/FixNormalScalingMixin.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/mixin/fix/FixNormalScalingMixin.java rename to common/src/main/java/com/jozufozu/flywheel/impl/mixin/fix/FixNormalScalingMixin.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/mixin/sodium/ChunkBuilderMeshingTaskMixin.java b/common/src/main/java/com/jozufozu/flywheel/impl/mixin/sodium/ChunkBuilderMeshingTaskMixin.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/mixin/sodium/ChunkBuilderMeshingTaskMixin.java rename to common/src/main/java/com/jozufozu/flywheel/impl/mixin/sodium/ChunkBuilderMeshingTaskMixin.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/mixin/sodium/SodiumMixinPlugin.java b/common/src/main/java/com/jozufozu/flywheel/impl/mixin/sodium/SodiumMixinPlugin.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/mixin/sodium/SodiumMixinPlugin.java rename to common/src/main/java/com/jozufozu/flywheel/impl/mixin/sodium/SodiumMixinPlugin.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/mixin/visualmanage/BlockEntityMixin.java b/common/src/main/java/com/jozufozu/flywheel/impl/mixin/visualmanage/BlockEntityMixin.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/mixin/visualmanage/BlockEntityMixin.java rename to common/src/main/java/com/jozufozu/flywheel/impl/mixin/visualmanage/BlockEntityMixin.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/mixin/visualmanage/LevelChunkMixin.java b/common/src/main/java/com/jozufozu/flywheel/impl/mixin/visualmanage/LevelChunkMixin.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/mixin/visualmanage/LevelChunkMixin.java rename to common/src/main/java/com/jozufozu/flywheel/impl/mixin/visualmanage/LevelChunkMixin.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/mixin/visualmanage/LevelRendererMixin.java b/common/src/main/java/com/jozufozu/flywheel/impl/mixin/visualmanage/LevelRendererMixin.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/mixin/visualmanage/LevelRendererMixin.java rename to common/src/main/java/com/jozufozu/flywheel/impl/mixin/visualmanage/LevelRendererMixin.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/mixin/visualmanage/RebuildTaskMixin.java b/common/src/main/java/com/jozufozu/flywheel/impl/mixin/visualmanage/RebuildTaskMixin.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/mixin/visualmanage/RebuildTaskMixin.java rename to common/src/main/java/com/jozufozu/flywheel/impl/mixin/visualmanage/RebuildTaskMixin.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/registry/IdRegistryImpl.java b/common/src/main/java/com/jozufozu/flywheel/impl/registry/IdRegistryImpl.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/registry/IdRegistryImpl.java rename to common/src/main/java/com/jozufozu/flywheel/impl/registry/IdRegistryImpl.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/registry/RegistryImpl.java b/common/src/main/java/com/jozufozu/flywheel/impl/registry/RegistryImpl.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/registry/RegistryImpl.java rename to common/src/main/java/com/jozufozu/flywheel/impl/registry/RegistryImpl.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/task/FlwTaskExecutor.java b/common/src/main/java/com/jozufozu/flywheel/impl/task/FlwTaskExecutor.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/task/FlwTaskExecutor.java rename to common/src/main/java/com/jozufozu/flywheel/impl/task/FlwTaskExecutor.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/task/ParallelTaskExecutor.java b/common/src/main/java/com/jozufozu/flywheel/impl/task/ParallelTaskExecutor.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/task/ParallelTaskExecutor.java rename to common/src/main/java/com/jozufozu/flywheel/impl/task/ParallelTaskExecutor.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/task/SerialTaskExecutor.java b/common/src/main/java/com/jozufozu/flywheel/impl/task/SerialTaskExecutor.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/task/SerialTaskExecutor.java rename to common/src/main/java/com/jozufozu/flywheel/impl/task/SerialTaskExecutor.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/task/ThreadGroupNotifier.java b/common/src/main/java/com/jozufozu/flywheel/impl/task/ThreadGroupNotifier.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/task/ThreadGroupNotifier.java rename to common/src/main/java/com/jozufozu/flywheel/impl/task/ThreadGroupNotifier.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/task/WaitGroup.java b/common/src/main/java/com/jozufozu/flywheel/impl/task/WaitGroup.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/task/WaitGroup.java rename to common/src/main/java/com/jozufozu/flywheel/impl/task/WaitGroup.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/vertex/InferredVertexFormatInfo.java b/common/src/main/java/com/jozufozu/flywheel/impl/vertex/InferredVertexFormatInfo.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/vertex/InferredVertexFormatInfo.java rename to common/src/main/java/com/jozufozu/flywheel/impl/vertex/InferredVertexFormatInfo.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/vertex/InferredVertexView.java b/common/src/main/java/com/jozufozu/flywheel/impl/vertex/InferredVertexView.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/vertex/InferredVertexView.java rename to common/src/main/java/com/jozufozu/flywheel/impl/vertex/InferredVertexView.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/vertex/InferredVertexViewProvider.java b/common/src/main/java/com/jozufozu/flywheel/impl/vertex/InferredVertexViewProvider.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/vertex/InferredVertexViewProvider.java rename to common/src/main/java/com/jozufozu/flywheel/impl/vertex/InferredVertexViewProvider.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/vertex/VertexViewProviderRegistryImpl.java b/common/src/main/java/com/jozufozu/flywheel/impl/vertex/VertexViewProviderRegistryImpl.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/vertex/VertexViewProviderRegistryImpl.java rename to common/src/main/java/com/jozufozu/flywheel/impl/vertex/VertexViewProviderRegistryImpl.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/visual/DynamicVisualContextImpl.java b/common/src/main/java/com/jozufozu/flywheel/impl/visual/DynamicVisualContextImpl.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/visual/DynamicVisualContextImpl.java rename to common/src/main/java/com/jozufozu/flywheel/impl/visual/DynamicVisualContextImpl.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/visual/TickableVisualContextImpl.java b/common/src/main/java/com/jozufozu/flywheel/impl/visual/TickableVisualContextImpl.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/visual/TickableVisualContextImpl.java rename to common/src/main/java/com/jozufozu/flywheel/impl/visual/TickableVisualContextImpl.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/visualization/VisualizationEventHandler.java b/common/src/main/java/com/jozufozu/flywheel/impl/visualization/VisualizationEventHandler.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/visualization/VisualizationEventHandler.java rename to common/src/main/java/com/jozufozu/flywheel/impl/visualization/VisualizationEventHandler.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/visualization/VisualizationHelper.java b/common/src/main/java/com/jozufozu/flywheel/impl/visualization/VisualizationHelper.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/visualization/VisualizationHelper.java rename to common/src/main/java/com/jozufozu/flywheel/impl/visualization/VisualizationHelper.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/visualization/VisualizationManagerImpl.java b/common/src/main/java/com/jozufozu/flywheel/impl/visualization/VisualizationManagerImpl.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/visualization/VisualizationManagerImpl.java rename to common/src/main/java/com/jozufozu/flywheel/impl/visualization/VisualizationManagerImpl.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/visualization/VisualizerRegistryImpl.java b/common/src/main/java/com/jozufozu/flywheel/impl/visualization/VisualizerRegistryImpl.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/visualization/VisualizerRegistryImpl.java rename to common/src/main/java/com/jozufozu/flywheel/impl/visualization/VisualizerRegistryImpl.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/visualization/manager/BlockEntityStorage.java b/common/src/main/java/com/jozufozu/flywheel/impl/visualization/manager/BlockEntityStorage.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/visualization/manager/BlockEntityStorage.java rename to common/src/main/java/com/jozufozu/flywheel/impl/visualization/manager/BlockEntityStorage.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/visualization/manager/EffectStorage.java b/common/src/main/java/com/jozufozu/flywheel/impl/visualization/manager/EffectStorage.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/visualization/manager/EffectStorage.java rename to common/src/main/java/com/jozufozu/flywheel/impl/visualization/manager/EffectStorage.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/visualization/manager/EntityStorage.java b/common/src/main/java/com/jozufozu/flywheel/impl/visualization/manager/EntityStorage.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/visualization/manager/EntityStorage.java rename to common/src/main/java/com/jozufozu/flywheel/impl/visualization/manager/EntityStorage.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/visualization/manager/VisualManagerImpl.java b/common/src/main/java/com/jozufozu/flywheel/impl/visualization/manager/VisualManagerImpl.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/visualization/manager/VisualManagerImpl.java rename to common/src/main/java/com/jozufozu/flywheel/impl/visualization/manager/VisualManagerImpl.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/visualization/ratelimit/BandedPrimeLimiter.java b/common/src/main/java/com/jozufozu/flywheel/impl/visualization/ratelimit/BandedPrimeLimiter.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/visualization/ratelimit/BandedPrimeLimiter.java rename to common/src/main/java/com/jozufozu/flywheel/impl/visualization/ratelimit/BandedPrimeLimiter.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/visualization/ratelimit/DistanceUpdateLimiterImpl.java b/common/src/main/java/com/jozufozu/flywheel/impl/visualization/ratelimit/DistanceUpdateLimiterImpl.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/visualization/ratelimit/DistanceUpdateLimiterImpl.java rename to common/src/main/java/com/jozufozu/flywheel/impl/visualization/ratelimit/DistanceUpdateLimiterImpl.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/visualization/ratelimit/NonLimiter.java b/common/src/main/java/com/jozufozu/flywheel/impl/visualization/ratelimit/NonLimiter.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/visualization/ratelimit/NonLimiter.java rename to common/src/main/java/com/jozufozu/flywheel/impl/visualization/ratelimit/NonLimiter.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/visualization/storage/Action.java b/common/src/main/java/com/jozufozu/flywheel/impl/visualization/storage/Action.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/visualization/storage/Action.java rename to common/src/main/java/com/jozufozu/flywheel/impl/visualization/storage/Action.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/visualization/storage/LitVisualStorage.java b/common/src/main/java/com/jozufozu/flywheel/impl/visualization/storage/LitVisualStorage.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/visualization/storage/LitVisualStorage.java rename to common/src/main/java/com/jozufozu/flywheel/impl/visualization/storage/LitVisualStorage.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/visualization/storage/Storage.java b/common/src/main/java/com/jozufozu/flywheel/impl/visualization/storage/Storage.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/visualization/storage/Storage.java rename to common/src/main/java/com/jozufozu/flywheel/impl/visualization/storage/Storage.java diff --git a/src/main/java/com/jozufozu/flywheel/impl/visualization/storage/Transaction.java b/common/src/main/java/com/jozufozu/flywheel/impl/visualization/storage/Transaction.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/impl/visualization/storage/Transaction.java rename to common/src/main/java/com/jozufozu/flywheel/impl/visualization/storage/Transaction.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/backend/SimpleBackend.java b/common/src/main/java/com/jozufozu/flywheel/lib/backend/SimpleBackend.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/backend/SimpleBackend.java rename to common/src/main/java/com/jozufozu/flywheel/lib/backend/SimpleBackend.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/box/Box.java b/common/src/main/java/com/jozufozu/flywheel/lib/box/Box.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/box/Box.java rename to common/src/main/java/com/jozufozu/flywheel/lib/box/Box.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/box/MutableBox.java b/common/src/main/java/com/jozufozu/flywheel/lib/box/MutableBox.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/box/MutableBox.java rename to common/src/main/java/com/jozufozu/flywheel/lib/box/MutableBox.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/instance/AbstractInstance.java b/common/src/main/java/com/jozufozu/flywheel/lib/instance/AbstractInstance.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/instance/AbstractInstance.java rename to common/src/main/java/com/jozufozu/flywheel/lib/instance/AbstractInstance.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/instance/ColoredLitInstance.java b/common/src/main/java/com/jozufozu/flywheel/lib/instance/ColoredLitInstance.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/instance/ColoredLitInstance.java rename to common/src/main/java/com/jozufozu/flywheel/lib/instance/ColoredLitInstance.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/instance/FlatLit.java b/common/src/main/java/com/jozufozu/flywheel/lib/instance/FlatLit.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/instance/FlatLit.java rename to common/src/main/java/com/jozufozu/flywheel/lib/instance/FlatLit.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/instance/InstanceTypes.java b/common/src/main/java/com/jozufozu/flywheel/lib/instance/InstanceTypes.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/instance/InstanceTypes.java rename to common/src/main/java/com/jozufozu/flywheel/lib/instance/InstanceTypes.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/instance/OrientedInstance.java b/common/src/main/java/com/jozufozu/flywheel/lib/instance/OrientedInstance.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/instance/OrientedInstance.java rename to common/src/main/java/com/jozufozu/flywheel/lib/instance/OrientedInstance.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/instance/ShadowInstance.java b/common/src/main/java/com/jozufozu/flywheel/lib/instance/ShadowInstance.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/instance/ShadowInstance.java rename to common/src/main/java/com/jozufozu/flywheel/lib/instance/ShadowInstance.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/instance/SimpleInstanceType.java b/common/src/main/java/com/jozufozu/flywheel/lib/instance/SimpleInstanceType.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/instance/SimpleInstanceType.java rename to common/src/main/java/com/jozufozu/flywheel/lib/instance/SimpleInstanceType.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/instance/TransformedInstance.java b/common/src/main/java/com/jozufozu/flywheel/lib/instance/TransformedInstance.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/instance/TransformedInstance.java rename to common/src/main/java/com/jozufozu/flywheel/lib/instance/TransformedInstance.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/light/LightPacking.java b/common/src/main/java/com/jozufozu/flywheel/lib/light/LightPacking.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/light/LightPacking.java rename to common/src/main/java/com/jozufozu/flywheel/lib/light/LightPacking.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/light/LightVolume.java b/common/src/main/java/com/jozufozu/flywheel/lib/light/LightVolume.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/light/LightVolume.java rename to common/src/main/java/com/jozufozu/flywheel/lib/light/LightVolume.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/material/CutoutShaders.java b/common/src/main/java/com/jozufozu/flywheel/lib/material/CutoutShaders.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/material/CutoutShaders.java rename to common/src/main/java/com/jozufozu/flywheel/lib/material/CutoutShaders.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/material/FogShaders.java b/common/src/main/java/com/jozufozu/flywheel/lib/material/FogShaders.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/material/FogShaders.java rename to common/src/main/java/com/jozufozu/flywheel/lib/material/FogShaders.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/material/Materials.java b/common/src/main/java/com/jozufozu/flywheel/lib/material/Materials.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/material/Materials.java rename to common/src/main/java/com/jozufozu/flywheel/lib/material/Materials.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/material/SimpleCutoutShader.java b/common/src/main/java/com/jozufozu/flywheel/lib/material/SimpleCutoutShader.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/material/SimpleCutoutShader.java rename to common/src/main/java/com/jozufozu/flywheel/lib/material/SimpleCutoutShader.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/material/SimpleFogShader.java b/common/src/main/java/com/jozufozu/flywheel/lib/material/SimpleFogShader.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/material/SimpleFogShader.java rename to common/src/main/java/com/jozufozu/flywheel/lib/material/SimpleFogShader.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/material/SimpleMaterial.java b/common/src/main/java/com/jozufozu/flywheel/lib/material/SimpleMaterial.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/material/SimpleMaterial.java rename to common/src/main/java/com/jozufozu/flywheel/lib/material/SimpleMaterial.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/material/SimpleMaterialShaders.java b/common/src/main/java/com/jozufozu/flywheel/lib/material/SimpleMaterialShaders.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/material/SimpleMaterialShaders.java rename to common/src/main/java/com/jozufozu/flywheel/lib/material/SimpleMaterialShaders.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/material/StandardMaterialShaders.java b/common/src/main/java/com/jozufozu/flywheel/lib/material/StandardMaterialShaders.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/material/StandardMaterialShaders.java rename to common/src/main/java/com/jozufozu/flywheel/lib/material/StandardMaterialShaders.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/math/MatrixMath.java b/common/src/main/java/com/jozufozu/flywheel/lib/math/MatrixMath.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/math/MatrixMath.java rename to common/src/main/java/com/jozufozu/flywheel/lib/math/MatrixMath.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/math/MoreMath.java b/common/src/main/java/com/jozufozu/flywheel/lib/math/MoreMath.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/math/MoreMath.java rename to common/src/main/java/com/jozufozu/flywheel/lib/math/MoreMath.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/math/RenderMath.java b/common/src/main/java/com/jozufozu/flywheel/lib/math/RenderMath.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/math/RenderMath.java rename to common/src/main/java/com/jozufozu/flywheel/lib/math/RenderMath.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/memory/AbstractMemoryBlockImpl.java b/common/src/main/java/com/jozufozu/flywheel/lib/memory/AbstractMemoryBlockImpl.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/memory/AbstractMemoryBlockImpl.java rename to common/src/main/java/com/jozufozu/flywheel/lib/memory/AbstractMemoryBlockImpl.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/memory/DebugMemoryBlockImpl.java b/common/src/main/java/com/jozufozu/flywheel/lib/memory/DebugMemoryBlockImpl.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/memory/DebugMemoryBlockImpl.java rename to common/src/main/java/com/jozufozu/flywheel/lib/memory/DebugMemoryBlockImpl.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/memory/FlwMemoryTracker.java b/common/src/main/java/com/jozufozu/flywheel/lib/memory/FlwMemoryTracker.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/memory/FlwMemoryTracker.java rename to common/src/main/java/com/jozufozu/flywheel/lib/memory/FlwMemoryTracker.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/memory/MemoryBlock.java b/common/src/main/java/com/jozufozu/flywheel/lib/memory/MemoryBlock.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/memory/MemoryBlock.java rename to common/src/main/java/com/jozufozu/flywheel/lib/memory/MemoryBlock.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/memory/MemoryBlockImpl.java b/common/src/main/java/com/jozufozu/flywheel/lib/memory/MemoryBlockImpl.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/memory/MemoryBlockImpl.java rename to common/src/main/java/com/jozufozu/flywheel/lib/memory/MemoryBlockImpl.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/memory/TrackedMemoryBlockImpl.java b/common/src/main/java/com/jozufozu/flywheel/lib/memory/TrackedMemoryBlockImpl.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/memory/TrackedMemoryBlockImpl.java rename to common/src/main/java/com/jozufozu/flywheel/lib/memory/TrackedMemoryBlockImpl.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/model/LineModelBuilder.java b/common/src/main/java/com/jozufozu/flywheel/lib/model/LineModelBuilder.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/model/LineModelBuilder.java rename to common/src/main/java/com/jozufozu/flywheel/lib/model/LineModelBuilder.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/model/ModelCache.java b/common/src/main/java/com/jozufozu/flywheel/lib/model/ModelCache.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/model/ModelCache.java rename to common/src/main/java/com/jozufozu/flywheel/lib/model/ModelCache.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/model/ModelHolder.java b/common/src/main/java/com/jozufozu/flywheel/lib/model/ModelHolder.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/model/ModelHolder.java rename to common/src/main/java/com/jozufozu/flywheel/lib/model/ModelHolder.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/model/ModelUtil.java b/common/src/main/java/com/jozufozu/flywheel/lib/model/ModelUtil.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/model/ModelUtil.java rename to common/src/main/java/com/jozufozu/flywheel/lib/model/ModelUtil.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/model/Models.java b/common/src/main/java/com/jozufozu/flywheel/lib/model/Models.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/model/Models.java rename to common/src/main/java/com/jozufozu/flywheel/lib/model/Models.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/model/QuadIndexSequence.java b/common/src/main/java/com/jozufozu/flywheel/lib/model/QuadIndexSequence.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/model/QuadIndexSequence.java rename to common/src/main/java/com/jozufozu/flywheel/lib/model/QuadIndexSequence.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/model/QuadMesh.java b/common/src/main/java/com/jozufozu/flywheel/lib/model/QuadMesh.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/model/QuadMesh.java rename to common/src/main/java/com/jozufozu/flywheel/lib/model/QuadMesh.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/model/SimpleMesh.java b/common/src/main/java/com/jozufozu/flywheel/lib/model/SimpleMesh.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/model/SimpleMesh.java rename to common/src/main/java/com/jozufozu/flywheel/lib/model/SimpleMesh.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/model/SimpleModel.java b/common/src/main/java/com/jozufozu/flywheel/lib/model/SimpleModel.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/model/SimpleModel.java rename to common/src/main/java/com/jozufozu/flywheel/lib/model/SimpleModel.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/model/SingleMeshModel.java b/common/src/main/java/com/jozufozu/flywheel/lib/model/SingleMeshModel.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/model/SingleMeshModel.java rename to common/src/main/java/com/jozufozu/flywheel/lib/model/SingleMeshModel.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/model/baked/BakedModelBufferer.java b/common/src/main/java/com/jozufozu/flywheel/lib/model/baked/BakedModelBufferer.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/model/baked/BakedModelBufferer.java rename to common/src/main/java/com/jozufozu/flywheel/lib/model/baked/BakedModelBufferer.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/model/baked/BakedModelBuilder.java b/common/src/main/java/com/jozufozu/flywheel/lib/model/baked/BakedModelBuilder.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/model/baked/BakedModelBuilder.java rename to common/src/main/java/com/jozufozu/flywheel/lib/model/baked/BakedModelBuilder.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/model/baked/BlockModelBuilder.java b/common/src/main/java/com/jozufozu/flywheel/lib/model/baked/BlockModelBuilder.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/model/baked/BlockModelBuilder.java rename to common/src/main/java/com/jozufozu/flywheel/lib/model/baked/BlockModelBuilder.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/model/baked/MeshEmitter.java b/common/src/main/java/com/jozufozu/flywheel/lib/model/baked/MeshEmitter.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/model/baked/MeshEmitter.java rename to common/src/main/java/com/jozufozu/flywheel/lib/model/baked/MeshEmitter.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/model/baked/MultiBlockModelBuilder.java b/common/src/main/java/com/jozufozu/flywheel/lib/model/baked/MultiBlockModelBuilder.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/model/baked/MultiBlockModelBuilder.java rename to common/src/main/java/com/jozufozu/flywheel/lib/model/baked/MultiBlockModelBuilder.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/model/baked/PartialModel.java b/common/src/main/java/com/jozufozu/flywheel/lib/model/baked/PartialModel.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/model/baked/PartialModel.java rename to common/src/main/java/com/jozufozu/flywheel/lib/model/baked/PartialModel.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/model/baked/TransformingVertexConsumer.java b/common/src/main/java/com/jozufozu/flywheel/lib/model/baked/TransformingVertexConsumer.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/model/baked/TransformingVertexConsumer.java rename to common/src/main/java/com/jozufozu/flywheel/lib/model/baked/TransformingVertexConsumer.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/model/baked/VirtualBlockGetter.java b/common/src/main/java/com/jozufozu/flywheel/lib/model/baked/VirtualBlockGetter.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/model/baked/VirtualBlockGetter.java rename to common/src/main/java/com/jozufozu/flywheel/lib/model/baked/VirtualBlockGetter.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/model/baked/VirtualEmptyBlockGetter.java b/common/src/main/java/com/jozufozu/flywheel/lib/model/baked/VirtualEmptyBlockGetter.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/model/baked/VirtualEmptyBlockGetter.java rename to common/src/main/java/com/jozufozu/flywheel/lib/model/baked/VirtualEmptyBlockGetter.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/model/baked/VirtualLightEngine.java b/common/src/main/java/com/jozufozu/flywheel/lib/model/baked/VirtualLightEngine.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/model/baked/VirtualLightEngine.java rename to common/src/main/java/com/jozufozu/flywheel/lib/model/baked/VirtualLightEngine.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/model/part/ModelPartConverter.java b/common/src/main/java/com/jozufozu/flywheel/lib/model/part/ModelPartConverter.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/model/part/ModelPartConverter.java rename to common/src/main/java/com/jozufozu/flywheel/lib/model/part/ModelPartConverter.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/model/part/VertexWriter.java b/common/src/main/java/com/jozufozu/flywheel/lib/model/part/VertexWriter.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/model/part/VertexWriter.java rename to common/src/main/java/com/jozufozu/flywheel/lib/model/part/VertexWriter.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/task/BarrierPlan.java b/common/src/main/java/com/jozufozu/flywheel/lib/task/BarrierPlan.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/task/BarrierPlan.java rename to common/src/main/java/com/jozufozu/flywheel/lib/task/BarrierPlan.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/task/Distribute.java b/common/src/main/java/com/jozufozu/flywheel/lib/task/Distribute.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/task/Distribute.java rename to common/src/main/java/com/jozufozu/flywheel/lib/task/Distribute.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/task/DynamicNestedPlan.java b/common/src/main/java/com/jozufozu/flywheel/lib/task/DynamicNestedPlan.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/task/DynamicNestedPlan.java rename to common/src/main/java/com/jozufozu/flywheel/lib/task/DynamicNestedPlan.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/task/Flag.java b/common/src/main/java/com/jozufozu/flywheel/lib/task/Flag.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/task/Flag.java rename to common/src/main/java/com/jozufozu/flywheel/lib/task/Flag.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/task/ForEachPlan.java b/common/src/main/java/com/jozufozu/flywheel/lib/task/ForEachPlan.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/task/ForEachPlan.java rename to common/src/main/java/com/jozufozu/flywheel/lib/task/ForEachPlan.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/task/ForEachSlicePlan.java b/common/src/main/java/com/jozufozu/flywheel/lib/task/ForEachSlicePlan.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/task/ForEachSlicePlan.java rename to common/src/main/java/com/jozufozu/flywheel/lib/task/ForEachSlicePlan.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/task/IfElsePlan.java b/common/src/main/java/com/jozufozu/flywheel/lib/task/IfElsePlan.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/task/IfElsePlan.java rename to common/src/main/java/com/jozufozu/flywheel/lib/task/IfElsePlan.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/task/MapContextPlan.java b/common/src/main/java/com/jozufozu/flywheel/lib/task/MapContextPlan.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/task/MapContextPlan.java rename to common/src/main/java/com/jozufozu/flywheel/lib/task/MapContextPlan.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/task/NamedFlag.java b/common/src/main/java/com/jozufozu/flywheel/lib/task/NamedFlag.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/task/NamedFlag.java rename to common/src/main/java/com/jozufozu/flywheel/lib/task/NamedFlag.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/task/NestedPlan.java b/common/src/main/java/com/jozufozu/flywheel/lib/task/NestedPlan.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/task/NestedPlan.java rename to common/src/main/java/com/jozufozu/flywheel/lib/task/NestedPlan.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/task/PlanMap.java b/common/src/main/java/com/jozufozu/flywheel/lib/task/PlanMap.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/task/PlanMap.java rename to common/src/main/java/com/jozufozu/flywheel/lib/task/PlanMap.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/task/RaisePlan.java b/common/src/main/java/com/jozufozu/flywheel/lib/task/RaisePlan.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/task/RaisePlan.java rename to common/src/main/java/com/jozufozu/flywheel/lib/task/RaisePlan.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/task/RunnablePlan.java b/common/src/main/java/com/jozufozu/flywheel/lib/task/RunnablePlan.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/task/RunnablePlan.java rename to common/src/main/java/com/jozufozu/flywheel/lib/task/RunnablePlan.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/task/SimplePlan.java b/common/src/main/java/com/jozufozu/flywheel/lib/task/SimplePlan.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/task/SimplePlan.java rename to common/src/main/java/com/jozufozu/flywheel/lib/task/SimplePlan.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/task/SimplyComposedPlan.java b/common/src/main/java/com/jozufozu/flywheel/lib/task/SimplyComposedPlan.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/task/SimplyComposedPlan.java rename to common/src/main/java/com/jozufozu/flywheel/lib/task/SimplyComposedPlan.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/task/StageFlag.java b/common/src/main/java/com/jozufozu/flywheel/lib/task/StageFlag.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/task/StageFlag.java rename to common/src/main/java/com/jozufozu/flywheel/lib/task/StageFlag.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/task/SyncedPlan.java b/common/src/main/java/com/jozufozu/flywheel/lib/task/SyncedPlan.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/task/SyncedPlan.java rename to common/src/main/java/com/jozufozu/flywheel/lib/task/SyncedPlan.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/task/Synchronizer.java b/common/src/main/java/com/jozufozu/flywheel/lib/task/Synchronizer.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/task/Synchronizer.java rename to common/src/main/java/com/jozufozu/flywheel/lib/task/Synchronizer.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/task/UnitPlan.java b/common/src/main/java/com/jozufozu/flywheel/lib/task/UnitPlan.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/task/UnitPlan.java rename to common/src/main/java/com/jozufozu/flywheel/lib/task/UnitPlan.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/task/functional/BooleanSupplierWithContext.java b/common/src/main/java/com/jozufozu/flywheel/lib/task/functional/BooleanSupplierWithContext.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/task/functional/BooleanSupplierWithContext.java rename to common/src/main/java/com/jozufozu/flywheel/lib/task/functional/BooleanSupplierWithContext.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/task/functional/ConsumerWithContext.java b/common/src/main/java/com/jozufozu/flywheel/lib/task/functional/ConsumerWithContext.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/task/functional/ConsumerWithContext.java rename to common/src/main/java/com/jozufozu/flywheel/lib/task/functional/ConsumerWithContext.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/task/functional/RunnableWithContext.java b/common/src/main/java/com/jozufozu/flywheel/lib/task/functional/RunnableWithContext.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/task/functional/RunnableWithContext.java rename to common/src/main/java/com/jozufozu/flywheel/lib/task/functional/RunnableWithContext.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/task/functional/SupplierWithContext.java b/common/src/main/java/com/jozufozu/flywheel/lib/task/functional/SupplierWithContext.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/task/functional/SupplierWithContext.java rename to common/src/main/java/com/jozufozu/flywheel/lib/task/functional/SupplierWithContext.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/task/functional/package-info.java b/common/src/main/java/com/jozufozu/flywheel/lib/task/functional/package-info.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/task/functional/package-info.java rename to common/src/main/java/com/jozufozu/flywheel/lib/task/functional/package-info.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/transform/Affine.java b/common/src/main/java/com/jozufozu/flywheel/lib/transform/Affine.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/transform/Affine.java rename to common/src/main/java/com/jozufozu/flywheel/lib/transform/Affine.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/transform/PoseTransformStack.java b/common/src/main/java/com/jozufozu/flywheel/lib/transform/PoseTransformStack.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/transform/PoseTransformStack.java rename to common/src/main/java/com/jozufozu/flywheel/lib/transform/PoseTransformStack.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/transform/Rotate.java b/common/src/main/java/com/jozufozu/flywheel/lib/transform/Rotate.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/transform/Rotate.java rename to common/src/main/java/com/jozufozu/flywheel/lib/transform/Rotate.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/transform/Scale.java b/common/src/main/java/com/jozufozu/flywheel/lib/transform/Scale.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/transform/Scale.java rename to common/src/main/java/com/jozufozu/flywheel/lib/transform/Scale.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/transform/Transform.java b/common/src/main/java/com/jozufozu/flywheel/lib/transform/Transform.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/transform/Transform.java rename to common/src/main/java/com/jozufozu/flywheel/lib/transform/Transform.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/transform/TransformStack.java b/common/src/main/java/com/jozufozu/flywheel/lib/transform/TransformStack.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/transform/TransformStack.java rename to common/src/main/java/com/jozufozu/flywheel/lib/transform/TransformStack.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/transform/Translate.java b/common/src/main/java/com/jozufozu/flywheel/lib/transform/Translate.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/transform/Translate.java rename to common/src/main/java/com/jozufozu/flywheel/lib/transform/Translate.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/util/AtomicBitset.java b/common/src/main/java/com/jozufozu/flywheel/lib/util/AtomicBitset.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/util/AtomicBitset.java rename to common/src/main/java/com/jozufozu/flywheel/lib/util/AtomicBitset.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/util/FlwUtil.java b/common/src/main/java/com/jozufozu/flywheel/lib/util/FlwUtil.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/util/FlwUtil.java rename to common/src/main/java/com/jozufozu/flywheel/lib/util/FlwUtil.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/util/LevelAttached.java b/common/src/main/java/com/jozufozu/flywheel/lib/util/LevelAttached.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/util/LevelAttached.java rename to common/src/main/java/com/jozufozu/flywheel/lib/util/LevelAttached.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/util/Pair.java b/common/src/main/java/com/jozufozu/flywheel/lib/util/Pair.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/util/Pair.java rename to common/src/main/java/com/jozufozu/flywheel/lib/util/Pair.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/util/ResourceUtil.java b/common/src/main/java/com/jozufozu/flywheel/lib/util/ResourceUtil.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/util/ResourceUtil.java rename to common/src/main/java/com/jozufozu/flywheel/lib/util/ResourceUtil.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/util/SectionUtil.java b/common/src/main/java/com/jozufozu/flywheel/lib/util/SectionUtil.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/util/SectionUtil.java rename to common/src/main/java/com/jozufozu/flywheel/lib/util/SectionUtil.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/util/ShadersModHandler.java b/common/src/main/java/com/jozufozu/flywheel/lib/util/ShadersModHandler.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/util/ShadersModHandler.java rename to common/src/main/java/com/jozufozu/flywheel/lib/util/ShadersModHandler.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/util/StringUtil.java b/common/src/main/java/com/jozufozu/flywheel/lib/util/StringUtil.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/util/StringUtil.java rename to common/src/main/java/com/jozufozu/flywheel/lib/util/StringUtil.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/util/Unit.java b/common/src/main/java/com/jozufozu/flywheel/lib/util/Unit.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/util/Unit.java rename to common/src/main/java/com/jozufozu/flywheel/lib/util/Unit.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/vertex/AbstractVertexView.java b/common/src/main/java/com/jozufozu/flywheel/lib/vertex/AbstractVertexView.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/vertex/AbstractVertexView.java rename to common/src/main/java/com/jozufozu/flywheel/lib/vertex/AbstractVertexView.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/vertex/EmptyVertexList.java b/common/src/main/java/com/jozufozu/flywheel/lib/vertex/EmptyVertexList.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/vertex/EmptyVertexList.java rename to common/src/main/java/com/jozufozu/flywheel/lib/vertex/EmptyVertexList.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/vertex/FullVertexView.java b/common/src/main/java/com/jozufozu/flywheel/lib/vertex/FullVertexView.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/vertex/FullVertexView.java rename to common/src/main/java/com/jozufozu/flywheel/lib/vertex/FullVertexView.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/vertex/NoOverlayVertexView.java b/common/src/main/java/com/jozufozu/flywheel/lib/vertex/NoOverlayVertexView.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/vertex/NoOverlayVertexView.java rename to common/src/main/java/com/jozufozu/flywheel/lib/vertex/NoOverlayVertexView.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/vertex/PosTexNormalVertexView.java b/common/src/main/java/com/jozufozu/flywheel/lib/vertex/PosTexNormalVertexView.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/vertex/PosTexNormalVertexView.java rename to common/src/main/java/com/jozufozu/flywheel/lib/vertex/PosTexNormalVertexView.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/vertex/PosVertexView.java b/common/src/main/java/com/jozufozu/flywheel/lib/vertex/PosVertexView.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/vertex/PosVertexView.java rename to common/src/main/java/com/jozufozu/flywheel/lib/vertex/PosVertexView.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/visual/AbstractBlockEntityVisual.java b/common/src/main/java/com/jozufozu/flywheel/lib/visual/AbstractBlockEntityVisual.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/visual/AbstractBlockEntityVisual.java rename to common/src/main/java/com/jozufozu/flywheel/lib/visual/AbstractBlockEntityVisual.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/visual/AbstractEntityVisual.java b/common/src/main/java/com/jozufozu/flywheel/lib/visual/AbstractEntityVisual.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/visual/AbstractEntityVisual.java rename to common/src/main/java/com/jozufozu/flywheel/lib/visual/AbstractEntityVisual.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/visual/AbstractVisual.java b/common/src/main/java/com/jozufozu/flywheel/lib/visual/AbstractVisual.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/visual/AbstractVisual.java rename to common/src/main/java/com/jozufozu/flywheel/lib/visual/AbstractVisual.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/visual/EntityComponent.java b/common/src/main/java/com/jozufozu/flywheel/lib/visual/EntityComponent.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/visual/EntityComponent.java rename to common/src/main/java/com/jozufozu/flywheel/lib/visual/EntityComponent.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/visual/EntityVisibilityTester.java b/common/src/main/java/com/jozufozu/flywheel/lib/visual/EntityVisibilityTester.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/visual/EntityVisibilityTester.java rename to common/src/main/java/com/jozufozu/flywheel/lib/visual/EntityVisibilityTester.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/visual/InstanceRecycler.java b/common/src/main/java/com/jozufozu/flywheel/lib/visual/InstanceRecycler.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/visual/InstanceRecycler.java rename to common/src/main/java/com/jozufozu/flywheel/lib/visual/InstanceRecycler.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/visual/SimpleBlockEntityVisualizer.java b/common/src/main/java/com/jozufozu/flywheel/lib/visual/SimpleBlockEntityVisualizer.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/visual/SimpleBlockEntityVisualizer.java rename to common/src/main/java/com/jozufozu/flywheel/lib/visual/SimpleBlockEntityVisualizer.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/visual/SimpleDynamicVisual.java b/common/src/main/java/com/jozufozu/flywheel/lib/visual/SimpleDynamicVisual.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/visual/SimpleDynamicVisual.java rename to common/src/main/java/com/jozufozu/flywheel/lib/visual/SimpleDynamicVisual.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/visual/SimpleEntityVisual.java b/common/src/main/java/com/jozufozu/flywheel/lib/visual/SimpleEntityVisual.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/visual/SimpleEntityVisual.java rename to common/src/main/java/com/jozufozu/flywheel/lib/visual/SimpleEntityVisual.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/visual/SimpleEntityVisualizer.java b/common/src/main/java/com/jozufozu/flywheel/lib/visual/SimpleEntityVisualizer.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/visual/SimpleEntityVisualizer.java rename to common/src/main/java/com/jozufozu/flywheel/lib/visual/SimpleEntityVisualizer.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/visual/SimpleTickableVisual.java b/common/src/main/java/com/jozufozu/flywheel/lib/visual/SimpleTickableVisual.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/visual/SimpleTickableVisual.java rename to common/src/main/java/com/jozufozu/flywheel/lib/visual/SimpleTickableVisual.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/visual/SmartRecycler.java b/common/src/main/java/com/jozufozu/flywheel/lib/visual/SmartRecycler.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/visual/SmartRecycler.java rename to common/src/main/java/com/jozufozu/flywheel/lib/visual/SmartRecycler.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/visual/component/FireComponent.java b/common/src/main/java/com/jozufozu/flywheel/lib/visual/component/FireComponent.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/visual/component/FireComponent.java rename to common/src/main/java/com/jozufozu/flywheel/lib/visual/component/FireComponent.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/visual/component/HitboxComponent.java b/common/src/main/java/com/jozufozu/flywheel/lib/visual/component/HitboxComponent.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/visual/component/HitboxComponent.java rename to common/src/main/java/com/jozufozu/flywheel/lib/visual/component/HitboxComponent.java diff --git a/src/main/java/com/jozufozu/flywheel/lib/visual/component/ShadowComponent.java b/common/src/main/java/com/jozufozu/flywheel/lib/visual/component/ShadowComponent.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/lib/visual/component/ShadowComponent.java rename to common/src/main/java/com/jozufozu/flywheel/lib/visual/component/ShadowComponent.java diff --git a/src/main/java/com/jozufozu/flywheel/vanilla/BellVisual.java b/common/src/main/java/com/jozufozu/flywheel/vanilla/BellVisual.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/vanilla/BellVisual.java rename to common/src/main/java/com/jozufozu/flywheel/vanilla/BellVisual.java diff --git a/src/main/java/com/jozufozu/flywheel/vanilla/ChestVisual.java b/common/src/main/java/com/jozufozu/flywheel/vanilla/ChestVisual.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/vanilla/ChestVisual.java rename to common/src/main/java/com/jozufozu/flywheel/vanilla/ChestVisual.java diff --git a/src/main/java/com/jozufozu/flywheel/vanilla/MinecartVisual.java b/common/src/main/java/com/jozufozu/flywheel/vanilla/MinecartVisual.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/vanilla/MinecartVisual.java rename to common/src/main/java/com/jozufozu/flywheel/vanilla/MinecartVisual.java diff --git a/src/main/java/com/jozufozu/flywheel/vanilla/ShulkerBoxVisual.java b/common/src/main/java/com/jozufozu/flywheel/vanilla/ShulkerBoxVisual.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/vanilla/ShulkerBoxVisual.java rename to common/src/main/java/com/jozufozu/flywheel/vanilla/ShulkerBoxVisual.java diff --git a/src/main/java/com/jozufozu/flywheel/vanilla/TntMinecartVisual.java b/common/src/main/java/com/jozufozu/flywheel/vanilla/TntMinecartVisual.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/vanilla/TntMinecartVisual.java rename to common/src/main/java/com/jozufozu/flywheel/vanilla/TntMinecartVisual.java diff --git a/src/main/java/com/jozufozu/flywheel/vanilla/VanillaVisuals.java b/common/src/main/java/com/jozufozu/flywheel/vanilla/VanillaVisuals.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/vanilla/VanillaVisuals.java rename to common/src/main/java/com/jozufozu/flywheel/vanilla/VanillaVisuals.java diff --git a/src/main/java/com/jozufozu/flywheel/vanilla/effect/ExampleEffect.java b/common/src/main/java/com/jozufozu/flywheel/vanilla/effect/ExampleEffect.java similarity index 100% rename from src/main/java/com/jozufozu/flywheel/vanilla/effect/ExampleEffect.java rename to common/src/main/java/com/jozufozu/flywheel/vanilla/effect/ExampleEffect.java diff --git a/src/main/resources/META-INF/mods.toml b/common/src/main/resources/META-INF/mods.toml similarity index 100% rename from src/main/resources/META-INF/mods.toml rename to common/src/main/resources/META-INF/mods.toml diff --git a/src/main/resources/assets/flywheel/flywheel/cutout/epsilon.glsl b/common/src/main/resources/assets/flywheel/flywheel/cutout/epsilon.glsl similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/cutout/epsilon.glsl rename to common/src/main/resources/assets/flywheel/flywheel/cutout/epsilon.glsl diff --git a/src/main/resources/assets/flywheel/flywheel/cutout/half.glsl b/common/src/main/resources/assets/flywheel/flywheel/cutout/half.glsl similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/cutout/half.glsl rename to common/src/main/resources/assets/flywheel/flywheel/cutout/half.glsl diff --git a/src/main/resources/assets/flywheel/flywheel/cutout/off.glsl b/common/src/main/resources/assets/flywheel/flywheel/cutout/off.glsl similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/cutout/off.glsl rename to common/src/main/resources/assets/flywheel/flywheel/cutout/off.glsl diff --git a/src/main/resources/assets/flywheel/flywheel/cutout/one_tenth.glsl b/common/src/main/resources/assets/flywheel/flywheel/cutout/one_tenth.glsl similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/cutout/one_tenth.glsl rename to common/src/main/resources/assets/flywheel/flywheel/cutout/one_tenth.glsl diff --git a/src/main/resources/assets/flywheel/flywheel/fog/linear.glsl b/common/src/main/resources/assets/flywheel/flywheel/fog/linear.glsl similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/fog/linear.glsl rename to common/src/main/resources/assets/flywheel/flywheel/fog/linear.glsl diff --git a/src/main/resources/assets/flywheel/flywheel/fog/linear_fade.glsl b/common/src/main/resources/assets/flywheel/flywheel/fog/linear_fade.glsl similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/fog/linear_fade.glsl rename to common/src/main/resources/assets/flywheel/flywheel/fog/linear_fade.glsl diff --git a/src/main/resources/assets/flywheel/flywheel/fog/none.glsl b/common/src/main/resources/assets/flywheel/flywheel/fog/none.glsl similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/fog/none.glsl rename to common/src/main/resources/assets/flywheel/flywheel/fog/none.glsl diff --git a/src/main/resources/assets/flywheel/flywheel/instance/cull/oriented.glsl b/common/src/main/resources/assets/flywheel/flywheel/instance/cull/oriented.glsl similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/instance/cull/oriented.glsl rename to common/src/main/resources/assets/flywheel/flywheel/instance/cull/oriented.glsl diff --git a/src/main/resources/assets/flywheel/flywheel/instance/cull/shadow.glsl b/common/src/main/resources/assets/flywheel/flywheel/instance/cull/shadow.glsl similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/instance/cull/shadow.glsl rename to common/src/main/resources/assets/flywheel/flywheel/instance/cull/shadow.glsl diff --git a/src/main/resources/assets/flywheel/flywheel/instance/cull/transformed.glsl b/common/src/main/resources/assets/flywheel/flywheel/instance/cull/transformed.glsl similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/instance/cull/transformed.glsl rename to common/src/main/resources/assets/flywheel/flywheel/instance/cull/transformed.glsl diff --git a/src/main/resources/assets/flywheel/flywheel/instance/oriented.vert b/common/src/main/resources/assets/flywheel/flywheel/instance/oriented.vert similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/instance/oriented.vert rename to common/src/main/resources/assets/flywheel/flywheel/instance/oriented.vert diff --git a/src/main/resources/assets/flywheel/flywheel/instance/shadow.vert b/common/src/main/resources/assets/flywheel/flywheel/instance/shadow.vert similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/instance/shadow.vert rename to common/src/main/resources/assets/flywheel/flywheel/instance/shadow.vert diff --git a/src/main/resources/assets/flywheel/flywheel/instance/transformed.vert b/common/src/main/resources/assets/flywheel/flywheel/instance/transformed.vert similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/instance/transformed.vert rename to common/src/main/resources/assets/flywheel/flywheel/instance/transformed.vert diff --git a/src/main/resources/assets/flywheel/flywheel/internal/api_impl.frag b/common/src/main/resources/assets/flywheel/flywheel/internal/api_impl.frag similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/internal/api_impl.frag rename to common/src/main/resources/assets/flywheel/flywheel/internal/api_impl.frag diff --git a/src/main/resources/assets/flywheel/flywheel/internal/api_impl.vert b/common/src/main/resources/assets/flywheel/flywheel/internal/api_impl.vert similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/internal/api_impl.vert rename to common/src/main/resources/assets/flywheel/flywheel/internal/api_impl.vert diff --git a/src/main/resources/assets/flywheel/flywheel/internal/colorizer.glsl b/common/src/main/resources/assets/flywheel/flywheel/internal/colorizer.glsl similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/internal/colorizer.glsl rename to common/src/main/resources/assets/flywheel/flywheel/internal/colorizer.glsl diff --git a/src/main/resources/assets/flywheel/flywheel/internal/common.frag b/common/src/main/resources/assets/flywheel/flywheel/internal/common.frag similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/internal/common.frag rename to common/src/main/resources/assets/flywheel/flywheel/internal/common.frag diff --git a/src/main/resources/assets/flywheel/flywheel/internal/common.vert b/common/src/main/resources/assets/flywheel/flywheel/internal/common.vert similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/internal/common.vert rename to common/src/main/resources/assets/flywheel/flywheel/internal/common.vert diff --git a/src/main/resources/assets/flywheel/flywheel/internal/components_header.frag b/common/src/main/resources/assets/flywheel/flywheel/internal/components_header.frag similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/internal/components_header.frag rename to common/src/main/resources/assets/flywheel/flywheel/internal/components_header.frag diff --git a/src/main/resources/assets/flywheel/flywheel/internal/components_header.vert b/common/src/main/resources/assets/flywheel/flywheel/internal/components_header.vert similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/internal/components_header.vert rename to common/src/main/resources/assets/flywheel/flywheel/internal/components_header.vert diff --git a/src/main/resources/assets/flywheel/flywheel/internal/diffuse.glsl b/common/src/main/resources/assets/flywheel/flywheel/internal/diffuse.glsl similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/internal/diffuse.glsl rename to common/src/main/resources/assets/flywheel/flywheel/internal/diffuse.glsl diff --git a/src/main/resources/assets/flywheel/flywheel/internal/fog_distance.glsl b/common/src/main/resources/assets/flywheel/flywheel/internal/fog_distance.glsl similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/internal/fog_distance.glsl rename to common/src/main/resources/assets/flywheel/flywheel/internal/fog_distance.glsl diff --git a/src/main/resources/assets/flywheel/flywheel/internal/indirect/apply.glsl b/common/src/main/resources/assets/flywheel/flywheel/internal/indirect/apply.glsl similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/internal/indirect/apply.glsl rename to common/src/main/resources/assets/flywheel/flywheel/internal/indirect/apply.glsl diff --git a/src/main/resources/assets/flywheel/flywheel/internal/indirect/buffer_bindings.glsl b/common/src/main/resources/assets/flywheel/flywheel/internal/indirect/buffer_bindings.glsl similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/internal/indirect/buffer_bindings.glsl rename to common/src/main/resources/assets/flywheel/flywheel/internal/indirect/buffer_bindings.glsl diff --git a/src/main/resources/assets/flywheel/flywheel/internal/indirect/cull.glsl b/common/src/main/resources/assets/flywheel/flywheel/internal/indirect/cull.glsl similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/internal/indirect/cull.glsl rename to common/src/main/resources/assets/flywheel/flywheel/internal/indirect/cull.glsl diff --git a/src/main/resources/assets/flywheel/flywheel/internal/indirect/cull_api_impl.glsl b/common/src/main/resources/assets/flywheel/flywheel/internal/indirect/cull_api_impl.glsl similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/internal/indirect/cull_api_impl.glsl rename to common/src/main/resources/assets/flywheel/flywheel/internal/indirect/cull_api_impl.glsl diff --git a/src/main/resources/assets/flywheel/flywheel/internal/indirect/draw_command.glsl b/common/src/main/resources/assets/flywheel/flywheel/internal/indirect/draw_command.glsl similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/internal/indirect/draw_command.glsl rename to common/src/main/resources/assets/flywheel/flywheel/internal/indirect/draw_command.glsl diff --git a/src/main/resources/assets/flywheel/flywheel/internal/indirect/main.frag b/common/src/main/resources/assets/flywheel/flywheel/internal/indirect/main.frag similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/internal/indirect/main.frag rename to common/src/main/resources/assets/flywheel/flywheel/internal/indirect/main.frag diff --git a/src/main/resources/assets/flywheel/flywheel/internal/indirect/main.vert b/common/src/main/resources/assets/flywheel/flywheel/internal/indirect/main.vert similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/internal/indirect/main.vert rename to common/src/main/resources/assets/flywheel/flywheel/internal/indirect/main.vert diff --git a/src/main/resources/assets/flywheel/flywheel/internal/indirect/model_descriptor.glsl b/common/src/main/resources/assets/flywheel/flywheel/internal/indirect/model_descriptor.glsl similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/internal/indirect/model_descriptor.glsl rename to common/src/main/resources/assets/flywheel/flywheel/internal/indirect/model_descriptor.glsl diff --git a/src/main/resources/assets/flywheel/flywheel/internal/indirect/scatter.glsl b/common/src/main/resources/assets/flywheel/flywheel/internal/indirect/scatter.glsl similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/internal/indirect/scatter.glsl rename to common/src/main/resources/assets/flywheel/flywheel/internal/indirect/scatter.glsl diff --git a/src/main/resources/assets/flywheel/flywheel/internal/instancing/main.frag b/common/src/main/resources/assets/flywheel/flywheel/internal/instancing/main.frag similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/internal/instancing/main.frag rename to common/src/main/resources/assets/flywheel/flywheel/internal/instancing/main.frag diff --git a/src/main/resources/assets/flywheel/flywheel/internal/instancing/main.vert b/common/src/main/resources/assets/flywheel/flywheel/internal/instancing/main.vert similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/internal/instancing/main.vert rename to common/src/main/resources/assets/flywheel/flywheel/internal/instancing/main.vert diff --git a/src/main/resources/assets/flywheel/flywheel/internal/material.glsl b/common/src/main/resources/assets/flywheel/flywheel/internal/material.glsl similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/internal/material.glsl rename to common/src/main/resources/assets/flywheel/flywheel/internal/material.glsl diff --git a/src/main/resources/assets/flywheel/flywheel/internal/packed_material.glsl b/common/src/main/resources/assets/flywheel/flywheel/internal/packed_material.glsl similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/internal/packed_material.glsl rename to common/src/main/resources/assets/flywheel/flywheel/internal/packed_material.glsl diff --git a/src/main/resources/assets/flywheel/flywheel/internal/uniforms/fog.glsl b/common/src/main/resources/assets/flywheel/flywheel/internal/uniforms/fog.glsl similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/internal/uniforms/fog.glsl rename to common/src/main/resources/assets/flywheel/flywheel/internal/uniforms/fog.glsl diff --git a/src/main/resources/assets/flywheel/flywheel/internal/uniforms/frame.glsl b/common/src/main/resources/assets/flywheel/flywheel/internal/uniforms/frame.glsl similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/internal/uniforms/frame.glsl rename to common/src/main/resources/assets/flywheel/flywheel/internal/uniforms/frame.glsl diff --git a/src/main/resources/assets/flywheel/flywheel/internal/uniforms/level.glsl b/common/src/main/resources/assets/flywheel/flywheel/internal/uniforms/level.glsl similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/internal/uniforms/level.glsl rename to common/src/main/resources/assets/flywheel/flywheel/internal/uniforms/level.glsl diff --git a/src/main/resources/assets/flywheel/flywheel/internal/uniforms/options.glsl b/common/src/main/resources/assets/flywheel/flywheel/internal/uniforms/options.glsl similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/internal/uniforms/options.glsl rename to common/src/main/resources/assets/flywheel/flywheel/internal/uniforms/options.glsl diff --git a/src/main/resources/assets/flywheel/flywheel/internal/uniforms/player.glsl b/common/src/main/resources/assets/flywheel/flywheel/internal/uniforms/player.glsl similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/internal/uniforms/player.glsl rename to common/src/main/resources/assets/flywheel/flywheel/internal/uniforms/player.glsl diff --git a/src/main/resources/assets/flywheel/flywheel/internal/uniforms/uniforms.glsl b/common/src/main/resources/assets/flywheel/flywheel/internal/uniforms/uniforms.glsl similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/internal/uniforms/uniforms.glsl rename to common/src/main/resources/assets/flywheel/flywheel/internal/uniforms/uniforms.glsl diff --git a/src/main/resources/assets/flywheel/flywheel/internal/vertex_input.vert b/common/src/main/resources/assets/flywheel/flywheel/internal/vertex_input.vert similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/internal/vertex_input.vert rename to common/src/main/resources/assets/flywheel/flywheel/internal/vertex_input.vert diff --git a/src/main/resources/assets/flywheel/flywheel/material/default.frag b/common/src/main/resources/assets/flywheel/flywheel/material/default.frag similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/material/default.frag rename to common/src/main/resources/assets/flywheel/flywheel/material/default.frag diff --git a/src/main/resources/assets/flywheel/flywheel/material/default.vert b/common/src/main/resources/assets/flywheel/flywheel/material/default.vert similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/material/default.vert rename to common/src/main/resources/assets/flywheel/flywheel/material/default.vert diff --git a/src/main/resources/assets/flywheel/flywheel/material/lines.frag b/common/src/main/resources/assets/flywheel/flywheel/material/lines.frag similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/material/lines.frag rename to common/src/main/resources/assets/flywheel/flywheel/material/lines.frag diff --git a/src/main/resources/assets/flywheel/flywheel/material/lines.vert b/common/src/main/resources/assets/flywheel/flywheel/material/lines.vert similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/material/lines.vert rename to common/src/main/resources/assets/flywheel/flywheel/material/lines.vert diff --git a/src/main/resources/assets/flywheel/flywheel/material/wireframe.frag b/common/src/main/resources/assets/flywheel/flywheel/material/wireframe.frag similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/material/wireframe.frag rename to common/src/main/resources/assets/flywheel/flywheel/material/wireframe.frag diff --git a/src/main/resources/assets/flywheel/flywheel/material/wireframe.vert b/common/src/main/resources/assets/flywheel/flywheel/material/wireframe.vert similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/material/wireframe.vert rename to common/src/main/resources/assets/flywheel/flywheel/material/wireframe.vert diff --git a/src/main/resources/assets/flywheel/flywheel/util/color.glsl b/common/src/main/resources/assets/flywheel/flywheel/util/color.glsl similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/util/color.glsl rename to common/src/main/resources/assets/flywheel/flywheel/util/color.glsl diff --git a/src/main/resources/assets/flywheel/flywheel/util/matrix.glsl b/common/src/main/resources/assets/flywheel/flywheel/util/matrix.glsl similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/util/matrix.glsl rename to common/src/main/resources/assets/flywheel/flywheel/util/matrix.glsl diff --git a/src/main/resources/assets/flywheel/flywheel/util/quaternion.glsl b/common/src/main/resources/assets/flywheel/flywheel/util/quaternion.glsl similarity index 100% rename from src/main/resources/assets/flywheel/flywheel/util/quaternion.glsl rename to common/src/main/resources/assets/flywheel/flywheel/util/quaternion.glsl diff --git a/src/main/resources/assets/flywheel/lang/en_us.json b/common/src/main/resources/assets/flywheel/lang/en_us.json similarity index 100% rename from src/main/resources/assets/flywheel/lang/en_us.json rename to common/src/main/resources/assets/flywheel/lang/en_us.json diff --git a/src/main/resources/flywheel.backend.mixins.json b/common/src/main/resources/flywheel.backend.mixins.json similarity index 100% rename from src/main/resources/flywheel.backend.mixins.json rename to common/src/main/resources/flywheel.backend.mixins.json diff --git a/src/main/resources/flywheel.impl.mixins.json b/common/src/main/resources/flywheel.impl.mixins.json similarity index 100% rename from src/main/resources/flywheel.impl.mixins.json rename to common/src/main/resources/flywheel.impl.mixins.json diff --git a/src/main/resources/flywheel.impl.sodium.mixins.json b/common/src/main/resources/flywheel.impl.sodium.mixins.json similarity index 100% rename from src/main/resources/flywheel.impl.sodium.mixins.json rename to common/src/main/resources/flywheel.impl.sodium.mixins.json diff --git a/src/main/resources/logo.png b/common/src/main/resources/logo.png similarity index 100% rename from src/main/resources/logo.png rename to common/src/main/resources/logo.png diff --git a/src/main/resources/pack.mcmeta b/common/src/main/resources/pack.mcmeta similarity index 100% rename from src/main/resources/pack.mcmeta rename to common/src/main/resources/pack.mcmeta diff --git a/src/test/java/com/jozufozu/flywheel/backend/glsl/MockShaderSources.java b/common/src/test/java/com/jozufozu/flywheel/backend/glsl/MockShaderSources.java similarity index 100% rename from src/test/java/com/jozufozu/flywheel/backend/glsl/MockShaderSources.java rename to common/src/test/java/com/jozufozu/flywheel/backend/glsl/MockShaderSources.java diff --git a/src/test/java/com/jozufozu/flywheel/backend/glsl/TestBase.java b/common/src/test/java/com/jozufozu/flywheel/backend/glsl/TestBase.java similarity index 100% rename from src/test/java/com/jozufozu/flywheel/backend/glsl/TestBase.java rename to common/src/test/java/com/jozufozu/flywheel/backend/glsl/TestBase.java diff --git a/src/test/java/com/jozufozu/flywheel/backend/glsl/TestErrorMessages.java b/common/src/test/java/com/jozufozu/flywheel/backend/glsl/TestErrorMessages.java similarity index 100% rename from src/test/java/com/jozufozu/flywheel/backend/glsl/TestErrorMessages.java rename to common/src/test/java/com/jozufozu/flywheel/backend/glsl/TestErrorMessages.java diff --git a/src/test/java/com/jozufozu/flywheel/backend/glsl/TestShaderSourceLoading.java b/common/src/test/java/com/jozufozu/flywheel/backend/glsl/TestShaderSourceLoading.java similarity index 100% rename from src/test/java/com/jozufozu/flywheel/backend/glsl/TestShaderSourceLoading.java rename to common/src/test/java/com/jozufozu/flywheel/backend/glsl/TestShaderSourceLoading.java diff --git a/src/test/java/com/jozufozu/flywheel/impl/task/WaitGroupTest.java b/common/src/test/java/com/jozufozu/flywheel/impl/task/WaitGroupTest.java similarity index 100% rename from src/test/java/com/jozufozu/flywheel/impl/task/WaitGroupTest.java rename to common/src/test/java/com/jozufozu/flywheel/impl/task/WaitGroupTest.java diff --git a/src/test/java/com/jozufozu/flywheel/lib/task/PlanCompositionTest.java b/common/src/test/java/com/jozufozu/flywheel/lib/task/PlanCompositionTest.java similarity index 100% rename from src/test/java/com/jozufozu/flywheel/lib/task/PlanCompositionTest.java rename to common/src/test/java/com/jozufozu/flywheel/lib/task/PlanCompositionTest.java diff --git a/src/test/java/com/jozufozu/flywheel/lib/task/PlanExecutionTest.java b/common/src/test/java/com/jozufozu/flywheel/lib/task/PlanExecutionTest.java similarity index 100% rename from src/test/java/com/jozufozu/flywheel/lib/task/PlanExecutionTest.java rename to common/src/test/java/com/jozufozu/flywheel/lib/task/PlanExecutionTest.java diff --git a/src/test/java/com/jozufozu/flywheel/lib/util/TestAtomicBitset.java b/common/src/test/java/com/jozufozu/flywheel/lib/util/TestAtomicBitset.java similarity index 100% rename from src/test/java/com/jozufozu/flywheel/lib/util/TestAtomicBitset.java rename to common/src/test/java/com/jozufozu/flywheel/lib/util/TestAtomicBitset.java diff --git a/fabric/build.gradle b/fabric/build.gradle new file mode 100644 index 000000000..97418b24c --- /dev/null +++ b/fabric/build.gradle @@ -0,0 +1,151 @@ +plugins { + id 'maven-publish' + id 'dev.architectury.loom' +} + +evaluationDependsOn(':common') + +base { + archivesName = "flywheel-${project.name}-${artifact_minecraft_version}" +} + +loom { + runs { + configureEach { + property 'forge.logging.markers', '' + property 'forge.logging.console.level', 'debug' + } + + client { + ideConfigGenerated true + property 'flw.dumpShaderSource', 'true' + property 'flw.debugMemorySafety', 'true' + programArgs '--width', '1280', '--height', '720' + } + + server { + ideConfigGenerated true + programArgs '--nogui' + } + } +} + +repositories { + maven { + name = 'ParchmentMC' + url = 'https://maven.parchmentmc.org' + } + mavenCentral() +} + +dependencies { + minecraft "com.mojang:minecraft:$minecraft_version" + mappings(loom.layered() { + officialMojangMappings() + parchment("org.parchmentmc.data:parchment-${minecraft_version}:${parchment_version}@zip") + }) + + modCompileOnly "net.fabricmc:fabric-loader:$fabric_loader_version" + modLocalRuntime "net.fabricmc:fabric-loader:$fabric_loader_version" + + modCompileOnly "net.fabricmc.fabric-api:fabric-api:$fabric_api_version" + modLocalRuntime "net.fabricmc.fabric-api:fabric-api:$fabric_api_version" + + compileOnly project(path: ':common', configuration: 'namedElements') +} + +java { + JavaVersion javaVersion = JavaVersion.toVersion(java_version) + sourceCompatibility = javaVersion + targetCompatibility = javaVersion + + toolchain.languageVersion = JavaLanguageVersion.of(java_version) + + withSourcesJar() + withJavadocJar() +} + +processResources.configure { + from(project(':common').sourceSets.main.resources) + + var replaceProperties = [ + minecraft_version : minecraft_version, + minecraft_version_range: minecraft_version_range, + forge_version : forge_version, + forge_version_range : forge_version_range, + loader_version_range : loader_version_range, + mod_version : mod_version + ] + inputs.properties replaceProperties + + filesMatching(['META-INF/mods.toml', 'META-INF/neoforge.mods.toml', 'pack.mcmeta', 'fabric.mod.json']) { + expand replaceProperties + [project: project] + } +} + +tasks.withType(JavaCompile).configureEach { + source(project(':common').sourceSets.main.allSource) + options.encoding = 'UTF-8' + options.release = Integer.parseInt(java_version) + options.compilerArgs = ['-Xdiags:verbose'] +} + +jar.configure { + archiveClassifier = '' + addManifest(it) + addLicense(it) +} + +sourcesJar.configure { + from(project(':common').sourceSets.main.allSource) + addManifest(it) + addLicense(it) +} + +javadoc.configure { + source(project(':common').sourceSets.main.allJava) + // prevent java 8's strict doclint for javadocs from failing builds + options.addStringOption('Xdoclint:none', '-quiet') +} + +test.configure { + useJUnitPlatform() +} + +void addLicense(jarTask) { + jarTask.from('LICENSE.md') { + rename '(.*)\\.(.*)', '$1_' + archivesBaseName + '.$2' + } +} + +void addManifest(jarTask) { + jarTask.manifest { + attributes([ + 'Specification-Title' : 'flywheel', + // 'Specification-Vendor': 'flywheel authors', + 'Specification-Version' : '1', // We are version 1 of ourselves + 'Implementation-Title' : project.jar.archiveBaseName, + 'Implementation-Version' : project.jar.archiveVersion, + // 'Implementation-Vendor': 'flywheel authors', + 'Implementation-Timestamp': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"), + ]) + } +} + +publishing { + publications { + register('mavenJava', MavenPublication) { + from(components["java"]) + artifactId = "flywheel-${project.name}-intermediary-${artifact_minecraft_version}" + } + } + repositories { + maven { + url "file://${project.projectDir}/mcmodsrepo" + } + + if (project.hasProperty('mavendir')) { + maven { url rootProject.file(property('mavendir')) } + } + } +} diff --git a/forge/build.gradle b/forge/build.gradle new file mode 100644 index 000000000..5d5ba26dd --- /dev/null +++ b/forge/build.gradle @@ -0,0 +1,147 @@ +plugins { + id 'maven-publish' + id 'dev.architectury.loom' +} + +evaluationDependsOn(':common') + +base { + archivesName = "flywheel-${project.name}-${artifact_minecraft_version}" +} + +loom { + runs { + configureEach { + property 'forge.logging.markers', '' + property 'forge.logging.console.level', 'debug' + } + + client { + ideConfigGenerated true + property 'flw.dumpShaderSource', 'true' + property 'flw.debugMemorySafety', 'true' + programArgs '--width', '1280', '--height', '720' + } + + server { + ideConfigGenerated true + programArgs '--nogui' + } + } +} + +repositories { + maven { + name = 'ParchmentMC' + url = 'https://maven.parchmentmc.org' + } + mavenCentral() +} + +dependencies { + minecraft "com.mojang:minecraft:$minecraft_version" + mappings(loom.layered() { + officialMojangMappings() + parchment("org.parchmentmc.data:parchment-${minecraft_version}:${parchment_version}@zip") + }) + + forge "net.minecraftforge:forge:${minecraft_version}-${forge_version}" + + compileOnly project(path: ':common', configuration: 'namedElements') +} + +java { + JavaVersion javaVersion = JavaVersion.toVersion(java_version) + sourceCompatibility = javaVersion + targetCompatibility = javaVersion + + toolchain.languageVersion = JavaLanguageVersion.of(java_version) + + withSourcesJar() + withJavadocJar() +} + +processResources.configure { + from(project(':common').sourceSets.main.resources) + + var replaceProperties = [ + minecraft_version : minecraft_version, + minecraft_version_range: minecraft_version_range, + forge_version : forge_version, + forge_version_range : forge_version_range, + loader_version_range : loader_version_range, + mod_version : mod_version + ] + inputs.properties replaceProperties + + filesMatching(['META-INF/mods.toml', 'META-INF/neoforge.mods.toml', 'pack.mcmeta', 'fabric.mod.json']) { + expand replaceProperties + [project: project] + } +} + +tasks.withType(JavaCompile).configureEach { + source(project(':common').sourceSets.main.allSource) + options.encoding = 'UTF-8' + options.release = Integer.parseInt(java_version) + options.compilerArgs = ['-Xdiags:verbose'] +} + +jar.configure { + archiveClassifier = '' + addManifest(it) + addLicense(it) +} + +sourcesJar.configure { + from(project(':common').sourceSets.main.allSource) + addManifest(it) + addLicense(it) +} + +javadoc.configure { + source(project(':common').sourceSets.main.allJava) + // prevent java 8's strict doclint for javadocs from failing builds + options.addStringOption('Xdoclint:none', '-quiet') +} + +test.configure { + useJUnitPlatform() +} + +void addLicense(jarTask) { + jarTask.from('LICENSE.md') { + rename '(.*)\\.(.*)', '$1_' + archivesBaseName + '.$2' + } +} + +void addManifest(jarTask) { + jarTask.manifest { + attributes([ + 'Specification-Title' : 'flywheel', + // 'Specification-Vendor': 'flywheel authors', + 'Specification-Version' : '1', // We are version 1 of ourselves + 'Implementation-Title' : project.jar.archiveBaseName, + 'Implementation-Version' : project.jar.archiveVersion, + // 'Implementation-Vendor': 'flywheel authors', + 'Implementation-Timestamp': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"), + ]) + } +} + +publishing { + publications { + register('mavenJava', MavenPublication) { + from(components["java"]) + artifactId = "flywheel-${project.name}-intermediary-${artifact_minecraft_version}" + } + } + repositories { + maven { + url "file://${project.projectDir}/mcmodsrepo" + } + + if (project.hasProperty('mavendir')) { + maven { url rootProject.file(property('mavendir')) } + } + } +} diff --git a/forge/gradle.properties b/forge/gradle.properties new file mode 100644 index 000000000..a58ba1416 --- /dev/null +++ b/forge/gradle.properties @@ -0,0 +1 @@ +loom.platform = forge diff --git a/gradle.properties b/gradle.properties index 878a41fce..1f59a4afe 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,12 +6,16 @@ mod_version = 1.0.0-alpha artifact_minecraft_version = 1.20.1 minecraft_version = 1.20.1 forge_version = 47.2.19 +fabric_loader_version = 0.15.9 +fabric_api_version = 0.92.1+1.20.1 # Version ranges for the mods.toml minecraft_version_range = [1.20.1,1.20.2) forge_version_range = [47,) loader_version_range = [47,) # build dependency versions +java_version = 17 +arch_loom_version = 1.6-SNAPSHOT forgegradle_version = [6.0.16,6.2) mixingradle_version = 0.7.+ mixin_version = 0.8.5 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index c1962a79e29d3e0ab67b14947c167a862655af9b..e6441136f3d4ba8a0da8d277868979cfbc8ad796 100644 GIT binary patch literal 43453 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 yu?e%!_ptzGB|8GrCfu%p?(_ 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
NnX)EH+Nua)3Y(c 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 309b4e18d..e7646dead 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip networkTimeout=10000 +validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index aeb74cbb4..1aa94a426 100755 --- a/gradlew +++ b/gradlew @@ -83,7 +83,8 @@ done # This is normally unused # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -130,10 +131,13 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. @@ -141,7 +145,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac @@ -149,7 +153,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then '' | soft) :;; #( *) # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -198,11 +202,11 @@ fi # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ diff --git a/gradlew.bat b/gradlew.bat index 93e3f59f1..25da30dbd 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -43,11 +43,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -57,11 +57,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail diff --git a/old.build.gradle b/old.build.gradle new file mode 100644 index 000000000..6caf08ab3 --- /dev/null +++ b/old.build.gradle @@ -0,0 +1,205 @@ +plugins { + id 'eclipse' + id 'idea' + id 'maven-publish' + id 'net.minecraftforge.gradle' version "${forgegradle_version}" + id 'org.parchmentmc.librarian.forgegradle' version "${librarian_version}" + id 'org.spongepowered.mixin' version "${mixingradle_version}" +} + +boolean dev = System.getenv('RELEASE') == null || System.getenv('RELEASE').equalsIgnoreCase('false'); + +ext.buildNumber = System.getenv('BUILD_NUMBER') + +group = 'com.jozufozu.flywheel' +archivesBaseName = "flywheel-forge-${artifact_minecraft_version}" +version = mod_version + (dev && buildNumber != null ? "-${buildNumber}" : '') + +java.toolchain.languageVersion = JavaLanguageVersion.of(17) + +println "Java: ${System.getProperty 'java.version'}, JVM: ${System.getProperty 'java.vm.version'} (${System.getProperty 'java.vendor'}), Arch: ${System.getProperty 'os.arch'}" +minecraft { + mappings channel: 'parchment', version: "${parchment_version}-${minecraft_version}" + + copyIdeResources = true + + runs { + configureEach { + workingDirectory project.file('run') + + property 'forge.logging.markers', '' + property 'forge.logging.console.level', 'debug' + + property 'mixin.env.remapRefMap', 'true' + property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" + + mods { + flywheel { + source sourceSets.main + } + } + } + + client { + property 'flw.dumpShaderSource', 'true' + property 'flw.debugMemorySafety', 'true' + } + + server { + args '--nogui' + } + } +} + +repositories { + maven { + url 'https://www.cursemaven.com' + content { + includeGroup "curse.maven" + } + } + maven { + name 'tterrag maven' + url 'https://maven.tterrag.com/' + } + maven { + name = "Modrinth" + url = "https://api.modrinth.com/maven" + content { + includeGroup "maven.modrinth" + } + } + mavenCentral() +} + +dependencies { + testImplementation 'org.junit.jupiter:junit-jupiter:5.8.1' + minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" + + compileOnly fg.deobf("maven.modrinth:embeddium:0.3.9+mc1.20.1") + compileOnly fg.deobf("maven.modrinth:oculus:1.20.1-1.6.15a") + // implementation fg.deobf("maven.modrinth:starlight-forge:1.1.2+1.20") + + // https://discord.com/channels/313125603924639766/725850371834118214/910619168821354497 + // Prevent Mixin annotation processor from getting into IntelliJ's annotation processor settings + // This allows 'Settings > Build, Execution, and Deployment > Build Tools > Gradle > Build and run using' set to IntelliJ to work correctly + // if (System.getProperty('idea.sync.active') != 'true') { + annotationProcessor "org.spongepowered:mixin:${mixin_version}:processor" + // } +} + +test { + useJUnitPlatform() +} + +mixin { + add sourceSets.main, 'flywheel.refmap.json' + + config 'flywheel.backend.mixins.json' + config 'flywheel.impl.mixins.json' + config 'flywheel.impl.sodium.mixins.json' + + debug.verbose = true + debug.export = true +} + +idea { + // Tell IDEA to always download sources/javadoc artifacts from maven. + module { + downloadJavadoc = true + downloadSources = true + } +} + +// Workaround for SpongePowered/MixinGradle#38 +afterEvaluate { + tasks.configureReobfTaskForReobfJar.mustRunAfter(tasks.compileJava) +} + +tasks.withType(JavaCompile).configureEach { + options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation +} + +javadoc { + source = [sourceSets.main.allJava] + // prevent java 8's strict doclint for javadocs from failing builds + options.addStringOption('Xdoclint:none', '-quiet') +} + +compileJava { + options.compilerArgs = ['-Xdiags:verbose'] +} + +tasks.named('processResources', ProcessResources).configure { + var replaceProperties = [ + minecraft_version : minecraft_version, + minecraft_version_range: minecraft_version_range, + forge_version : forge_version, + forge_version_range : forge_version_range, + loader_version_range : loader_version_range, + mod_version : mod_version + ] + inputs.properties replaceProperties + + filesMatching(['META-INF/mods.toml', 'pack.mcmeta']) { + expand replaceProperties + [project: project] + } +} + +apply from: rootProject.file('gradle/package-infos.gradle') + +void addLicense(jarTask) { + jarTask.from('LICENSE.md') { + rename '(.*)\\.(.*)', '$1_' + archivesBaseName + '.$2' + } +} + +void addManifest(jarTask) { + jarTask.manifest { + attributes([ + 'Specification-Title' : 'flywheel', + // 'Specification-Vendor': 'flywheel authors', + 'Specification-Version' : '1', // We are version 1 of ourselves + 'Implementation-Title' : project.jar.archiveBaseName, + 'Implementation-Version' : project.jar.archiveVersion, + // 'Implementation-Vendor': 'flywheel authors', + 'Implementation-Timestamp': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"), + ]) + } +} + +tasks.named('jar', Jar).configure { + archiveClassifier = '' + + finalizedBy 'reobfJar' + addManifest(it) + addLicense(it) +} + +java { + withSourcesJar() + withJavadocJar() +} + +publishing { + publications { + register('mavenJava', MavenPublication) { + artifact jar + artifact sourcesJar + artifact javadocJar + + artifactId = archivesBaseName + + fg.component(it) + } + } + repositories { + maven { + url "file://${project.projectDir}/mcmodsrepo" + } + + if (project.hasProperty('mavendir')) { + maven { url mavendir } + } + } +} diff --git a/settings.gradle b/settings.gradle index 26eaa3d68..db8285a90 100644 --- a/settings.gradle +++ b/settings.gradle @@ -6,13 +6,20 @@ pluginManagement { name = 'MinecraftForge' url = 'https://maven.minecraftforge.net/' } + maven { + name = 'Architectury' + url = 'https://maven.architectury.dev/' + } maven { url = 'https://repo.spongepowered.org/repository/maven-public' } maven { url = 'https://maven.parchmentmc.org' } } + plugins { + id 'dev.architectury.loom' version arch_loom_version + } } -plugins { - id 'org.gradle.toolchains.foojay-resolver-convention' version '0.7.0' -} +rootProject.name = 'Flywheel' -rootProject.name = 'Flywheel-Forge' +include('common') +include('fabric') +include('forge')