diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
new file mode 100644
index 00000000000..7e340a776a6
--- /dev/null
+++ b/.idea/kotlinc.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/PreviewWorldScreen.java b/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/PreviewWorldScreen.java
deleted file mode 100644
index 824afce8015..00000000000
--- a/engine/src/main/java/org/terasology/engine/rendering/nui/layers/mainMenu/PreviewWorldScreen.java
+++ /dev/null
@@ -1,377 +0,0 @@
-// Copyright 2021 The Terasology Foundation
-// SPDX-License-Identifier: Apache-2.0
-package org.terasology.engine.rendering.nui.layers.mainMenu;
-
-import com.google.common.collect.Lists;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.terasology.engine.config.Config;
-import org.terasology.engine.context.Context;
-import org.terasology.engine.context.internal.ContextImpl;
-import org.terasology.engine.core.SimpleUri;
-import org.terasology.engine.core.bootstrap.EnvironmentSwitchHandler;
-import org.terasology.engine.core.module.ModuleManager;
-import org.terasology.engine.entitySystem.metadata.ComponentLibrary;
-import org.terasology.engine.registry.CoreRegistry;
-import org.terasology.engine.registry.In;
-import org.terasology.engine.rendering.assets.texture.Texture;
-import org.terasology.engine.rendering.assets.texture.TextureData;
-import org.terasology.engine.rendering.nui.CoreScreenLayer;
-import org.terasology.engine.rendering.nui.NUIManager;
-import org.terasology.engine.rendering.nui.animation.MenuAnimationSystems;
-import org.terasology.engine.rendering.nui.layers.mainMenu.preview.FacetLayerPreview;
-import org.terasology.engine.rendering.nui.layers.mainMenu.preview.PreviewGenerator;
-import org.terasology.engine.utilities.Assets;
-import org.terasology.engine.world.generator.WorldConfigurator;
-import org.terasology.engine.world.generator.WorldGenerator;
-import org.terasology.engine.world.generator.internal.WorldGeneratorManager;
-import org.terasology.engine.world.generator.plugin.TempWorldGeneratorPluginLibrary;
-import org.terasology.engine.world.generator.plugin.WorldGeneratorPluginLibrary;
-import org.terasology.engine.world.zones.Zone;
-import org.terasology.gestalt.assets.ResourceUrn;
-import org.terasology.gestalt.assets.module.ModuleAwareAssetTypeManager;
-import org.terasology.gestalt.entitysystem.component.Component;
-import org.terasology.gestalt.module.ModuleEnvironment;
-import org.terasology.gestalt.module.dependencyresolution.DependencyResolver;
-import org.terasology.gestalt.module.dependencyresolution.ResolutionResult;
-import org.terasology.gestalt.module.exceptions.UnresolvedDependencyException;
-import org.terasology.math.TeraMath;
-import org.terasology.nui.WidgetUtil;
-import org.terasology.nui.databinding.Binding;
-import org.terasology.nui.layouts.PropertyLayout;
-import org.terasology.nui.properties.OneOfProviderFactory;
-import org.terasology.nui.properties.Property;
-import org.terasology.nui.properties.PropertyOrdering;
-import org.terasology.nui.properties.PropertyProvider;
-import org.terasology.nui.widgets.UIButton;
-import org.terasology.nui.widgets.UIDropdown;
-import org.terasology.nui.widgets.UIImage;
-import org.terasology.nui.widgets.UISlider;
-import org.terasology.nui.widgets.UIText;
-import org.terasology.reflection.metadata.FieldMetadata;
-import org.terasology.reflection.reflect.ReflectFactory;
-
-import java.nio.ByteBuffer;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.concurrent.Callable;
-import java.util.stream.Collectors;
-
-/**
- * Shows a preview of the generated world and provides some
- * configuration options to tweak the generation process.
- */
-public class PreviewWorldScreen extends CoreScreenLayer {
-
- public static final ResourceUrn ASSET_URI = new ResourceUrn("engine:previewWorldScreen");
-
- private static final Logger logger = LoggerFactory.getLogger(PreviewWorldScreen.class);
-
- @In
- private ModuleManager moduleManager;
-
- @In
- private ModuleAwareAssetTypeManager assetTypeManager;
-
- @In
- private WorldGeneratorManager worldGeneratorManager;
-
- @In
- private Config config;
-
- @In
- private Context context;
-
- private WorldGenerator worldGenerator;
-
- private UIImage previewImage;
- private UISlider zoomSlider;
- private UIDropdown zoneSelector;
- private UIButton applyButton;
-
- private UIText seed;
-
- private PreviewGenerator previewGen;
-
-
- private Context subContext;
- private ModuleEnvironment environment;
-
- private Texture texture;
-
- private boolean triggerUpdate;
- private String targetZone = "Surface";
-
- public PreviewWorldScreen() {
- }
-
- public void setEnvironment() throws Exception {
-
- // TODO: pass world gen and module list directly rather than using the config
- SimpleUri worldGenUri = config.getWorldGeneration().getDefaultGenerator();
-
- DependencyResolver resolver = new DependencyResolver(moduleManager.getRegistry());
- ResolutionResult result = resolver.resolve(config.getDefaultModSelection().listModules());
- if (result.isSuccess()) {
- subContext = new ContextImpl(context);
- CoreRegistry.setContext(subContext);
- environment = moduleManager.loadEnvironment(result.getModules(), false);
- subContext.put(WorldGeneratorPluginLibrary.class, new TempWorldGeneratorPluginLibrary(environment, subContext));
- EnvironmentSwitchHandler environmentSwitchHandler = context.get(EnvironmentSwitchHandler.class);
- environmentSwitchHandler.handleSwitchToPreviewEnvironment(subContext, environment);
- genTexture();
-
- worldGenerator = WorldGeneratorManager.createWorldGenerator(worldGenUri, subContext, environment);
- worldGenerator.setWorldSeed(seed.getText());
-
- List previewZones = Lists.newArrayList(worldGenerator.getZones())
- .stream()
- .filter(z -> !z.getPreviewLayers().isEmpty())
- .collect(Collectors.toList());
- if (previewZones.isEmpty()) {
- zoneSelector.setVisible(false);
- previewGen = new FacetLayerPreview(environment, worldGenerator);
- } else {
- zoneSelector.setVisible(true);
- zoneSelector.setOptions(previewZones);
- zoneSelector.setSelection(previewZones.get(0));
- }
-
- configureProperties();
- } else {
- throw new UnresolvedDependencyException("Unable to resolve dependencies for " + worldGenUri);
- }
- }
-
- private void genTexture() {
- int imgWidth = 384;
- int imgHeight = 384;
- ByteBuffer buffer = ByteBuffer.allocateDirect(imgWidth * imgHeight * Integer.BYTES);
- ByteBuffer[] data = new ByteBuffer[]{buffer};
- ResourceUrn uri = new ResourceUrn("engine:terrainPreview");
- TextureData texData = new TextureData(imgWidth, imgHeight, data, Texture.WrapMode.CLAMP, Texture.FilterMode.LINEAR);
- texture = Assets.generateAsset(uri, texData, Texture.class);
-
- previewImage = find("preview", UIImage.class);
- previewImage.setImage(texture);
- }
-
- @Override
- public void update(float delta) {
- super.update(delta);
-
- if (triggerUpdate) {
- updatePreview();
- triggerUpdate = false;
- }
- }
-
- private void configureProperties() {
-
- PropertyLayout propLayout = find("properties", PropertyLayout.class);
- propLayout.setOrdering(PropertyOrdering.byLabel());
- propLayout.clear();
-
- WorldConfigurator worldConfig = worldGenerator.getConfigurator();
-
- Map params = worldConfig.getProperties();
-
- for (String key : params.keySet()) {
- Class extends Component> clazz = params.get(key).getClass();
- Component comp = config.getModuleConfig(worldGenerator.getUri(), key, clazz);
- if (comp != null) {
- worldConfig.setProperty(key, comp); // use the data from the config instead of defaults
- }
- }
-
- ComponentLibrary compLib = subContext.get(ComponentLibrary.class);
-
- for (String label : params.keySet()) {
-
- PropertyProvider provider = new PropertyProvider(context.get(ReflectFactory.class), context.get(OneOfProviderFactory.class)) {
- @Override
- protected Binding createTextBinding(Object target, FieldMetadata