diff --git a/build.gradle b/build.gradle
index bd8e4c2..8847e90 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,15 +1,15 @@
-import java.nio.charset.StandardCharsets
-
 plugins {
+	id 'fabric-loom' version '1.9-SNAPSHOT'
 	id 'maven-publish'
-	alias(libs.plugins.quilt.loom)
-	alias(libs.plugins.minotaur)
 }
 
-archivesBaseName = project.archives_base_name
-version = project.version
+version = project.mod_version
 group = project.maven_group
 
+base {
+	archivesName = project.archives_base_name
+}
+
 repositories {
 	exclusiveContent {
 		forRepository {
@@ -22,71 +22,70 @@ repositories {
 			includeGroup "maven.modrinth"
 		}
 	}
+
+
+	maven {
+		url = "https://maven.quiltmc.org/repository/release"
+	}
 }
 
 dependencies {
-	minecraft libs.minecraft
-	mappings "org.quiltmc:quilt-mappings:${libs.versions.quilt.mappings.get()}:intermediary-v2"
-	modImplementation libs.quilt.loader
+	// To change the versions see the gradle.properties file
+	minecraft "com.mojang:minecraft:${project.minecraft_version}"
+	mappings "org.quiltmc:quilt-mappings:${project.yarn_mappings}:intermediary-v2"
+	modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
 
-	modImplementation libs.quilted.fabric.api
+	// Fabric API. This is technically optional, but you probably want it anyway.
+	modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
 
-	modImplementation include("maven.modrinth:static-data:1.1.0+1.20.4")
-	modImplementation include("maven.modrinth:suspicious-shapes:1.0.5+1.20.4")
 }
 
 processResources {
-	inputs.property "version", version
+	inputs.property "version", project.version
 
-	filesMatching('quilt.mod.json') {
-		expand "version": version
+	filesMatching("fabric.mod.json") {
+		expand "version": project.version
 	}
 }
 
 tasks.withType(JavaCompile).configureEach {
-	it.options.encoding = "UTF-8"
 	it.options.release = 17
 }
 
 java {
+	// Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task
+	// if it is present.
+	// If you remove this line, sources will not be generated.
+	withSourcesJar()
+
 	sourceCompatibility = JavaVersion.VERSION_17
 	targetCompatibility = JavaVersion.VERSION_17
-
-	withSourcesJar()
 }
 
 jar {
-	from("LICENSE") {
-		rename { "${it}_${archivesBaseName}" }
+	from('LICENSE') {
+		rename { "${it}_${base.archivesName.get()}" }
+	}
+
+	from('LICENSE-ASSETS.md') {
+		rename { "${it}_${base.archivesName.get()}" }
 	}
 }
 
+// configure the maven publication
 publishing {
 	publications {
-		mavenJava(MavenPublication) {
+		create("mavenJava", MavenPublication) {
+			artifactId = project.archives_base_name
 			from components.java
 		}
 	}
 
+	// See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing.
 	repositories {
-
-	}
-}
-
-modrinth {
-	token = System.getenv("MODRINTH_TOKEN")
-	projectId = "arch-ex"
-	uploadFile = remapJar
-	additionalFiles = [sourcesJar]
-	gameVersions = [libs.versions.minecraft.get()]
-	loaders = ["quilt"]
-	def ref = System.getenv("GITHUB_REF")
-	changelog = System.getenv("CHANGELOG") ?:
-			(ref != null && ref.startsWith("refs/tags/")) ?
-					"You may view the changelog at https://github.com/woodiertexas/architecture-extensions/releases/tag/${URLEncoder.encode(ref.substring(10), StandardCharsets.UTF_8)}" :
-					"No changelog is available. Perhaps poke at https://github.com/woodiertexas/architecture-extensions for a changelog?"
-
-	dependencies {
-		required.project "qsl"
+		// Add repositories to publish to here.
+		// Notice: This block does NOT have the same function as the block in the top level.
+		// The repositories here will be used for publishing your artifact, not for
+		// retrieving dependencies.
 	}
 }
diff --git a/gradle.properties b/gradle.properties
index eafa19f..1f8c119 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,10 +1,17 @@
-# Gradle Properties
-org.gradle.jvmargs = -Xmx1G
-org.gradle.parallel = true
+# Done to increase the memory available to gradle.
+org.gradle.jvmargs=-Xmx1G
+org.gradle.parallel=true
+
+# Fabric Properties
+# check these on https://fabricmc.net/develop
+minecraft_version=1.20.1
+yarn_mappings=1.20.1+build.10
+loader_version=0.16.9
 
 # Mod Properties
-version = 3.6.0+1.20.4
-maven_group = io.github.debuggyteam
-archives_base_name = architecture_extensions
+mod_version=4.0.0+mc1.20.1
+maven_group=gay.debuggy
+archives_base_name=arch_ex
 
-# Dependencies are managed at gradle/libs.versions.toml
+# Dependencies
+fabric_version=0.92.3+1.20.1
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
deleted file mode 100644
index 2d83709..0000000
--- a/gradle/libs.versions.toml
+++ /dev/null
@@ -1,16 +0,0 @@
-[versions]
-# The latest versions are available at https://lambdaurora.dev/tools/import_quilt.html
-minecraft = "1.20.4"
-quilt_mappings = "1.20.4+build.3"
-quilt_loader = "0.24.0"
-quilted_fabric_api = "9.0.0-alpha.5+0.96.11-1.20.4"
-
-[libraries]
-minecraft = { module = "com.mojang:minecraft", version.ref = "minecraft" }
-quilt_mappings = { module = "org.quiltmc:quilt-mappings", version.ref = "quilt_mappings" }
-quilt_loader = { module = "org.quiltmc:quilt-loader", version.ref = "quilt_loader" }
-quilted_fabric_api = { module = "org.quiltmc.quilted-fabric-api:quilted-fabric-api", version.ref = "quilted_fabric_api" }
-
-[plugins]
-quilt_loom = { id = "org.quiltmc.loom", version = "1.6.+" }
-minotaur = { id = "com.modrinth.minotaur", version = "2.+" }
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 17655d0..81aa1c0 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/ArchExIntegrationContextImpl.java b/src/main/java/io/github/debuggyteam/architecture_extensions/ArchExIntegrationContextImpl.java
deleted file mode 100644
index 7e4d906..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/ArchExIntegrationContextImpl.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package io.github.debuggyteam.architecture_extensions;
-
-import java.util.Set;
-
-import io.github.debuggyteam.architecture_extensions.api.ArchExIntegration;
-import io.github.debuggyteam.architecture_extensions.api.BlockGroup;
-import io.github.debuggyteam.architecture_extensions.api.BlockType;
-
-public class ArchExIntegrationContextImpl implements ArchExIntegration.Context {
-	private final ArchExIntegration integration;
-	private final String modId;
-
-	public ArchExIntegrationContextImpl(ArchExIntegration integration, String modId) {
-		this.integration = integration;
-		this.modId = modId;
-	}
-
-	@Override
-	public void makeArchExBlocks(BlockType type, BlockGroup... groups) {
-		for (BlockGroup group : groups) {
-			
-			
-			for(BlockGroup.GroupedBlock groupedBlock : group) {
-				DeferredRegistration.register(modId, group, groupedBlock, Set.of(type), integration::onBlockCreated);
-			}
-		}
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/ArchitectureExtensions.java b/src/main/java/io/github/debuggyteam/architecture_extensions/ArchitectureExtensions.java
deleted file mode 100644
index 5dc933e..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/ArchitectureExtensions.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package io.github.debuggyteam.architecture_extensions;
-
-import io.github.debuggyteam.architecture_extensions.api.ArchExIntegration;
-import io.github.debuggyteam.architecture_extensions.api.BlockGroup;
-import io.github.debuggyteam.architecture_extensions.api.BlockType;
-import io.github.debuggyteam.architecture_extensions.resource.DataGeneration;
-import io.github.debuggyteam.architecture_extensions.staticdata.BlockGroupSchema;
-import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup;
-import net.minecraft.item.ItemGroup;
-import net.minecraft.registry.Registries;
-import net.minecraft.registry.Registry;
-import net.minecraft.registry.RegistryKey;
-import net.minecraft.registry.RegistryKeys;
-import net.minecraft.resource.ResourceType;
-import net.minecraft.text.Text;
-import net.minecraft.util.Identifier;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.Set;
-
-import org.jetbrains.annotations.NotNull;
-import org.quiltmc.loader.api.ModContainer;
-import org.quiltmc.loader.api.QuiltLoader;
-import org.quiltmc.loader.api.entrypoint.EntrypointContainer;
-import org.quiltmc.qsl.base.api.entrypoint.ModInitializer;
-import org.quiltmc.qsl.resource.loader.api.InMemoryPack;
-import org.quiltmc.qsl.resource.loader.api.ResourceLoader;
-import org.quiltmc.qsl.resource.loader.api.PackRegistrationContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-
-import gay.debuggy.staticdata.api.StaticData;
-import gay.debuggy.staticdata.api.StaticDataItem;
-
-public class ArchitectureExtensions implements ModInitializer, PackRegistrationContext.Callback {
-	public static final Logger LOGGER = LoggerFactory.getLogger("Architecture Extensions");
-
-	// This should probably be fine being public and mutable
-	public static ModContainer MOD_CONTAINER;
-	public static final RegistryKey<ItemGroup> ITEM_GROUP = RegistryKey.of(RegistryKeys.ITEM_GROUP, id("building_blocks"));
-	/**
-	 * BlockCreationCallback that adds the created block to the Architecture Extensions "Building Blocks" ItemGroup.
-	 */
-	public static final BlockCreationCallback CALLBACK_ADD_TO_ITEM_GROUP = (group, blockType, baseBlock, derivedBlock) ->
-		ItemGroupUtil.pull(ArchitectureExtensions.ITEM_GROUP, blockType, baseBlock, derivedBlock.asItem());
-
-	public static final InMemoryPack RESOURCE_PACK = new InMemoryPack.Named("Architecture Extensions");
-
-	@Override
-	public void onInitialize(ModContainer mod) {
-		MOD_CONTAINER = mod;
-
-		Registry.register(Registries.ITEM_GROUP, ITEM_GROUP.getValue(), FabricItemGroup.builder()
-			.name(Text.translatable("itemGroup.architecture_extensions.building_blocks"))
-			.icon(() -> PeculiarBlocks.DEBUGGY_BLOCK.asItem().getDefaultStack()) // TODO: Better icon?
-			.build()
-		);
-		
-		PeculiarBlocks.register();
-
-		VanillaIntegration.INSTANCE.integrate(new ArchExIntegrationContextImpl(VanillaIntegration.INSTANCE, mod.metadata().id()));
-		
-		//Find and execute entrypoint integrations
-		for (EntrypointContainer<ArchExIntegration> entrypoint : QuiltLoader.getEntrypointContainers(ArchExIntegration.ENTRYPOINT_KEY, ArchExIntegration.class)) {
-			try {
-				entrypoint.getEntrypoint().integrate(new ArchExIntegrationContextImpl(entrypoint.getEntrypoint(), entrypoint.getProvider().metadata().id()));
-			} catch (Exception ex) {
-				LOGGER.error("Mod '" + entrypoint.getProvider().metadata().id() + "' threw an exception when trying to integrate with Architecture Extensions");
-			}
-		}
-		
-		// Find and register staticdata blocks
-		List<StaticDataItem> dataRegistrations = StaticData.getDataInDirectory(new Identifier("architecture_extensions", ""), true);
-		Gson gson = new GsonBuilder().create();
-		for(StaticDataItem item : dataRegistrations) {
-			try {
-				BlockGroupSchema data = gson.fromJson(item.getAsString(), BlockGroupSchema.class);
-				
-				String requiredMod = data.only_if_present;
-				if (requiredMod != null && !requiredMod.isBlank()) {
-					// Should only be loaded when the indicated mod is present
-					if (!QuiltLoader.isModLoaded(requiredMod)) continue;
-				}
-				
-				BlockGroup group = data.createBlockGroup();
-				Set<BlockType> blockTypes = data.getBlockTypes();
-				for(BlockGroup.GroupedBlock groupedBlock : group) {
-					DeferredRegistration.register(item.getModId(), group, groupedBlock, blockTypes, CALLBACK_ADD_TO_ITEM_GROUP);
-				}
-			} catch (IOException ex) {
-				LOGGER.warn("There was a problem getting staticdata for mod container '" + item.getModId() + "' with resource id '" + item.getResourceId() + "'.", ex);
-			}
-		}
-
-		// Start resolving deferred blocks when their base-blocks appear
-		DeferredRegistration.init();
-		
-		ItemGroupUtil.push();
-
-		ResourceLoader.get(ResourceType.SERVER_DATA).getRegisterDefaultPackEvent().register(this);
-	}
-	
-	@Override
-	public void onRegisterPack(@NotNull PackRegistrationContext context) {
-		DataGeneration.generate(ResourceType.SERVER_DATA);
-		context.addResourcePack(RESOURCE_PACK);
-	}
-
-	public static Identifier id(String path) {
-		return new Identifier("architecture_extensions", path);
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/BlockCreationCallback.java b/src/main/java/io/github/debuggyteam/architecture_extensions/BlockCreationCallback.java
deleted file mode 100644
index 3fd9954..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/BlockCreationCallback.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package io.github.debuggyteam.architecture_extensions;
-
-import io.github.debuggyteam.architecture_extensions.api.BlockGroup;
-import io.github.debuggyteam.architecture_extensions.api.BlockType;
-import net.minecraft.block.Block;
-
-@FunctionalInterface
-public interface BlockCreationCallback {
-	public void onBlockCreated(BlockGroup group, BlockType blockType,  Block base, Block created);
-}
\ No newline at end of file
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/DeferredRegistration.java b/src/main/java/io/github/debuggyteam/architecture_extensions/DeferredRegistration.java
deleted file mode 100644
index ddd1d2c..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/DeferredRegistration.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package io.github.debuggyteam.architecture_extensions;
-
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-import org.jetbrains.annotations.Nullable;
-import org.quiltmc.qsl.registry.api.event.RegistryEvents;
-
-import com.google.common.collect.Multimap;
-import com.google.common.collect.MultimapBuilder;
-
-import io.github.debuggyteam.architecture_extensions.api.BlockGroup;
-import io.github.debuggyteam.architecture_extensions.api.BlockType;
-import io.github.debuggyteam.architecture_extensions.resource.DataGeneration;
-import net.minecraft.block.Block;
-import net.minecraft.block.Blocks;
-import net.minecraft.registry.Registries;
-import net.minecraft.util.Identifier;
-
-
-public class DeferredRegistration {
-	private static Multimap<Identifier, Entry> deferrals = MultimapBuilder.hashKeys().arrayListValues(2).build();
-	
-	/**
-	 * Called by ArchEx to start resolving deferred registrations.
-	 */
-	public static void init() {
-		RegistryEvents.getEntryAddEvent(Registries.BLOCK).register(ctx -> {
-			Identifier registeredId = ctx.id();
-			Collection<Entry> safeEntries = deferrals.get(registeredId);
-			Iterator<Entry> i = safeEntries.iterator();
-			while(i.hasNext()) {
-				Entry entry = i.next();
-				if (entry.register()) {
-					i.remove();
-					//ArchitectureExtensions.LOGGER.info("Deferred generation: "+entry.modId()+" requested "+entry.getIds()+", which is now complete.");
-				} else {
-					ArchitectureExtensions.LOGGER.warn("An unexpected problem ocurred generating "+entry.getIds()+" - this request is still deferred.");
-				}
-			}
-		});
-	}
-	
-	/**
-	 * Called indirectly by users to register derived blocks.
-	 * @param modId
-	 * @param group
-	 * @param groupedBlock
-	 * @param blockTypes
-	 */
-	public static void register(String modId, BlockGroup group, BlockGroup.GroupedBlock groupedBlock, Collection<BlockType> blockTypes, @Nullable BlockCreationCallback callback) {
-		Entry deferral = new Entry(modId, group, groupedBlock, Set.copyOf(blockTypes), callback);
-		
-		if (!deferral.register()) {
-			//ArchitectureExtensions.LOGGER.info("Deferred generation: " + deferral.modId() + " requested " + deferral.getIds() + " and registration was deferred.");
-			deferrals.put(groupedBlock.baseBlockId(), deferral);
-		} else {
-			//ArchitectureExtensions.LOGGER.info("Deferred generation: " + deferral.modId() + " requested " + deferral.getIds() + " and registration was completed immediately.");
-		}
-	}
-	
-	
-	/**
-	 * Called by ArchEx to warn users that we couldn't create blocks that were requested.
-	 */
-	public static void assertFinished() {
-		for(Entry entry : deferrals.values()) {
-			String sourceString = (entry.modId().equals("file")) ? "A file in the staticdata folder" : "Mod '" + entry.modId() + "'";
-			ArchitectureExtensions.LOGGER.warn(sourceString + " requested architecture extensions blocks derived from base block " + entry.groupedBlock.id() + ", but this base block was never registered.");
-		}
-	}
-	
-	private static record Entry(String modId, BlockGroup group, BlockGroup.GroupedBlock groupedBlock, Set<BlockType> blockTypes, BlockCreationCallback callback) {
-		public boolean register() {
-			Block baseBlock = groupedBlock.baseBlock().get();
-			if (baseBlock == Blocks.AIR || baseBlock == null) return false;
-			
-			for(BlockType blockType : blockTypes) {
-				BlockType.TypedGroupedBlock created = blockType.register(group, groupedBlock, callback, modId);
-				DataGeneration.collect(created);
-			}
-			
-			return true;
-		}
-		
-		public Set<String> getIds() {
-			String modId = this.modId();
-			if (modId.equals("file")) modId = ArchitectureExtensions.MOD_CONTAINER.metadata().id(); // If it's a staticdata resource, use our own id
-			
-			HashSet<String> result = new HashSet<>();
-			for(BlockType bt : blockTypes) {
-				Identifier id = new Identifier(modId, groupedBlock.id().getPath() + "_" + bt);
-				result.add(id.toString());
-			}
-			return result;
-		}
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/ItemGroupUtil.java b/src/main/java/io/github/debuggyteam/architecture_extensions/ItemGroupUtil.java
deleted file mode 100644
index 54d57d1..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/ItemGroupUtil.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package io.github.debuggyteam.architecture_extensions;
-
-import java.util.Collection;
-import java.util.LinkedHashSet;
-
-import org.jetbrains.annotations.Nullable;
-
-import com.google.common.collect.LinkedHashMultimap;
-import com.google.common.collect.Multimap;
-import com.google.common.collect.Sets;
-
-import io.github.debuggyteam.architecture_extensions.api.BlockType;
-import it.unimi.dsi.fastutil.Pair;
-import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents;
-import net.minecraft.block.Block;
-import net.minecraft.item.Item;
-import net.minecraft.item.ItemGroup;
-import net.minecraft.registry.RegistryKey;
-
-public final class ItemGroupUtil {
-	private ItemGroupUtil() { }
-
-	private static final Multimap<RegistryKey<ItemGroup>, TypedGroupedItem> ITEM_GROUP_ITEMS = LinkedHashMultimap.create();
-
-	public static void pull(RegistryKey<ItemGroup> itemGroup, @Nullable BlockType type, @Nullable Block baseBlock, Item item) {
-		ITEM_GROUP_ITEMS.put(itemGroup, new TypedGroupedItem(type, baseBlock, item));
-	}
-
-	// TODO: Maybe try sorting without all these allocations?
-	private static Collection<Item> typedGroupingSort(Collection<TypedGroupedItem> unsorted) {
-		final LinkedHashSet<Item> sorted = Sets.newLinkedHashSetWithExpectedSize(unsorted.size());
-
-		final Multimap<Block, Pair<BlockType, Item>> transit = LinkedHashMultimap.create();
-		for (TypedGroupedItem typedGroupedItem : unsorted) { transit.put(typedGroupedItem.baseBlock, Pair.of(typedGroupedItem.type, typedGroupedItem.item)); }
-		for (Block block : transit.keySet()) {
-			for (Pair<BlockType, Item> entry : transit.get(block)) {
-				sorted.add(entry.value());
-			}
-		}
-
-		return sorted;
-	}
-
-	private static void pushInto(RegistryKey<ItemGroup> itemGroup) {
-		ItemGroupEvents.modifyEntriesEvent(itemGroup).register(entries -> typedGroupingSort(ITEM_GROUP_ITEMS.get(itemGroup)).forEach(entries::addItem));
-	}
-
-	public static void push() {
-		ITEM_GROUP_ITEMS.keySet().forEach(ItemGroupUtil::pushInto);
-	}
-
-	private static record TypedGroupedItem(@Nullable BlockType type, @Nullable Block baseBlock, Item item) { }
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/PeculiarBlocks.java b/src/main/java/io/github/debuggyteam/architecture_extensions/PeculiarBlocks.java
deleted file mode 100644
index c3d1166..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/PeculiarBlocks.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package io.github.debuggyteam.architecture_extensions;
-
-import org.quiltmc.qsl.block.extensions.api.QuiltBlockSettings;
-import org.quiltmc.qsl.item.setting.api.QuiltItemSettings;
-
-import net.minecraft.block.Block;
-import net.minecraft.block.EndRodBlock;
-import net.minecraft.item.BlockItem;
-import net.minecraft.registry.Registries;
-import net.minecraft.registry.Registry;
-import net.minecraft.sound.BlockSoundGroup;
-import net.minecraft.util.Identifier;
-
-public class PeculiarBlocks {
-	public static final Block END_ROD_NUBLESS = new EndRodBlock(QuiltBlockSettings.create().strength(1f).luminance(state -> 14).nonOpaque().requiresTool());
-
-	public static final Block DEBUGGY_BLOCK = new Block(QuiltBlockSettings.create().strength(1f).sounds(BlockSoundGroup.WOOL).requiresTool());
-
-	public static final Block FAKE_END_PORTAL_BLOCK = new Block(QuiltBlockSettings.create().strength(1f).sounds(BlockSoundGroup.WOOL).requiresTool());
-
-	private static <T extends Block> T registerBlock(Identifier id, T block) {
-		T registeredBlock = Registry.register(Registries.BLOCK, id, block);
-		var item = Registry.register(Registries.ITEM, id, new BlockItem(block, new QuiltItemSettings()));
-		ItemGroupUtil.pull(ArchitectureExtensions.ITEM_GROUP, null, null, item);
-		return registeredBlock;
-	}
-
-	public static void register() {
-		registerBlock(ArchitectureExtensions.id("end_rod_nubless"), END_ROD_NUBLESS);
-		registerBlock(ArchitectureExtensions.id("debuggy_block"), DEBUGGY_BLOCK);
-		registerBlock(ArchitectureExtensions.id("fake_end_portal_block"), FAKE_END_PORTAL_BLOCK);
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/TypedGroupedBlockItem.java b/src/main/java/io/github/debuggyteam/architecture_extensions/TypedGroupedBlockItem.java
deleted file mode 100644
index c963b7c..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/TypedGroupedBlockItem.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package io.github.debuggyteam.architecture_extensions;
-
-import org.quiltmc.loader.api.minecraft.ClientOnly;
-
-import io.github.debuggyteam.architecture_extensions.api.BlockType.TypedGroupedBlock;
-import io.github.debuggyteam.architecture_extensions.blocks.TypedGrouped;
-import net.minecraft.block.Block;
-import net.minecraft.client.resource.language.I18n;
-import net.minecraft.item.BlockItem;
-import net.minecraft.item.ItemStack;
-import net.minecraft.registry.Registries;
-import net.minecraft.text.HoverEvent;
-import net.minecraft.text.Text;
-import net.minecraft.text.TextColor;
-import net.minecraft.util.Formatting;
-import net.minecraft.util.Identifier;
-import net.minecraft.util.Util;
-
-public class TypedGroupedBlockItem extends BlockItem implements TypedGrouped {
-	public static final String MISSING_LOCALIZATION_KEY = "architecture_extensions.i18n.missing_key";
-	
-	protected final TypedGroupedBlock typedGroupedBlock;
-	
-	public <T extends Block & TypedGrouped> TypedGroupedBlockItem(T block, Settings settings) {
-		super(block, settings);
-		typedGroupedBlock = block.getTypedGroupedBlock();
-	}
-	
-	public TypedGroupedBlockItem(Block block, TypedGroupedBlock typedGrouped, Settings settings) {
-		super(block, settings);
-		typedGroupedBlock = typedGrouped;
-	}
-	
-	@ClientOnly
-	private Text getBaseTranslationKey() {
-		Identifier blockId = typedGroupedBlock.groupedBlock().id();
-		
-		String ideal = GROUPED_BLOCK_PREFIX + "." + blockId.getNamespace() + "." + blockId.getPath();
-		if (I18n.hasTranslation(ideal)) return Text.translatable(ideal);
-		
-		String lessIdeal = GROUPED_BLOCK_PREFIX + "." + blockId.getPath();
-		if (I18n.hasTranslation(lessIdeal)) return Text.translatable(lessIdeal);
-		
-		//This hover never actually displays since the tooltip is already a hover.
-		//But this keeps the Null tradition alive and prevents the tooltip from becoming gigantic.
-		/*
-		return Text.literal("Missing")
-				.styled(it -> it.withHoverEvent(
-						HoverEvent.Action.SHOW_TEXT.buildHoverEvent(Text.translatable(MISSING_LOCALIZATION_KEY, Text.literal(ideal)))
-						)
-						.withItalic(true)
-						.withColor(TextColor.fromFormatting(Formatting.GRAY)));
-						
-		 */
-		
-		return Text.literal("NULL");
-	}
-
-	@Override
-	@ClientOnly
-	public Text getName() {
-		String translationKey = Util.createTranslationKey("block", Registries.ITEM.getId(this));
-		if (I18n.hasTranslation(translationKey)) {
-			return Text.translatable(translationKey);
-		} else {
-			Text baseBlock = getBaseTranslationKey();
-			String typedGroupedKey = BLOCK_TYPE_PREFIX + "." + typedGroupedBlock.type().toString();
-			Text blockType = Text.translatable(typedGroupedKey);
-			
-			return Text.translatable(BLOCKTYPE_BLOCK_KEY, baseBlock, blockType);
-		}
-	}
-	
-	@Override
-	public Text getName(ItemStack stack) {
-		return getName();
-	}
-
-	@Override
-	public TypedGroupedBlock getTypedGroupedBlock() {
-		return this.typedGroupedBlock;
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/VanillaBlockGroups.java b/src/main/java/io/github/debuggyteam/architecture_extensions/VanillaBlockGroups.java
deleted file mode 100644
index 9e42c45..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/VanillaBlockGroups.java
+++ /dev/null
@@ -1,239 +0,0 @@
-package io.github.debuggyteam.architecture_extensions;
-
-import io.github.debuggyteam.architecture_extensions.api.BlockGroup;
-import io.github.debuggyteam.architecture_extensions.api.RecipeConfigurator;
-import io.github.debuggyteam.architecture_extensions.api.TextureConfiguration;
-import io.github.debuggyteam.architecture_extensions.util.SafeRenderLayer;
-import net.minecraft.block.Blocks;
-import net.minecraft.block.MapColor;
-import net.minecraft.util.DyeColor;
-import net.minecraft.util.Identifier;
-
-import java.util.Optional;
-
-public final class VanillaBlockGroups {
-	public static final BlockGroup WOOD = BlockGroup.of(
-		BlockGroup.GroupedBlock.builder(Blocks.OAK_LOG)
-			.id(new Identifier("oak"))
-			.textures(TextureConfiguration.WOOD_WITH_LOG.apply(new Identifier("oak")))
-			.usesTablesaw()
-			.mapColor(MapColor.WOOD)
-			.build(),
-		
-		BlockGroup.GroupedBlock.builder(Blocks.SPRUCE_LOG)
-			.id(new Identifier("spruce"))
-			.textures(TextureConfiguration.WOOD_WITH_LOG.apply(new Identifier("spruce")))
-			.usesTablesaw()
-			.mapColor(MapColor.PODZOL)
-			.build(),
-		
-		BlockGroup.GroupedBlock.builder(Blocks.BIRCH_LOG)
-			.id(new Identifier("birch"))
-			.textures(TextureConfiguration.WOOD_WITH_LOG.apply(new Identifier("birch")))
-			.usesTablesaw()
-			.mapColor(MapColor.SAND)
-			.build(),
-		
-		BlockGroup.GroupedBlock.builder(Blocks.JUNGLE_LOG)
-			.id(new Identifier("jungle"))
-			.textures(TextureConfiguration.WOOD_WITH_LOG.apply(new Identifier("jungle")))
-			.usesTablesaw()
-			.mapColor(MapColor.DIRT)
-			.build(),
-		
-		BlockGroup.GroupedBlock.builder(Blocks.ACACIA_LOG)
-			.id(new Identifier("acacia"))
-			.textures(TextureConfiguration.WOOD_WITH_LOG.apply(new Identifier("acacia")))
-			.usesTablesaw()
-			.mapColor(MapColor.ORANGE)
-			.build(),
-		
-		BlockGroup.GroupedBlock.builder(Blocks.CHERRY_LOG)
-			.id(new Identifier("cherry"))
-			.textures(TextureConfiguration.WOOD_WITH_LOG.apply(new Identifier("cherry")))
-			.usesTablesaw()
-			.mapColor(MapColor.WHITE_TERRACOTTA)
-			.build(),
-		
-		BlockGroup.GroupedBlock.builder(Blocks.DARK_OAK_LOG)
-			.id(new Identifier("dark_oak"))
-			.textures(TextureConfiguration.WOOD_WITH_LOG.apply(new Identifier("dark_oak")))
-			.usesTablesaw()
-			.mapColor(MapColor.BROWN)
-			.build(),
-		
-		BlockGroup.GroupedBlock.builder(Blocks.MANGROVE_LOG)
-			.id(new Identifier("mangrove"))
-			.textures(TextureConfiguration.WOOD_WITH_LOG.apply(new Identifier("mangrove")))
-			.usesTablesaw()
-			.mapColor(MapColor.RED)
-			.build(),
-		
-		BlockGroup.GroupedBlock.builder(Blocks.BAMBOO_PLANKS)
-			.id(new Identifier("bamboo"))
-			.textures((type, textureId) -> "minecraft:block/bamboo_planks")
-			.usesTablesaw()
-			.mapColor(MapColor.YELLOW)
-			.build(),
-			
-		
-		BlockGroup.GroupedBlock.builder(Blocks.CRIMSON_STEM)
-			.id(new Identifier("crimson"))
-			.textures(TextureConfiguration.WOOD_WITH_STEM.apply(new Identifier("crimson")))
-			.usesTablesaw()
-			.mapColor(MapColor.CRIMSON_STEM)
-			.build(),
-		
-		BlockGroup.GroupedBlock.builder(Blocks.WARPED_STEM)
-			.id(new Identifier("warped"))
-			.textures(TextureConfiguration.WOOD_WITH_STEM.apply(new Identifier("warped")))
-			.usesTablesaw()
-			.mapColor(MapColor.WARPED_STEM)
-			.build()
-	);
-
-	public static final BlockGroup STONE = BlockGroup.of(
-		new BlockGroup.GroupedBlock("stone", Blocks.STONE, (type, textureId) -> "minecraft:block/stone", RecipeConfigurator.STONECUTTER, MapColor.STONE),
-		new BlockGroup.GroupedBlock("granite", Blocks.GRANITE, (type, textureId) -> "minecraft:block/granite", RecipeConfigurator.STONECUTTER, MapColor.DIRT),
-		new BlockGroup.GroupedBlock("diorite", Blocks.DIORITE, (type, textureId) -> "minecraft:block/diorite", RecipeConfigurator.STONECUTTER, MapColor.QUARTZ),
-		new BlockGroup.GroupedBlock("andesite", Blocks.ANDESITE, (type, textureId) -> "minecraft:block/andesite", RecipeConfigurator.STONECUTTER, MapColor.STONE),
-		new BlockGroup.GroupedBlock("calcite", Blocks.CALCITE, (type, textureId) -> "minecraft:block/calcite", RecipeConfigurator.STONECUTTER, MapColor.WHITE_TERRACOTTA),
-		new BlockGroup.GroupedBlock("tuff", Blocks.TUFF, (type, textureId) -> "minecraft:block/tuff", RecipeConfigurator.STONECUTTER, MapColor.STONE),
-		new BlockGroup.GroupedBlock("dripstone", Blocks.DRIPSTONE_BLOCK, (type, textureId) -> "minecraft:block/dripstone_block", RecipeConfigurator.STONECUTTER, MapColor.BROWN_TERRACOTTA),
-		new BlockGroup.GroupedBlock("obsidian", Blocks.OBSIDIAN, (type, textureId) -> "minecraft:block/obsidian", RecipeConfigurator.STONECUTTER, MapColor.BLACK),
-		new BlockGroup.GroupedBlock("deepslate", Blocks.DEEPSLATE, (type, textureId) -> "minecraft:block/deepslate", RecipeConfigurator.STONECUTTER, MapColor.DEEPSLATE),
-		new BlockGroup.GroupedBlock("sandstone", Blocks.SANDSTONE, TextureConfiguration.TOP_BOTTOM.apply(new Identifier("sandstone")), RecipeConfigurator.STONECUTTER, MapColor.SAND),
-		new BlockGroup.GroupedBlock("red_sandstone", Blocks.RED_SANDSTONE, TextureConfiguration.TOP_BOTTOM.apply(new Identifier("red_sandstone")), RecipeConfigurator.STONECUTTER, MapColor.ORANGE),
-		new BlockGroup.GroupedBlock("end_stone", Blocks.END_STONE, (type, textureId) -> "minecraft:block/end_stone", RecipeConfigurator.STONECUTTER, MapColor.BLACK),
-		new BlockGroup.GroupedBlock("blackstone", Blocks.BLACKSTONE, TextureConfiguration.TOP.apply(new Identifier("blackstone")), RecipeConfigurator.STONECUTTER, MapColor.BLACK),
-		new BlockGroup.GroupedBlock("raw_iron", Blocks.RAW_IRON_BLOCK, (type, textureId) -> "minecraft:block/raw_iron_block", RecipeConfigurator.STONECUTTER, MapColor.RAW_IRON),
-		new BlockGroup.GroupedBlock("raw_copper", Blocks.RAW_COPPER_BLOCK, (type, textureId) -> "minecraft:block/raw_copper_block", RecipeConfigurator.STONECUTTER, MapColor.ORANGE),
-		new BlockGroup.GroupedBlock("raw_gold", Blocks.RAW_GOLD_BLOCK, (type, textureId) -> "minecraft:block/raw_gold_block", RecipeConfigurator.STONECUTTER, MapColor.GOLD)
-	);
-
-	public static final BlockGroup AQUATIC_STONE = BlockGroup.of(
-		new BlockGroup.GroupedBlock("prismarine", Blocks.PRISMARINE, (type, textureId) -> "minecraft:block/prismarine", RecipeConfigurator.STONECUTTER, MapColor.CYAN),
-		new BlockGroup.GroupedBlock("sea_lantern", Blocks.SEA_LANTERN, (type, textureId) -> "minecraft:block/sea_lantern", RecipeConfigurator.STONECUTTER, MapColor.QUARTZ)
-	);
-
-	public static final BlockGroup PROCESSED_STONE = BlockGroup.of(
-		new BlockGroup.GroupedBlock("cobblestone", Blocks.COBBLESTONE, (type, textureId) -> "minecraft:block/cobblestone", RecipeConfigurator.STONECUTTER, MapColor.STONE),
-		new BlockGroup.GroupedBlock("smooth_stone", Blocks.SMOOTH_STONE, (type, textureId) -> "minecraft:block/smooth_stone", RecipeConfigurator.STONECUTTER, MapColor.STONE),
-		new BlockGroup.GroupedBlock("mossy_cobblestone", Blocks.MOSSY_COBBLESTONE, (type, textureId) -> "minecraft:block/mossy_cobblestone", RecipeConfigurator.STONECUTTER, MapColor.STONE),
-		new BlockGroup.GroupedBlock("cobbled_deepslate", Blocks.COBBLED_DEEPSLATE, (type, textureId) -> "minecraft:block/cobbled_deepslate", RecipeConfigurator.STONECUTTER, MapColor.DEEPSLATE),
-		new BlockGroup.GroupedBlock("polished_deepslate", Blocks.POLISHED_DEEPSLATE, (type, textureId) -> "minecraft:block/polished_deepslate", RecipeConfigurator.STONECUTTER, MapColor.DEEPSLATE),
-		new BlockGroup.GroupedBlock("smooth_sandstone", Blocks.SMOOTH_SANDSTONE, (type, textureId) -> "minecraft:block/sandstone_top", RecipeConfigurator.STONECUTTER, MapColor.SAND),
-		new BlockGroup.GroupedBlock("smooth_red_sandstone", Blocks.SMOOTH_RED_SANDSTONE, (type, textureId) -> "minecraft:block/red_sandstone_top", RecipeConfigurator.STONECUTTER, MapColor.ORANGE),
-		new BlockGroup.GroupedBlock("polished_blackstone", Blocks.POLISHED_BLACKSTONE, (type, textureId) -> "minecraft:block/polished_blackstone", RecipeConfigurator.STONECUTTER, MapColor.BLACK)
-	);
-
-	public static final BlockGroup BRICK = BlockGroup.of(
-		new BlockGroup.GroupedBlock("stone_brick", Blocks.STONE_BRICKS, (type, textureId) -> "minecraft:block/stone_bricks", RecipeConfigurator.STONECUTTER, MapColor.STONE),
-		new BlockGroup.GroupedBlock("cracked_stone_brick", Blocks.CRACKED_STONE_BRICKS, (type, textureId) -> "minecraft:block/cracked_stone_bricks", RecipeConfigurator.STONECUTTER, MapColor.STONE),
-		new BlockGroup.GroupedBlock("mossy_stone_brick", Blocks.MOSSY_STONE_BRICKS, (type, textureId) -> "minecraft:block/mossy_stone_bricks", RecipeConfigurator.STONECUTTER, MapColor.STONE),
-		new BlockGroup.GroupedBlock("deepslate_brick", Blocks.DEEPSLATE_BRICKS, (type, textureId) -> "minecraft:block/deepslate_bricks", RecipeConfigurator.STONECUTTER, MapColor.DEEPSLATE),
-		new BlockGroup.GroupedBlock("cracked_deepslate_brick", Blocks.CRACKED_DEEPSLATE_BRICKS, (type, textureId) -> "minecraft:block/cracked_deepslate_bricks", RecipeConfigurator.STONECUTTER, MapColor.DEEPSLATE),
-		new BlockGroup.GroupedBlock("brick", Blocks.BRICKS, (type, textureId) -> "minecraft:block/bricks", RecipeConfigurator.STONECUTTER, MapColor.RED),
-		new BlockGroup.GroupedBlock("mud_brick", Blocks.MUD_BRICKS, (type, textureId) -> "minecraft:block/mud_bricks", RecipeConfigurator.STONECUTTER, MapColor.LIGHT_GRAY_TERRACOTTA),
-		new BlockGroup.GroupedBlock("prismarine_brick", Blocks.PRISMARINE_BRICKS, (type, textureId) -> "minecraft:block/prismarine_bricks", RecipeConfigurator.STONECUTTER, MapColor.DIAMOND),
-		new BlockGroup.GroupedBlock("nether_brick", Blocks.NETHER_BRICKS, (type, textureId) -> "minecraft:block/nether_bricks", RecipeConfigurator.STONECUTTER, MapColor.NETHER),
-		new BlockGroup.GroupedBlock("cracked_nether_brick", Blocks.CRACKED_NETHER_BRICKS, (type, textureId) -> "minecraft:block/cracked_nether_bricks", RecipeConfigurator.STONECUTTER, MapColor.NETHER),
-		new BlockGroup.GroupedBlock("red_nether_brick", Blocks.RED_NETHER_BRICKS, (type, textureId) -> "minecraft:block/red_nether_bricks", RecipeConfigurator.STONECUTTER, MapColor.NETHER),
-		new BlockGroup.GroupedBlock("polished_blackstone_brick", Blocks.POLISHED_BLACKSTONE_BRICKS, (type, textureId) -> "minecraft:block/polished_blackstone_bricks", RecipeConfigurator.STONECUTTER, MapColor.BLACK),
-		new BlockGroup.GroupedBlock("cracked_polished_blackstone_brick", Blocks.CRACKED_POLISHED_BLACKSTONE_BRICKS, (type, textureId) -> "minecraft:block/cracked_polished_blackstone_bricks", RecipeConfigurator.STONECUTTER, MapColor.BLACK),
-		new BlockGroup.GroupedBlock("end_stone_brick", Blocks.END_STONE_BRICKS, (type, textureId) -> "minecraft:block/end_stone_bricks", RecipeConfigurator.STONECUTTER, MapColor.SAND)
-	);
-
-	public static final BlockGroup TILE = BlockGroup.of(
-		new BlockGroup.GroupedBlock("deepslate_tile", Blocks.DEEPSLATE_TILES, (type, textureId) -> "minecraft:block/deepslate_tiles", RecipeConfigurator.STONECUTTER, MapColor.DEEPSLATE),
-		new BlockGroup.GroupedBlock("cracked_deepslate_tile", Blocks.CRACKED_DEEPSLATE_TILES, (type, textureId) -> "minecraft:block/cracked_deepslate_tiles", RecipeConfigurator.STONECUTTER, MapColor.DEEPSLATE),
-		new BlockGroup.GroupedBlock("dark_prismarine", Blocks.DARK_PRISMARINE, (type, textureId) -> "minecraft:block/dark_prismarine", RecipeConfigurator.STONECUTTER, MapColor.DIAMOND),
-		new BlockGroup.GroupedBlock("purpur", Blocks.PURPUR_BLOCK, (type, textureId) -> "minecraft:block/purpur_block", RecipeConfigurator.STONECUTTER, MapColor.MAGENTA)
-	);
-
-	public static final BlockGroup CRYSTAL = BlockGroup.of(
-		new BlockGroup.GroupedBlock("quartz", Blocks.QUARTZ_BLOCK, TextureConfiguration.SIDED.apply(new Identifier("quartz_block")), RecipeConfigurator.STONECUTTER, MapColor.QUARTZ),
-		new BlockGroup.GroupedBlock("smooth_quartz", Blocks.SMOOTH_QUARTZ, (type, textureId) -> "minecraft:block/quartz_block_bottom", RecipeConfigurator.STONECUTTER, MapColor.QUARTZ)
-	);
-	
-	public static final BlockGroup GLASS = BlockGroup.of(
-		new BlockGroup.GroupedBlock(new Identifier("glass"), new Identifier("glass"), () -> Blocks.GLASS, (type, textureId) -> "minecraft:block/glass", RecipeConfigurator.CREATIVE, Optional.ofNullable(DyeColor.WHITE.getMapColor()), SafeRenderLayer.TRANSLUCENT),
-		new BlockGroup.GroupedBlock(new Identifier("white_stained_glass"), new Identifier("white_stained_glass"), () -> Blocks.WHITE_STAINED_GLASS, (type, textureId) -> "minecraft:block/white_stained_glass", RecipeConfigurator.CREATIVE, Optional.ofNullable(DyeColor.WHITE.getMapColor()), SafeRenderLayer.TRANSLUCENT),
-		new BlockGroup.GroupedBlock(new Identifier("light_gray_stained_glass"), new Identifier("light_gray_stained_glass"), () -> Blocks.LIGHT_GRAY_STAINED_GLASS, (type, textureId) -> "minecraft:block/light_gray_stained_glass", RecipeConfigurator.CREATIVE, Optional.ofNullable(DyeColor.WHITE.getMapColor()), SafeRenderLayer.TRANSLUCENT),
-		new BlockGroup.GroupedBlock(new Identifier("gray_stained_glass"), new Identifier("gray_stained_glass"), () -> Blocks.GRAY_STAINED_GLASS, (type, textureId) -> "minecraft:block/gray_stained_glass", RecipeConfigurator.CREATIVE, Optional.ofNullable(DyeColor.WHITE.getMapColor()), SafeRenderLayer.TRANSLUCENT),
-		new BlockGroup.GroupedBlock(new Identifier("black_stained_glass"), new Identifier("black_stained_glass"), () -> Blocks.BLACK_STAINED_GLASS, (type, textureId) -> "minecraft:block/black_stained_glass", RecipeConfigurator.CREATIVE, Optional.ofNullable(DyeColor.WHITE.getMapColor()), SafeRenderLayer.TRANSLUCENT),
-		new BlockGroup.GroupedBlock(new Identifier("brown_stained_glass"), new Identifier("brown_stained_glass"), () -> Blocks.BROWN_STAINED_GLASS, (type, textureId) -> "minecraft:block/brown_stained_glass", RecipeConfigurator.CREATIVE, Optional.ofNullable(DyeColor.WHITE.getMapColor()), SafeRenderLayer.TRANSLUCENT),
-		new BlockGroup.GroupedBlock(new Identifier("red_stained_glass"), new Identifier("red_stained_glass"), () -> Blocks.RED_STAINED_GLASS, (type, textureId) -> "minecraft:block/red_stained_glass", RecipeConfigurator.CREATIVE, Optional.ofNullable(DyeColor.WHITE.getMapColor()), SafeRenderLayer.TRANSLUCENT),
-		new BlockGroup.GroupedBlock(new Identifier("orange_stained_glass"), new Identifier("orange_stained_glass"), () -> Blocks.ORANGE_STAINED_GLASS, (type, textureId) -> "minecraft:block/orange_stained_glass", RecipeConfigurator.CREATIVE, Optional.ofNullable(DyeColor.WHITE.getMapColor()), SafeRenderLayer.TRANSLUCENT),
-		new BlockGroup.GroupedBlock(new Identifier("yellow_stained_glass"), new Identifier("yellow_stained_glass"), () -> Blocks.YELLOW_STAINED_GLASS, (type, textureId) -> "minecraft:block/yellow_stained_glass", RecipeConfigurator.CREATIVE, Optional.ofNullable(DyeColor.WHITE.getMapColor()), SafeRenderLayer.TRANSLUCENT),
-		new BlockGroup.GroupedBlock(new Identifier("lime_stained_glass"), new Identifier("lime_stained_glass"), () -> Blocks.LIME_STAINED_GLASS, (type, textureId) -> "minecraft:block/lime_stained_glass", RecipeConfigurator.CREATIVE, Optional.ofNullable(DyeColor.WHITE.getMapColor()), SafeRenderLayer.TRANSLUCENT),
-		new BlockGroup.GroupedBlock(new Identifier("green_stained_glass"), new Identifier("green_stained_glass"), () -> Blocks.GREEN_STAINED_GLASS, (type, textureId) -> "minecraft:block/green_stained_glass", RecipeConfigurator.CREATIVE, Optional.ofNullable(DyeColor.WHITE.getMapColor()), SafeRenderLayer.TRANSLUCENT),
-		new BlockGroup.GroupedBlock(new Identifier("cyan_stained_glass"), new Identifier("cyan_stained_glass"), () -> Blocks.CYAN_STAINED_GLASS, (type, textureId) -> "minecraft:block/cyan_stained_glass", RecipeConfigurator.CREATIVE, Optional.ofNullable(DyeColor.WHITE.getMapColor()), SafeRenderLayer.TRANSLUCENT),
-		new BlockGroup.GroupedBlock(new Identifier("light_blue_stained_glass"), new Identifier("light_blue_stained_glass"), () -> Blocks.LIGHT_BLUE_STAINED_GLASS, (type, textureId) -> "minecraft:block/light_blue_stained_glass", RecipeConfigurator.CREATIVE, Optional.ofNullable(DyeColor.WHITE.getMapColor()), SafeRenderLayer.TRANSLUCENT),
-		new BlockGroup.GroupedBlock(new Identifier("blue_stained_glass"), new Identifier("blue_stained_glass"), () -> Blocks.BLUE_STAINED_GLASS, (type, textureId) -> "minecraft:block/blue_stained_glass", RecipeConfigurator.CREATIVE, Optional.ofNullable(DyeColor.WHITE.getMapColor()), SafeRenderLayer.TRANSLUCENT),
-		new BlockGroup.GroupedBlock(new Identifier("purple_stained_glass"), new Identifier("purple_stained_glass"), () -> Blocks.PURPLE_STAINED_GLASS, (type, textureId) -> "minecraft:block/purple_stained_glass", RecipeConfigurator.CREATIVE, Optional.ofNullable(DyeColor.WHITE.getMapColor()), SafeRenderLayer.TRANSLUCENT),
-		new BlockGroup.GroupedBlock(new Identifier("magenta_stained_glass"), new Identifier("magenta_stained_glass"), () -> Blocks.MAGENTA_STAINED_GLASS, (type, textureId) -> "minecraft:block/magenta_stained_glass", RecipeConfigurator.CREATIVE, Optional.ofNullable(DyeColor.WHITE.getMapColor()), SafeRenderLayer.TRANSLUCENT),
-		new BlockGroup.GroupedBlock(new Identifier("pink_stained_glass"), new Identifier("pink_stained_glass"), () -> Blocks.PINK_STAINED_GLASS, (type, textureId) -> "minecraft:block/pink_stained_glass", RecipeConfigurator.CREATIVE, Optional.ofNullable(DyeColor.WHITE.getMapColor()), SafeRenderLayer.TRANSLUCENT)
-	);
-
-	public static final BlockGroup TERRACOTTA = BlockGroup.of(
-		new BlockGroup.GroupedBlock("terracotta", Blocks.TERRACOTTA, (type, textureId) -> "minecraft:block/terracotta", RecipeConfigurator.STONECUTTER, MapColor.ORANGE),
-		new BlockGroup.GroupedBlock("white_terracotta", Blocks.WHITE_TERRACOTTA, (type, textureId) -> "minecraft:block/white_terracotta", RecipeConfigurator.STONECUTTER, MapColor.WHITE_TERRACOTTA),
-		new BlockGroup.GroupedBlock("light_gray_terracotta", Blocks.LIGHT_GRAY_TERRACOTTA, (type, textureId) -> "minecraft:block/light_gray_terracotta", RecipeConfigurator.STONECUTTER, MapColor.LIGHT_GRAY_TERRACOTTA),
-		new BlockGroup.GroupedBlock("gray_terracotta", Blocks.GRAY_TERRACOTTA, (type, textureId) -> "minecraft:block/gray_terracotta", RecipeConfigurator.STONECUTTER, MapColor.GRAY_TERRACOTTA),
-		new BlockGroup.GroupedBlock("black_terracotta", Blocks.BLACK_TERRACOTTA, (type, textureId) -> "minecraft:block/black_terracotta", RecipeConfigurator.STONECUTTER, MapColor.BLACK_TERRACOTTA),
-		new BlockGroup.GroupedBlock("brown_terracotta", Blocks.BROWN_TERRACOTTA, (type, textureId) -> "minecraft:block/brown_terracotta", RecipeConfigurator.STONECUTTER, MapColor.BROWN_TERRACOTTA),
-		new BlockGroup.GroupedBlock("red_terracotta", Blocks.RED_TERRACOTTA, (type, textureId) -> "minecraft:block/red_terracotta", RecipeConfigurator.STONECUTTER, MapColor.RED_TERRACOTTA),
-		new BlockGroup.GroupedBlock("orange_terracotta", Blocks.ORANGE_TERRACOTTA, (type, textureId) -> "minecraft:block/orange_terracotta", RecipeConfigurator.STONECUTTER, MapColor.ORANGE_TERRACOTTA),
-		new BlockGroup.GroupedBlock("yellow_terracotta", Blocks.YELLOW_TERRACOTTA, (type, textureId) -> "minecraft:block/yellow_terracotta", RecipeConfigurator.STONECUTTER, MapColor.YELLOW_TERRACOTTA),
-		new BlockGroup.GroupedBlock("lime_terracotta", Blocks.LIME_TERRACOTTA, (type, textureId) -> "minecraft:block/lime_terracotta", RecipeConfigurator.STONECUTTER, MapColor.LIME_TERRACOTTA),
-		new BlockGroup.GroupedBlock("green_terracotta", Blocks.GREEN_TERRACOTTA, (type, textureId) -> "minecraft:block/green_terracotta", RecipeConfigurator.STONECUTTER, MapColor.GREEN_TERRACOTTA),
-		new BlockGroup.GroupedBlock("cyan_terracotta", Blocks.CYAN_TERRACOTTA, (type, textureId) -> "minecraft:block/cyan_terracotta", RecipeConfigurator.STONECUTTER, MapColor.CYAN_TERRACOTTA),
-		new BlockGroup.GroupedBlock("light_blue_terracotta", Blocks.LIGHT_BLUE_TERRACOTTA, (type, textureId) -> "minecraft:block/light_blue_terracotta", RecipeConfigurator.STONECUTTER, MapColor.LIGHT_BLUE_TERRACOTTA),
-		new BlockGroup.GroupedBlock("blue_terracotta", Blocks.BLUE_TERRACOTTA, (type, textureId) -> "minecraft:block/blue_terracotta", RecipeConfigurator.STONECUTTER, MapColor.BLUE_TERRACOTTA),
-		new BlockGroup.GroupedBlock("purple_terracotta", Blocks.PURPLE_TERRACOTTA, (type, textureId) -> "minecraft:block/purple_terracotta", RecipeConfigurator.STONECUTTER, MapColor.PURPLE_TERRACOTTA),
-		new BlockGroup.GroupedBlock("magenta_terracotta", Blocks.MAGENTA_TERRACOTTA, (type, textureId) -> "minecraft:block/magenta_terracotta", RecipeConfigurator.STONECUTTER, MapColor.MAGENTA_TERRACOTTA),
-		new BlockGroup.GroupedBlock("pink_terracotta", Blocks.PINK_TERRACOTTA, (type, textureId) -> "minecraft:block/pink_terracotta", RecipeConfigurator.STONECUTTER, MapColor.PINK_TERRACOTTA)
-	);
-
-	public static final BlockGroup CONCRETE = BlockGroup.of(
-		new BlockGroup.GroupedBlock("white_concrete", Blocks.WHITE_CONCRETE, (type, textureId) -> "minecraft:block/white_concrete", RecipeConfigurator.STONECUTTER, DyeColor.WHITE.getMapColor()),
-		new BlockGroup.GroupedBlock("light_gray_concrete", Blocks.LIGHT_GRAY_CONCRETE, (type, textureId) -> "minecraft:block/light_gray_concrete", RecipeConfigurator.STONECUTTER, DyeColor.LIGHT_GRAY.getMapColor()),
-		new BlockGroup.GroupedBlock("gray_concrete", Blocks.GRAY_CONCRETE, (type, textureId) -> "minecraft:block/gray_concrete", RecipeConfigurator.STONECUTTER, DyeColor.GRAY.getMapColor()),
-		new BlockGroup.GroupedBlock("black_concrete", Blocks.BLACK_CONCRETE, (type, textureId) -> "minecraft:block/black_concrete", RecipeConfigurator.STONECUTTER, DyeColor.BLACK.getMapColor()),
-		new BlockGroup.GroupedBlock("brown_concrete", Blocks.BROWN_CONCRETE, (type, textureId) -> "minecraft:block/brown_concrete", RecipeConfigurator.STONECUTTER, DyeColor.BROWN.getMapColor()),
-		new BlockGroup.GroupedBlock("red_concrete", Blocks.RED_CONCRETE, (type, textureId) -> "minecraft:block/red_concrete", RecipeConfigurator.STONECUTTER, DyeColor.RED.getMapColor()),
-		new BlockGroup.GroupedBlock("orange_concrete", Blocks.ORANGE_CONCRETE, (type, textureId) -> "minecraft:block/orange_concrete", RecipeConfigurator.STONECUTTER, DyeColor.ORANGE.getMapColor()),
-		new BlockGroup.GroupedBlock("yellow_concrete", Blocks.YELLOW_CONCRETE, (type, textureId) -> "minecraft:block/yellow_concrete", RecipeConfigurator.STONECUTTER, DyeColor.YELLOW.getMapColor()),
-		new BlockGroup.GroupedBlock("lime_concrete", Blocks.LIME_CONCRETE, (type, textureId) -> "minecraft:block/lime_concrete", RecipeConfigurator.STONECUTTER, DyeColor.LIME.getMapColor()),
-		new BlockGroup.GroupedBlock("green_concrete", Blocks.GREEN_CONCRETE, (type, textureId) -> "minecraft:block/green_concrete", RecipeConfigurator.STONECUTTER, DyeColor.GREEN.getMapColor()),
-		new BlockGroup.GroupedBlock("cyan_concrete", Blocks.CYAN_CONCRETE, (type, textureId) -> "minecraft:block/cyan_concrete", RecipeConfigurator.STONECUTTER, DyeColor.CYAN.getMapColor()),
-		new BlockGroup.GroupedBlock("light_blue_concrete", Blocks.LIGHT_BLUE_CONCRETE, (type, textureId) -> "minecraft:block/light_blue_concrete", RecipeConfigurator.STONECUTTER, DyeColor.LIGHT_BLUE.getMapColor()),
-		new BlockGroup.GroupedBlock("blue_concrete", Blocks.BLUE_CONCRETE, (type, textureId) -> "minecraft:block/blue_concrete", RecipeConfigurator.STONECUTTER, DyeColor.BLUE.getMapColor()),
-		new BlockGroup.GroupedBlock("purple_concrete", Blocks.PURPLE_CONCRETE, (type, textureId) -> "minecraft:block/purple_concrete", RecipeConfigurator.STONECUTTER, DyeColor.PURPLE.getMapColor()),
-		new BlockGroup.GroupedBlock("magenta_concrete", Blocks.MAGENTA_CONCRETE, (type, textureId) -> "minecraft:block/magenta_concrete", RecipeConfigurator.STONECUTTER, DyeColor.MAGENTA.getMapColor()),
-		new BlockGroup.GroupedBlock("pink_concrete", Blocks.PINK_CONCRETE, (type, textureId) -> "minecraft:block/pink_concrete", RecipeConfigurator.STONECUTTER, DyeColor.PINK.getMapColor())
-	);
-	
-	public static final BlockGroup POWDER = BlockGroup.of(
-		new BlockGroup.GroupedBlock("sand", Blocks.SAND, (type, textureId) -> "minecraft:block/sand", RecipeConfigurator.CREATIVE, MapColor.SAND),
-		new BlockGroup.GroupedBlock("red_sand", Blocks.RED_SAND, (type, textureId) -> "minecraft:block/red_sand", RecipeConfigurator.CREATIVE, MapColor.ORANGE),
-		new BlockGroup.GroupedBlock("dirt", Blocks.DIRT, (type, textureId) -> "minecraft:block/dirt", RecipeConfigurator.CREATIVE, MapColor.DIRT),
-		new BlockGroup.GroupedBlock("white_concrete_powder", Blocks.WHITE_CONCRETE_POWDER, (type, textureId) -> "minecraft:block/white_concrete_powder", RecipeConfigurator.CREATIVE, DyeColor.WHITE.getMapColor()),
-		new BlockGroup.GroupedBlock("light_gray_concrete_powder", Blocks.LIGHT_GRAY_CONCRETE_POWDER, (type, textureId) -> "minecraft:block/light_gray_concrete_powder", RecipeConfigurator.CREATIVE, DyeColor.LIGHT_GRAY.getMapColor()),
-		new BlockGroup.GroupedBlock("gray_concrete_powder", Blocks.GRAY_CONCRETE_POWDER, (type, textureId) -> "minecraft:block/gray_concrete_powder", RecipeConfigurator.CREATIVE, DyeColor.GRAY.getMapColor()),
-		new BlockGroup.GroupedBlock("black_concrete_powder", Blocks.BLACK_CONCRETE_POWDER, (type, textureId) -> "minecraft:block/black_concrete_powder", RecipeConfigurator.CREATIVE, DyeColor.BLACK.getMapColor()),
-		new BlockGroup.GroupedBlock("brown_concrete_powder", Blocks.BROWN_CONCRETE_POWDER, (type, textureId) -> "minecraft:block/brown_concrete_powder", RecipeConfigurator.CREATIVE, DyeColor.BROWN.getMapColor()),
-		new BlockGroup.GroupedBlock("red_concrete_powder", Blocks.RED_CONCRETE_POWDER, (type, textureId) -> "minecraft:block/red_concrete_powder", RecipeConfigurator.CREATIVE, DyeColor.RED.getMapColor()),
-		new BlockGroup.GroupedBlock("orange_concrete_powder", Blocks.ORANGE_CONCRETE_POWDER, (type, textureId) -> "minecraft:block/orange_concrete_powder", RecipeConfigurator.CREATIVE, DyeColor.ORANGE.getMapColor()),
-		new BlockGroup.GroupedBlock("yellow_concrete_powder", Blocks.YELLOW_CONCRETE_POWDER, (type, textureId) -> "minecraft:block/yellow_concrete_powder", RecipeConfigurator.CREATIVE, DyeColor.YELLOW.getMapColor()),
-		new BlockGroup.GroupedBlock("lime_concrete_powder", Blocks.LIME_CONCRETE_POWDER, (type, textureId) -> "minecraft:block/lime_concrete_powder", RecipeConfigurator.CREATIVE, DyeColor.LIME.getMapColor()),
-		new BlockGroup.GroupedBlock("green_concrete_powder", Blocks.GREEN_CONCRETE_POWDER, (type, textureId) -> "minecraft:block/green_concrete_powder", RecipeConfigurator.CREATIVE, DyeColor.GREEN.getMapColor()),
-		new BlockGroup.GroupedBlock("cyan_concrete_powder", Blocks.CYAN_CONCRETE_POWDER, (type, textureId) -> "minecraft:block/cyan_concrete_powder", RecipeConfigurator.CREATIVE, DyeColor.CYAN.getMapColor()),
-		new BlockGroup.GroupedBlock("light_blue_concrete_powder", Blocks.LIGHT_BLUE_CONCRETE_POWDER, (type, textureId) -> "minecraft:block/light_blue_concrete_powder", RecipeConfigurator.CREATIVE, DyeColor.LIGHT_BLUE.getMapColor()),
-		new BlockGroup.GroupedBlock("blue_concrete_powder", Blocks.BLUE_CONCRETE_POWDER, (type, textureId) -> "minecraft:block/blue_concrete_powder", RecipeConfigurator.CREATIVE, DyeColor.BLUE.getMapColor()),
-		new BlockGroup.GroupedBlock("purple_concrete_powder", Blocks.PURPLE_CONCRETE_POWDER, (type, textureId) -> "minecraft:block/purple_concrete_powder", RecipeConfigurator.CREATIVE, DyeColor.PURPLE.getMapColor()),
-		new BlockGroup.GroupedBlock("magenta_concrete_powder", Blocks.MAGENTA_CONCRETE_POWDER, (type, textureId) -> "minecraft:block/magenta_concrete_powder", RecipeConfigurator.CREATIVE, DyeColor.MAGENTA.getMapColor()),
-		new BlockGroup.GroupedBlock("pink_concrete_powder", Blocks.PINK_CONCRETE_POWDER, (type, textureId) -> "minecraft:block/pink_concrete_powder", RecipeConfigurator.CREATIVE, DyeColor.PINK.getMapColor())
-	);
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/VanillaIntegration.java b/src/main/java/io/github/debuggyteam/architecture_extensions/VanillaIntegration.java
deleted file mode 100644
index d8fdef7..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/VanillaIntegration.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package io.github.debuggyteam.architecture_extensions;
-
-import io.github.debuggyteam.architecture_extensions.api.ArchExIntegration;
-import io.github.debuggyteam.architecture_extensions.api.BlockGroup;
-import io.github.debuggyteam.architecture_extensions.api.BlockType;
-import io.github.debuggyteam.architecture_extensions.api.RecipeConfigurator;
-import net.minecraft.block.Block;
-import net.minecraft.block.Blocks;
-import net.minecraft.block.MapColor;
-
-public class VanillaIntegration implements ArchExIntegration {
-	public static final VanillaIntegration INSTANCE = new VanillaIntegration();
-
-	private static final BlockGroup BAMBOO_ROD = BlockGroup.of(new BlockGroup.GroupedBlock("bamboo", Blocks.BAMBOO, (type, textureId) -> "minecraft:block/bamboo_stalk", RecipeConfigurator.simple("bamboo_rod"), MapColor.PLANT));
-	private static final BlockGroup COPPER_ROD = BlockGroup.of(new BlockGroup.GroupedBlock("copper", Blocks.LIGHTNING_ROD, (type, textureId) -> "architecture_extensions:block/copper_rod", RecipeConfigurator.simple("copper_rod"), MapColor.ORANGE));
-	private static final BlockGroup IRON_ROD = BlockGroup.of(new BlockGroup.GroupedBlock("iron", Blocks.IRON_BARS, (type, textureId) -> "minecraft:block/iron_bars", RecipeConfigurator.simple("iron_rod")));
-	private static final BlockGroup IRON_H_BEAM = BlockGroup.of(new BlockGroup.GroupedBlock("iron", Blocks.IRON_BLOCK, (type, textureId) -> "architecture_extensions:block/iron_tube_metal", RecipeConfigurator.CRAFTING, MapColor.METAL));
-	
-	
-	private static final BlockGroup TUBE_METAL = BlockGroup.of(
-			new BlockGroup.GroupedBlock("iron", Blocks.IRON_BLOCK, (type, textureId) -> {
-				return switch (textureId) {
-					case "texture_up" -> "architecture_extensions:block/iron_tube_metal_top";
-					default -> "architecture_extensions:block/iron_tube_metal";
-				};
-			}, RecipeConfigurator.CRAFTING, MapColor.METAL),
-			new BlockGroup.GroupedBlock("copper", Blocks.COPPER_BLOCK, (type, textureId) -> {
-				return switch (textureId) {
-					case "texture_up" -> "architecture_extensions:block/copper_tube_metal_top";
-					default -> "architecture_extensions:block/copper_tube_metal";
-				};
-			}, RecipeConfigurator.CRAFTING, MapColor.METAL)
-	);
-
-	@Override
-	public void integrate(Context ctx) {
-		ctx.makeArchExBlocks(BlockType.ARCH, 
-			VanillaBlockGroups.STONE, VanillaBlockGroups.AQUATIC_STONE, VanillaBlockGroups.PROCESSED_STONE, 
-			VanillaBlockGroups.BRICK, VanillaBlockGroups.TILE, VanillaBlockGroups.CRYSTAL
-		);
-
-		ctx.makeArchExBlocks(BlockType.CURVE,
-			VanillaBlockGroups.WOOD, VanillaBlockGroups.STONE, VanillaBlockGroups.AQUATIC_STONE,
-			VanillaBlockGroups.PROCESSED_STONE, VanillaBlockGroups.BRICK, VanillaBlockGroups.TILE,
-			VanillaBlockGroups.CRYSTAL
-		);
-
-		ctx.makeArchExBlocks(BlockType.WALL_COLUMN, 
-			VanillaBlockGroups.STONE, VanillaBlockGroups.AQUATIC_STONE, VanillaBlockGroups.PROCESSED_STONE, 
-			VanillaBlockGroups.BRICK, VanillaBlockGroups.TILE, VanillaBlockGroups.CRYSTAL
-		);
-
-		ctx.makeArchExBlocks(BlockType.ROOF, 
-			VanillaBlockGroups.STONE, VanillaBlockGroups.PROCESSED_STONE,
-			VanillaBlockGroups.BRICK, VanillaBlockGroups.TILE, VanillaBlockGroups.CRYSTAL
-		);
-
-		ctx.makeArchExBlocks(BlockType.WALL_POST, 
-			VanillaBlockGroups.STONE, VanillaBlockGroups.AQUATIC_STONE, VanillaBlockGroups.PROCESSED_STONE, 
-			VanillaBlockGroups.BRICK, VanillaBlockGroups.TILE, VanillaBlockGroups.CRYSTAL
-		);
-
-		ctx.makeArchExBlocks(BlockType.FACADE,
-			VanillaBlockGroups.WOOD, VanillaBlockGroups.STONE,
-			VanillaBlockGroups.AQUATIC_STONE, VanillaBlockGroups.PROCESSED_STONE,
-			VanillaBlockGroups.BRICK, VanillaBlockGroups.TILE, VanillaBlockGroups.CRYSTAL,
-			VanillaBlockGroups.TERRACOTTA, VanillaBlockGroups.CONCRETE, VanillaBlockGroups.GLASS,
-			VanillaBlockGroups.POWDER
-		);
-		
-		ctx.makeArchExBlocks(BlockType.ROUND_FENCE_POST,
-			VanillaBlockGroups.WOOD, VanillaBlockGroups.STONE, VanillaBlockGroups.AQUATIC_STONE,
-			VanillaBlockGroups.PROCESSED_STONE, VanillaBlockGroups.BRICK, VanillaBlockGroups.TILE,
-			VanillaBlockGroups.CRYSTAL
-		);
-		
-		ctx.makeArchExBlocks(BlockType.ROUND_ARCH,
-			VanillaBlockGroups.WOOD, VanillaBlockGroups.STONE, VanillaBlockGroups.AQUATIC_STONE,
-			VanillaBlockGroups.PROCESSED_STONE, VanillaBlockGroups.BRICK, VanillaBlockGroups.TILE,
-			VanillaBlockGroups.CRYSTAL
-		);
-		
-		ctx.makeArchExBlocks(BlockType.OCTAGONAL_COLUMN,
-			VanillaBlockGroups.WOOD, VanillaBlockGroups.STONE, VanillaBlockGroups.AQUATIC_STONE,
-			VanillaBlockGroups.PROCESSED_STONE, VanillaBlockGroups.BRICK, VanillaBlockGroups.TILE,
-			VanillaBlockGroups.CRYSTAL
-		);
-
-		ctx.makeArchExBlocks(BlockType.BEAM, VanillaBlockGroups.WOOD);
-		ctx.makeArchExBlocks(BlockType.FENCE_POST, VanillaBlockGroups.WOOD);
-		ctx.makeArchExBlocks(BlockType.JOIST, VanillaBlockGroups.WOOD);
-		ctx.makeArchExBlocks(BlockType.CROWN_MOLDING, VanillaBlockGroups.WOOD);
-		ctx.makeArchExBlocks(BlockType.POST_CAP, VanillaBlockGroups.WOOD);
-		ctx.makeArchExBlocks(BlockType.POST_LANTERN, VanillaBlockGroups.WOOD);
-		ctx.makeArchExBlocks(BlockType.ROD, BAMBOO_ROD, COPPER_ROD, IRON_ROD);
-		ctx.makeArchExBlocks(BlockType.LATTICE, VanillaBlockGroups.WOOD);
-		ctx.makeArchExBlocks(BlockType.TRANSOM, VanillaBlockGroups.WOOD);
-		
-		ctx.makeArchExBlocks(BlockType.TUBE_METAL, TUBE_METAL);
-		ctx.makeArchExBlocks(BlockType.I_BEAM, TUBE_METAL);
-		ctx.makeArchExBlocks(BlockType.H_BEAM, IRON_H_BEAM);
-	}
-
-	@Override
-	public void onBlockCreated(BlockGroup group, BlockType blockType, Block baseBlock, Block block) {
-		ItemGroupUtil.pull(ArchitectureExtensions.ITEM_GROUP, blockType, baseBlock, block.asItem());
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/api/ArchExIntegration.java b/src/main/java/io/github/debuggyteam/architecture_extensions/api/ArchExIntegration.java
deleted file mode 100644
index 81bc943..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/api/ArchExIntegration.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.api;
-
-import org.jetbrains.annotations.ApiStatus;
-
-import net.minecraft.block.Block;
-
-public interface ArchExIntegration {
-	final String ENTRYPOINT_KEY = "architecture_extensions";
-
-	/**
-	 * Called by Architecture Extensions when it's ready to create blocks on behalf of a mod.
-	 * @param ctx A Context object which can honor block creation requests
-	 */
-	void integrate(Context ctx);
-	
-	/**
-	 * Called by Architecture Extensions when it creates a block that was requested by this integration class. You can
-	 * use this function to add the new block to an ItemGroup, generate additional data, or emit diagnostic information.
-	 * @param group     The group the newly created block is in
-	 * @param blockType The type of block that was created
-	 * @param base      The "base" block defining the material that the new block was made from
-	 * @param created   The block that was created
-	 */
-	void onBlockCreated(BlockGroup group, BlockType blockType, Block base, Block created);
-
-	/**
-	 * Holds commands that Architecture Extensions makes available to mods for integration. At this point only block
-	 * creation is supported.
-	 */
-	@ApiStatus.NonExtendable
-	interface Context {
-		/**
-		 * Creates blocks of a particular BlockType and one or more BlockGroups
-		 * @param type   the type of block, for example BlockType.FENCE_POST
-		 * @param groups one or more BlockGroups to create blocks for.
-		 */
-		void makeArchExBlocks(BlockType type, BlockGroup... groups);
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/api/BlockGroup.java b/src/main/java/io/github/debuggyteam/architecture_extensions/api/BlockGroup.java
deleted file mode 100644
index ce802be..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/api/BlockGroup.java
+++ /dev/null
@@ -1,217 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.api;
-
-import java.lang.reflect.Field;
-import java.util.Iterator;
-import java.util.Optional;
-import java.util.Set;
-import java.util.function.Supplier;
-
-import com.google.common.collect.Sets;
-
-import io.github.debuggyteam.architecture_extensions.util.SafeRenderLayer;
-import net.minecraft.block.Block;
-import net.minecraft.block.Blocks;
-import net.minecraft.block.MapColor;
-import net.minecraft.registry.Registries;
-import net.minecraft.util.DyeColor;
-import net.minecraft.util.Identifier;
-
-public final class BlockGroup implements Iterable<BlockGroup.GroupedBlock> {
-	private final Set<BlockGroup.GroupedBlock> groupedBlocks;
-
-	private BlockGroup(Set<BlockGroup.GroupedBlock> groupedBlocks) {
-		this.groupedBlocks = groupedBlocks;
-	}
-
-	public static BlockGroup of(BlockGroup.GroupedBlock... groupedBlocks) {
-		if (groupedBlocks.length == 0) throw new IllegalArgumentException("BlockGroup.of requires at least one grouped block.");
-
-		// Use a linked hash set to make sure the ordering of blocks stays the same between launches for the item group
-		final Set<BlockGroup.GroupedBlock> set = Sets.newLinkedHashSet();
-		for (BlockGroup.GroupedBlock groupedBlock : groupedBlocks) { set.add(groupedBlock); };
-		return new BlockGroup(set);
-	}
-
-	@Override
-	public Iterator<BlockGroup.GroupedBlock> iterator() {
-		return groupedBlocks.iterator();
-	}
-
-	public record GroupedBlock(Identifier id, Identifier baseBlockId, Supplier<Block> baseBlock, TextureConfiguration textureConfiguration, RecipeConfigurator recipeConfigurator, Optional<MapColor> mapColor, SafeRenderLayer renderLayer) {
-		public GroupedBlock(Identifier id, Identifier baseBlockId, Supplier<Block> baseBlock, TextureConfiguration textureConfiguration, RecipeConfigurator recipeConfigurator, Optional<MapColor> mapColor) {
-			this(id, baseBlockId, baseBlock, textureConfiguration, recipeConfigurator, mapColor, SafeRenderLayer.SOLID);
-		}
-		
-		public GroupedBlock(String id, Identifier baseBlockId, Supplier<Block> baseBlock, TextureConfiguration textureConfiguration, RecipeConfigurator recipeConfigurator, MapColor mapColor) {
-			this(new Identifier(id), baseBlockId, baseBlock, textureConfiguration, recipeConfigurator, Optional.of(mapColor));
-		}
-		
-		public GroupedBlock(String id, Block baseBlock, TextureConfiguration textureConfiguration, RecipeConfigurator recipeConfigurator, MapColor mapColor) {
-			this(new Identifier(id), Registries.BLOCK.getId(baseBlock), ()->baseBlock, textureConfiguration, recipeConfigurator, Optional.of(mapColor));
-		}
-
-		public GroupedBlock(Identifier id, Identifier baseBlockId, Supplier<Block> baseBlock, TextureConfiguration textureConfiguration, RecipeConfigurator recipeConfigurator, MapColor mapColor) {
-			this(id, baseBlockId, baseBlock, textureConfiguration, recipeConfigurator, Optional.of(mapColor));
-		}
-
-		public GroupedBlock(String id, Identifier baseBlockId, Supplier<Block> baseBlock, TextureConfiguration textureConfiguration, RecipeConfigurator recipeConfigurator) {
-			this(new Identifier(id), baseBlockId, baseBlock, textureConfiguration, recipeConfigurator, Optional.empty());
-		}
-		
-		public GroupedBlock(String id, Block baseBlock, TextureConfiguration textureConfiguration, RecipeConfigurator recipeConfigurator) {
-			this(new Identifier(id), Registries.BLOCK.getId(baseBlock), ()->baseBlock, textureConfiguration, recipeConfigurator, Optional.empty());
-		}
-
-		public GroupedBlock(Identifier id, Identifier baseBlockId, Supplier<Block> baseBlock, TextureConfiguration textureConfiguration, RecipeConfigurator recipeConfigurator) {
-			this(id, baseBlockId, baseBlock, textureConfiguration, recipeConfigurator, Optional.empty());
-		}
-		
-		public static Builder builder() {
-			return new Builder();
-		}
-		
-		public static Builder builder(Identifier id) {
-			return new Builder(id);
-		}
-		
-		public static Builder builder(Block block) {
-			return new Builder(block);
-		}
-		
-		public static class Builder {
-			private Identifier id;
-			private Identifier baseBlockId;
-			private Supplier<Block> baseBlock;
-			private TextureConfiguration textures;
-			private RecipeConfigurator recipes = RecipeConfigurator.CREATIVE;
-			private Optional<MapColor> mapColor = Optional.empty();
-			private SafeRenderLayer renderLayer = SafeRenderLayer.SOLID;
-			
-			public Builder() {}
-			
-			public Builder(Identifier id) {
-				this.id = id;
-				this.baseBlockId = id;
-				Block maybeBlock = Registries.BLOCK.get(id);
-				if (maybeBlock != Blocks.AIR) baseBlock = () -> maybeBlock;
-			}
-			
-			public Builder(Block block) {
-				baseBlock = () -> block;
-				this.id = Registries.BLOCK.getId(block);
-				this.baseBlockId = this.id;
-			}
-			
-			public Builder id(Identifier id) {
-				this.id = id;
-				return this;
-			}
-			
-			public Builder baseBlockId(Identifier id) {
-				this.baseBlockId = id;
-				return this;
-			}
-			
-			public Builder baseBlock(Block block) {
-				this.baseBlock = () -> block;
-				return this;
-			}
-			
-			public Builder baseBlock(Supplier<Block> blockSupplier) {
-				this.baseBlock = blockSupplier;
-				return this;
-			}
-			
-			public Builder textures(String singleTexture) {
-				this.textures = TextureConfiguration.create(
-						(it) -> singleTexture,
-						(it) -> singleTexture,
-						(it) -> singleTexture,
-						(it) -> singleTexture);
-				return this;
-			}
-			
-			public Builder textures(TextureConfiguration config) {
-				this.textures = config;
-				return this;
-			}
-			
-			public Builder creativeOnly() {
-				this.recipes = RecipeConfigurator.CREATIVE;
-				return this;
-			}
-			
-			public Builder usesTablesaw() {
-				this.recipes = RecipeConfigurator.SAWING;
-				return this;
-			}
-			
-			public Builder usesStonecutter() {
-				this.recipes = RecipeConfigurator.STONECUTTER;
-				return this;
-			}
-			
-			public Builder usesCraftingTable() {
-				this.recipes = RecipeConfigurator.CRAFTING;
-				return this;
-			}
-			
-			public Builder recipes(RecipeConfigurator config) {
-				this.recipes = config;
-				return this;
-			}
-			
-			public Builder mapColor(DyeColor color) {
-				this.mapColor = Optional.of(color.getMapColor());
-				return this;
-			}
-			
-			public Builder mapColor(MapColor color) {
-				this.mapColor = Optional.of(color);
-				return this;
-			}
-			
-			public Builder noMapColor() {
-				this.mapColor = Optional.empty();
-				return this;
-			}
-			
-			public Builder renderSolid() {
-				this.renderLayer = SafeRenderLayer.SOLID;
-				return this;
-			}
-			
-			public Builder renderCutout() {
-				this.renderLayer = SafeRenderLayer.CUTOUT;
-				return this;
-			}
-			
-			public Builder renderTranslucent() {
-				this.renderLayer = SafeRenderLayer.TRANSLUCENT;
-				return this;
-			}
-			
-			public Builder renderLayer(SafeRenderLayer layer) {
-				this.renderLayer = layer;
-				return this;
-			}
-			
-			public GroupedBlock build() {
-				checkFilled();
-				return new GroupedBlock(id, baseBlockId, baseBlock, textures, recipes, mapColor, renderLayer);
-			}
-			
-			private void checkFilled() {
-				for(Field f : Builder.class.getDeclaredFields()) {
-					try {
-						if (f.get(this) == null) {
-							throw new IllegalArgumentException("Field '"+f.getName()+" must be set for this GroupedBlock.Builder to be complete.");
-						}
-					} catch (IllegalArgumentException | IllegalAccessException e) {
-						//Should be no access problems from here
-					}
-				}
-			}
-		}
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/api/BlockType.java b/src/main/java/io/github/debuggyteam/architecture_extensions/api/BlockType.java
deleted file mode 100644
index 9ee496b..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/api/BlockType.java
+++ /dev/null
@@ -1,126 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.api;
-
-import java.util.Locale;
-
-import io.github.debuggyteam.architecture_extensions.blocks.RoundArchBlock;
-import io.github.debuggyteam.architecture_extensions.blocks.CurveBlock;
-import io.github.debuggyteam.architecture_extensions.blocks.FacadeBlock;
-import io.github.debuggyteam.architecture_extensions.blocks.IBeamBlock;
-import io.github.debuggyteam.architecture_extensions.blocks.LatticeBlock;
-import io.github.debuggyteam.architecture_extensions.blocks.OctagonalColumnBlock;
-import io.github.debuggyteam.architecture_extensions.blocks.RoundFencePostBlock;
-import io.github.debuggyteam.architecture_extensions.blocks.TransomBlock;
-import io.github.debuggyteam.architecture_extensions.blocks.TubeSteelBlock;
-import io.github.debuggyteam.architecture_extensions.util.SafeRenderLayer;
-
-import org.apache.commons.lang3.function.TriFunction;
-import org.quiltmc.qsl.block.extensions.api.QuiltBlockSettings;
-import org.quiltmc.qsl.item.setting.api.QuiltItemSettings;
-
-import io.github.debuggyteam.architecture_extensions.ArchitectureExtensions;
-import io.github.debuggyteam.architecture_extensions.BlockCreationCallback;
-import io.github.debuggyteam.architecture_extensions.TypedGroupedBlockItem;
-import io.github.debuggyteam.architecture_extensions.blocks.ArchBlock;
-import io.github.debuggyteam.architecture_extensions.blocks.BeamBlock;
-import io.github.debuggyteam.architecture_extensions.blocks.WallColumnBlock;
-import io.github.debuggyteam.architecture_extensions.blocks.FencePostBlock;
-import io.github.debuggyteam.architecture_extensions.blocks.JoistBlock;
-import io.github.debuggyteam.architecture_extensions.blocks.CrownMoldingBlock;
-import io.github.debuggyteam.architecture_extensions.blocks.PostCapBlock;
-import io.github.debuggyteam.architecture_extensions.blocks.PostLanternBlock;
-import io.github.debuggyteam.architecture_extensions.blocks.ArchExRodBlock;
-import io.github.debuggyteam.architecture_extensions.blocks.RoofBlock;
-import io.github.debuggyteam.architecture_extensions.blocks.WallPostBlock;
-import net.fabricmc.fabric.api.registry.LandPathNodeTypesRegistry;
-import net.minecraft.block.Block;
-import net.minecraft.entity.ai.pathing.PathNodeType;
-import net.minecraft.registry.Registries;
-import net.minecraft.registry.Registry;
-import net.minecraft.util.Identifier;
-
-public enum BlockType {
-	ARCH         (ArchBlock::new,        2.5f, variantsOf("", "inner", "outer"), SafeRenderLayer.SOLID),
-	BEAM         (BeamBlock::new,        1.5f),
-	CURVE   (CurveBlock::new,   1.5f),
-	H_BEAM       (BeamBlock::new,        8.0f),
-	WALL_COLUMN  (WallColumnBlock::new,  2.5f, variantsOf("", "cap"), SafeRenderLayer.SOLID),
-	FENCE_POST   (FencePostBlock::new,   1.5f),
-	JOIST        (JoistBlock::new,       1.5f),
-	CROWN_MOLDING(CrownMoldingBlock::new,1.5f, variantsOf("", "inner", "outer"), SafeRenderLayer.SOLID),
-	POST_CAP     (PostCapBlock::new,     1.5f),
-	POST_LANTERN (PostLanternBlock::new, 1.5f, variantsOf("", "hanging"), SafeRenderLayer.SOLID),
-	ROD          (ArchExRodBlock::new,   1.0f),
-	ROOF         (RoofBlock::new,        2.5f, variantsOf("", "inner", "outer"), SafeRenderLayer.SOLID),
-	WALL_POST    (WallPostBlock::new,    2.5f),
-	LATTICE      (LatticeBlock::new,     1.5f),
-	FACADE       (FacadeBlock::new,      1.5f),
-	TUBE_METAL   (TubeSteelBlock::new,   8.0f),
-	I_BEAM       (IBeamBlock::new,       8.0f),
-	TRANSOM      (TransomBlock::new,     1.5f, noVariants(), SafeRenderLayer.TRANSLUCENT),
-	OCTAGONAL_COLUMN(OctagonalColumnBlock::new, 1.5f, variantsOf("", "cap", "double_cap"), SafeRenderLayer.SOLID),
-	ROUND_ARCH   (RoundArchBlock::new,   1.5f),
-	ROUND_FENCE_POST(RoundFencePostBlock::new,  1.5f);
-	
-	private final TriFunction<Block, QuiltBlockSettings, TypedGroupedBlock, Block> creator;
-	private final float strength;
-	private final String[] variants;
-	private final SafeRenderLayer renderLayer;
-
-	BlockType(TriFunction<Block, QuiltBlockSettings, TypedGroupedBlock, Block> creator, float strength, String[] variants, SafeRenderLayer renderLayer) {
-		this.creator = creator;
-		this.strength = strength;
-		this.variants = variants;
-		this.renderLayer = renderLayer;
-	}
-	
-	/**
-	 * Makes a BlockType with no variants and solid RenderLayer
-	 * @see #BlockType(TriFunction, float, String[], SafeRenderLayer)
-	 */
-	BlockType(TriFunction<Block, QuiltBlockSettings, TypedGroupedBlock, Block> creator, float strength) {
-		this(creator, strength, noVariants(), SafeRenderLayer.SOLID);
-	}
-
-	public String[] variants() {
-		return variants;
-	}
-
-	public SafeRenderLayer renderLayer() {
-		return renderLayer;
-	}
-
-	@Override
-	public String toString() {
-		return name().toLowerCase(Locale.ROOT);
-	}
-
-	public TypedGroupedBlock register(BlockGroup group, BlockGroup.GroupedBlock groupedBlock, BlockCreationCallback callback, String modId) {
-		// Note: the mod id parameter isn't used here by purpose, that parameter is there so we can easily debug where registration is coming from.
-		Identifier id = new Identifier(ArchitectureExtensions.MOD_CONTAINER.metadata().id(), String.format("%s/%s", groupedBlock.id().getNamespace(), groupedBlock.id().getPath() + "_" + this));
-		var baseBlock = groupedBlock.baseBlock().get();
-
-		var blockSettings = QuiltBlockSettings.copyOf(baseBlock).strength(strength);
-		groupedBlock.mapColor().map(blockSettings::mapColor);
-		var typedGroupedBlock = new TypedGroupedBlock(this, groupedBlock, id);
-		var block = Registry.register(Registries.BLOCK, id, creator.apply(baseBlock, blockSettings, typedGroupedBlock));
-		
-		Registry.register(Registries.ITEM, id, new TypedGroupedBlockItem(block, typedGroupedBlock, new QuiltItemSettings()));
-
-		// So mobs don't get stuck on arch-ex blocks, and lag the server trying to path-find through them
-		// Required since that is the default for non full blocks
-		LandPathNodeTypesRegistry.register(block, PathNodeType.BLOCKED, PathNodeType.BLOCKED);
-		if (callback != null) callback.onBlockCreated(group, this, baseBlock, block);
-
-		return typedGroupedBlock;
-	}
-
-	private static final String[] noVariants() {
-		return new String[] {""};
-	}
-
-	private static final String[] variantsOf(String... variants) {
-		return variants;
-	}
-
-	public static record TypedGroupedBlock(BlockType type, BlockGroup.GroupedBlock groupedBlock, Identifier id) {}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/api/MetaBlockType.java b/src/main/java/io/github/debuggyteam/architecture_extensions/api/MetaBlockType.java
deleted file mode 100644
index 6636098..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/api/MetaBlockType.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.api;
-
-public enum MetaBlockType {
-	WOOD(
-			BlockType.FACADE, BlockType.ROUND_FENCE_POST, BlockType.ROUND_ARCH, BlockType.CURVE, BlockType.OCTAGONAL_COLUMN,
-			BlockType.BEAM, BlockType.FENCE_POST, BlockType.JOIST, BlockType.CROWN_MOLDING, BlockType.POST_CAP,
-			BlockType.POST_LANTERN, BlockType.LATTICE, BlockType.TRANSOM
-			),
-	STONE(
-			BlockType.ARCH, BlockType.WALL_COLUMN, BlockType.ROOF, BlockType.WALL_POST, BlockType.FACADE,
-			BlockType.ROUND_FENCE_POST, BlockType.ROUND_ARCH, BlockType.CURVE, BlockType.OCTAGONAL_COLUMN
-			),
-	AQUATIC_STONE(
-			BlockType.ARCH, BlockType.WALL_COLUMN, BlockType.WALL_POST, BlockType.FACADE, BlockType.ROUND_FENCE_POST,
-			BlockType.ROUND_ARCH, BlockType.CURVE, BlockType.OCTAGONAL_COLUMN
-			),
-	PROCESSED_STONE(
-			BlockType.ARCH, BlockType.WALL_COLUMN, BlockType.ROOF, BlockType.WALL_POST, BlockType.FACADE,
-			BlockType.ROUND_FENCE_POST, BlockType.ROUND_ARCH, BlockType.CURVE, BlockType.OCTAGONAL_COLUMN
-			),
-	BRICK(
-			BlockType.ARCH, BlockType.WALL_COLUMN, BlockType.ROOF, BlockType.WALL_POST, BlockType.FACADE,
-			BlockType.ROUND_FENCE_POST, BlockType.ROUND_ARCH, BlockType.CURVE, BlockType.OCTAGONAL_COLUMN
-			),
-	TILE(
-			BlockType.ARCH, BlockType.WALL_COLUMN, BlockType.ROOF, BlockType.WALL_POST, BlockType.FACADE,
-			BlockType.ROUND_FENCE_POST, BlockType.ROUND_ARCH, BlockType.CURVE, BlockType.OCTAGONAL_COLUMN
-			),
-	CRYSTAL(
-			BlockType.ARCH, BlockType.WALL_COLUMN, BlockType.ROOF, BlockType.WALL_POST, BlockType.FACADE,
-			BlockType.ROUND_FENCE_POST, BlockType.ROUND_ARCH, BlockType.CURVE, BlockType.OCTAGONAL_COLUMN
-			),
-	TERRACOTTA(BlockType.FACADE),
-	CONCRETE(BlockType.FACADE),
-	METAL(
-			BlockType.ROD, BlockType.FACADE, BlockType.I_BEAM, BlockType.TUBE_METAL
-			)
-	;
-	
-	private final BlockType[] blockTypes;
-	
-	MetaBlockType(BlockType...blockTypes) {
-		this.blockTypes = blockTypes;
-	}
-	
-	public BlockType[] blockTypes() {
-		return this.blockTypes;
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/api/RecipeConfigurator.java b/src/main/java/io/github/debuggyteam/architecture_extensions/api/RecipeConfigurator.java
deleted file mode 100644
index 8b9f02f..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/api/RecipeConfigurator.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.api;
-
-import java.util.function.BiConsumer;
-import java.util.function.Consumer;
-
-import org.quiltmc.loader.api.QuiltLoader;
-
-public interface RecipeConfigurator extends BiConsumer<BlockType, Consumer<RecipeConfigurator.RecipeTemplate>> {
-	static RecipeConfigurator simple(String id) {
-		return (type, templateConsumer) -> templateConsumer.accept(new RecipeTemplate(id, true, false));
-	}
-
-	static final RecipeConfigurator STONECUTTER = (type, templateConsumer) -> {
-		switch (type) {
-			case FENCE_POST:
-				RecipeConfigurator.CRAFTING.accept(type, templateConsumer);
-				templateConsumer.accept(new RecipeTemplate("stonecutting", false));
-				break;
-			case WALL_POST:
-				RecipeConfigurator.CRAFTING.accept(type, templateConsumer);
-				templateConsumer.accept(new RecipeTemplate("stonecutting", false));
-				break;
-			default:
-				templateConsumer.accept(new RecipeTemplate("stonecutting", false));
-				break;
-		}
-	};
-
-	static final RecipeConfigurator SAWING = (type, templateConsumer) -> {
-		if (!QuiltLoader.isModLoaded("tablesaw")) {
-			RecipeConfigurator.STONECUTTER.accept(type, templateConsumer);
-			return;
-		}
-
-		switch (type) {
-			case FENCE_POST:
-				RecipeConfigurator.CRAFTING.accept(type, templateConsumer);
-			default:
-				templateConsumer.accept(new RecipeTemplate("sawing", true));
-				break;
-		}
-	};
-
-	static final RecipeConfigurator CRAFTING = (type, templateConsumer) -> {
-		switch (type) {
-			case FENCE_POST:
-				templateConsumer.accept(new RecipeTemplate("fence_to_post", false));
-				templateConsumer.accept(new RecipeTemplate("post_to_fence", false));
-				break;
-			case WALL_POST:
-				templateConsumer.accept(new RecipeTemplate("wall_to_post", false));
-				templateConsumer.accept(new RecipeTemplate("post_to_wall", false));
-				break;
-			case H_BEAM:
-				templateConsumer.accept(new RecipeTemplate("h_beam", false));
-				break;
-			case I_BEAM:
-				templateConsumer.accept(new RecipeTemplate("i_beam", false));
-				break;
-			case TUBE_METAL:
-				templateConsumer.accept(new RecipeTemplate("tube_metal", false));
-				break;
-			default:
-				break;
-		}
-	};
-	
-	static final RecipeConfigurator CREATIVE = (type, templateConsumer) -> {};
-
-	static record RecipeTemplate(String id, boolean simple, boolean tablesaw) {
-		RecipeTemplate(String id, boolean tablesaw) {
-			this(id, false, tablesaw);
-		}
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/api/TextureConfiguration.java b/src/main/java/io/github/debuggyteam/architecture_extensions/api/TextureConfiguration.java
deleted file mode 100644
index 58f5205..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/api/TextureConfiguration.java
+++ /dev/null
@@ -1,131 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.api;
-
-import java.util.function.BiFunction;
-import java.util.function.Function;
-
-import net.minecraft.util.Identifier;
-
-public interface TextureConfiguration extends BiFunction<BlockType, String, String> {
-	public static final String[] TEXTURE_IDS = new String[]{"texture", "texture_side", "texture_up", "texture_down"};
-
-	static final Function<Identifier, TextureConfiguration> WOOD_WITH_LOG = woodId -> create(
-		blockType -> {
-			return switch (blockType) {
-				case JOIST, OCTAGONAL_COLUMN -> new Identifier(woodId.getNamespace(), "block/" + "stripped_" + woodId.getPath() + "_log").toString();
-				default -> new Identifier(woodId.getNamespace(), "block/" + woodId.getPath() + "_planks").toString();
-			};
-		},
-		blockType -> {
-			return switch (blockType) {
-				case BEAM -> new Identifier(woodId.getNamespace(), "block/" + "stripped_" + woodId.getPath() + "_log").toString();
-				default -> new Identifier(woodId.getNamespace(), "block/" + woodId.getPath() + "_planks").toString();
-			};
-		},
-		blockType -> {
-			return switch (blockType) {
-				case BEAM -> new Identifier(woodId.getNamespace(), "block/" + "stripped_" + woodId.getPath() + "_log_top").toString();
-				default -> new Identifier(woodId.getNamespace(), "block/" + woodId.getPath() + "_planks").toString();
-			};
-		},
-		blockType -> {
-			return switch (blockType) {
-				case BEAM -> new Identifier(woodId.getNamespace(), "block/" + "stripped_" + woodId.getPath() + "_log_top").toString();
-				default -> new Identifier(woodId.getNamespace(), "block/" + woodId.getPath() + "_planks").toString();
-			};
-		}
-	);
-
-	static final Function<Identifier, TextureConfiguration> WOOD_WITH_STEM = woodId -> create(
-		blockType -> {
-			return switch (blockType) {
-				case JOIST, OCTAGONAL_COLUMN -> new Identifier(woodId.getNamespace(), "block/" + "stripped_" + woodId.getPath() + "_stem").toString();
-				default -> new Identifier(woodId.getNamespace(), "block/" + woodId.getPath() + "_planks").toString();
-			};
-		},
-		blockType -> {
-			return switch (blockType) {
-				case BEAM -> new Identifier(woodId.getNamespace(), "block/" + "stripped_" + woodId.getPath() + "_stem").toString();
-				default -> new Identifier(woodId.getNamespace(), "block/" + woodId.getPath() + "_planks").toString();
-			};
-		},
-		blockType -> {
-			return switch (blockType) {
-				case BEAM -> new Identifier(woodId.getNamespace(), "block/" + "stripped_" + woodId.getPath() + "_stem_top").toString();
-				default -> new Identifier(woodId.getNamespace(), "block/" + woodId.getPath() + "_planks").toString();
-			};
-		},
-		blockType -> {
-			return switch (blockType) {
-				case BEAM -> new Identifier(woodId.getNamespace(), "block/" + "stripped_" + woodId.getPath() + "_stem_top").toString();
-				default -> new Identifier(woodId.getNamespace(), "block/" + woodId.getPath() + "_planks").toString();
-			};
-		}
-	);
-
-	static final Function<Identifier, TextureConfiguration> SIDED = id -> create(
-		blockType -> new Identifier(id.getNamespace(), "block/" + id.getPath() + "_top").toString(),
-		blockType -> {
-			return new Identifier(id.getNamespace(), "block/" + id.getPath() + "_side").toString();
-		},
-		blockType -> {
-			return new Identifier(id.getNamespace(), "block/" + id.getPath() + "_top").toString();
-		},
-		blockType -> {
-			return new Identifier(id.getNamespace(), "block/" + id.getPath() + "_bottom").toString();
-		}
-	);
-
-	static final Function<Identifier, TextureConfiguration> TOP = id -> create(
-		blockType -> new Identifier(id.getNamespace(), "block/" + id.getPath()).toString(),
-		blockType -> {
-			return new Identifier(id.getNamespace(), "block/" + id.getPath()).toString();
-		},
-		blockType -> {
-			return new Identifier(id.getNamespace(), "block/" + id.getPath() + "_top").toString();
-		},
-		blockType -> {
-			return new Identifier(id.getNamespace(), "block/" + id.getPath()).toString();
-		}
-	);
-	
-	static final Function<Identifier, TextureConfiguration> END = id -> create(
-		blockType -> new Identifier(id.getNamespace(), "block/" + id.getPath()).toString(),
-		blockType -> {
-			return new Identifier(id.getNamespace(), "block/" + id.getPath()).toString();
-		},
-		blockType -> {
-			return new Identifier(id.getNamespace(), "block/" + id.getPath() + "_end").toString();
-		},
-		blockType -> {
-			return new Identifier(id.getNamespace(), "block/" + id.getPath()).toString();
-		}
-	);
-
-	static final Function<Identifier, TextureConfiguration> TOP_BOTTOM = id -> create(
-		blockType -> new Identifier(id.getNamespace(), "block/" + id.getPath()).toString(),
-		blockType -> {
-			return new Identifier(id.getNamespace(), "block/" + id.getPath()).toString();
-		},
-		blockType -> {
-			return new Identifier(id.getNamespace(), "block/" + id.getPath() + "_top").toString();
-		},
-		blockType -> {
-			return new Identifier(id.getNamespace(), "block/" + id.getPath() + "_bottom").toString();
-		}
-	);
-	
-	static final Function<Identifier, TextureConfiguration> ALL = it -> (type, textureId) -> new Identifier(it.getNamespace(), "block/" + it.getPath()).toString();
-
-	static TextureConfiguration create(Function<BlockType, String> base,
-								 Function<BlockType, String> side,
-								 Function<BlockType, String> up, Function<BlockType, String> down) {
-		return (type, textureId) -> {
-			return switch (textureId) {
-				case "texture_side" -> side.apply(type);
-				case "texture_up" -> up.apply(type);
-				case "texture_down" -> down.apply(type);
-				default -> base.apply(type);
-			};
-		};
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/ArchBlock.java b/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/ArchBlock.java
deleted file mode 100644
index d16dd8b..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/ArchBlock.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.blocks;
-
-import org.quiltmc.qsl.block.extensions.api.QuiltBlockSettings;
-
-import io.github.debuggyteam.architecture_extensions.api.BlockType.TypedGroupedBlock;
-import net.minecraft.block.Block;
-import net.minecraft.block.BlockState;
-import net.minecraft.block.StairsBlock;
-import net.minecraft.text.MutableText;
-
-public class ArchBlock extends StairsBlock implements TypedGrouped {
-	protected final TypedGroupedBlock typedGroupedBlock;
-	
-	// This is a super class of settings.
-	public ArchBlock(BlockState blockState, Settings settings, TypedGroupedBlock typedGroupedBlock) {
-		super(blockState, settings);
-		this.typedGroupedBlock = typedGroupedBlock;
-	}
-	
-	public ArchBlock(Block block, QuiltBlockSettings settings, TypedGroupedBlock typedGroupedBlock) {
-		this(block.getDefaultState(), settings, typedGroupedBlock);
-	}
-
-	@Override
-	public TypedGroupedBlock getTypedGroupedBlock() {
-		return typedGroupedBlock;
-	}
-	
-	@Override
-	public MutableText getName() {
-		return getServerTranslation();
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/ArchExRodBlock.java b/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/ArchExRodBlock.java
deleted file mode 100644
index b48ea48..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/ArchExRodBlock.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.blocks;
-
-import com.mojang.serialization.MapCodec;
-import io.github.debuggyteam.architecture_extensions.api.BlockType.TypedGroupedBlock;
-import net.minecraft.block.Block;
-import net.minecraft.block.BlockState;
-import net.minecraft.block.RodBlock;
-import net.minecraft.block.Waterloggable;
-import net.minecraft.fluid.FluidState;
-import net.minecraft.fluid.Fluids;
-import net.minecraft.item.ItemPlacementContext;
-import net.minecraft.state.StateManager;
-import net.minecraft.state.property.BooleanProperty;
-import net.minecraft.state.property.Properties;
-import net.minecraft.text.MutableText;
-import net.minecraft.util.math.BlockPos;
-import net.minecraft.util.math.Direction;
-import net.minecraft.world.WorldAccess;
-
-public class ArchExRodBlock extends RodBlock implements Waterloggable, TypedGrouped {
-	public static final BooleanProperty WATERLOGGED = Properties.WATERLOGGED;
-	protected final TypedGroupedBlock typedGroupedBlock;
-
-	public ArchExRodBlock(Settings settings, TypedGroupedBlock typedGroupedBlock) {
-		super(settings);
-		this.setDefaultState(this.getDefaultState().with(FACING, Direction.UP).with(WATERLOGGED, false)); // Thanks LambdAurora!
-		this.typedGroupedBlock = typedGroupedBlock;
-	}
-	
-	public ArchExRodBlock(Block baseBlock, Settings settings, TypedGroupedBlock typedGroupedBlock) {
-		this(settings, typedGroupedBlock);
-	}
-
-	@Override
-	public BlockState getPlacementState(ItemPlacementContext ctx) {
-		Direction dir = ctx.getSide();
-		BlockState blockState = ctx.getWorld().getBlockState(ctx.getBlockPos().offset(dir.getOpposite()));
-		return blockState.isOf(this) && blockState.get(FACING) == dir
-				? this.getDefaultState().with(FACING, dir.getOpposite()).with(WATERLOGGED, ctx.getWorld().getFluidState(ctx.getBlockPos()).getFluid() == Fluids.WATER)
-				: this.getDefaultState().with(FACING, dir).with(WATERLOGGED, ctx.getWorld().getFluidState(ctx.getBlockPos()).getFluid() == Fluids.WATER);
-	}
-
-	// Deals with block waterlogging. Thanks acikek!
-	@Override
-	public FluidState getFluidState(BlockState state) {
-		return state.get(WATERLOGGED) ? Fluids.WATER.getStill(false) : Fluids.EMPTY.getDefaultState();
-	}
-
-	@Override
-	public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) {
-		if (state.get(WATERLOGGED)) world.scheduleFluidTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world));
-
-		return state;
-	}
-
-	@Override
-	protected void appendProperties(StateManager.Builder<Block, BlockState> builder) {
-		builder.add(FACING, WATERLOGGED);
-	}
-
-	@Override
-	public TypedGroupedBlock getTypedGroupedBlock() {
-		return typedGroupedBlock;
-	}
-	
-	@Override
-	public MutableText getName() {
-		return getServerTranslation();
-	}
-	
-	@Override
-	protected MapCodec<? extends RodBlock> getCodec() {
-		return null;
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/BeamBlock.java b/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/BeamBlock.java
deleted file mode 100644
index 381c834..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/BeamBlock.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.blocks;
-
-import io.github.debuggyteam.architecture_extensions.api.BlockType.TypedGroupedBlock;
-import net.minecraft.block.*;
-import net.minecraft.fluid.FluidState;
-import net.minecraft.fluid.Fluids;
-import net.minecraft.item.ItemPlacementContext;
-import net.minecraft.state.StateManager;
-import net.minecraft.state.property.BooleanProperty;
-import net.minecraft.state.property.Properties;
-import net.minecraft.text.MutableText;
-import net.minecraft.util.BlockRotation;
-import net.minecraft.util.math.BlockPos;
-import net.minecraft.util.math.Direction;
-import net.minecraft.util.shape.VoxelShape;
-import net.minecraft.world.BlockView;
-import net.minecraft.world.WorldAccess;
-
-public class BeamBlock extends PillarBlock implements Waterloggable, TypedGrouped {
-	public static final BooleanProperty WATERLOGGED = Properties.WATERLOGGED;
-
-	protected static final VoxelShape X_AXIS_BOX = Block.createCuboidShape(0.0, 2.0, 2.0, 16.0, 14.0, 14.0);
-	protected static final VoxelShape Y_AXIS_BOX = Block.createCuboidShape(2.0, 0.0, 2.0, 14.0, 16.0, 14.0);
-	protected static final VoxelShape Z_AXIS_BOX = Block.createCuboidShape(2.0, 2.0, 0.0, 14.0, 14.0, 16.0);
-	
-	protected final TypedGroupedBlock typedGroupedBlock;
-
-	public BeamBlock(Block baseBlock, Settings settings, TypedGroupedBlock typedGroupedBlock) {
-		this(settings, typedGroupedBlock);
-	}
-	
-	public BeamBlock(Settings settings, TypedGroupedBlock typedGroupedBlock) {
-		super(settings);
-		this.setDefaultState(this.getDefaultState().with(AXIS, Direction.Axis.Y).with(WATERLOGGED, false)); // Thanks LambdAurora!
-		this.typedGroupedBlock = typedGroupedBlock;
-	}
-
-	// The following deals with block rotation
-	@Override
-	public BlockState rotate(BlockState state, BlockRotation rotation)  {
-		return changeRotation(state, rotation);
-	}
-
-	public static BlockState changeRotation(BlockState state, BlockRotation rotation) {
-		return switch (rotation) {
-			case COUNTERCLOCKWISE_90, CLOCKWISE_90 -> switch (state.get(AXIS)) {
-				case X -> state.with(AXIS, Direction.Axis.Z);
-				case Z -> state.with(AXIS, Direction.Axis.X);
-				default -> state;
-			};
-			default -> state;
-		};
-	}
-
-	// Both of the following blocks of code below deals with block collision.
-	@Override
-	public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) {
-		Direction.Axis cardinalDir = state.get(AXIS);
-		return switch (cardinalDir) {
-			case X -> X_AXIS_BOX;
-			case Y -> Y_AXIS_BOX;
-			case Z -> Z_AXIS_BOX;
-		};
-	}
-
-	// Deals with placing the block properly in accordance to direction.
-	@Override
-	public BlockState getPlacementState(ItemPlacementContext context) {
-		return this.getDefaultState().with(AXIS, context.getSide().getAxis()).with(WATERLOGGED, context.getWorld().getFluidState(context.getBlockPos()).getFluid() == Fluids.WATER);
-	}
-
-	// Deals with block waterlogging. Thanks acikek!
-	@Override
-	public FluidState getFluidState(BlockState state) {
-		return state.get(WATERLOGGED) ? Fluids.WATER.getStill(false) : Fluids.EMPTY.getDefaultState();
-	}
-
-	@Override
-	public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) {
-		if (state.get(WATERLOGGED)) world.scheduleFluidTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world));
-
-		return state;
-	}
-
-	@Override
-	protected void appendProperties(StateManager.Builder<Block, BlockState> builder) {
-		builder.add(AXIS, WATERLOGGED);
-	}
-
-	@Override
-	public TypedGroupedBlock getTypedGroupedBlock() {
-		return typedGroupedBlock;
-	}
-	
-	@Override
-	public MutableText getName() {
-		return getServerTranslation();
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/CrownMoldingBlock.java b/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/CrownMoldingBlock.java
deleted file mode 100644
index 8606fa1..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/CrownMoldingBlock.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.blocks;
-
-import io.github.debuggyteam.architecture_extensions.api.BlockType.TypedGroupedBlock;
-import net.minecraft.block.Block;
-import net.minecraft.block.BlockState;
-import net.minecraft.block.ShapeContext;
-import net.minecraft.block.StairsBlock;
-import net.minecraft.block.enums.BlockHalf;
-import net.minecraft.block.enums.StairShape;
-import net.minecraft.text.MutableText;
-import net.minecraft.util.function.BooleanBiFunction;
-import net.minecraft.util.math.BlockPos;
-import net.minecraft.util.math.Direction;
-import net.minecraft.util.shape.VoxelShape;
-import net.minecraft.util.shape.VoxelShapes;
-import net.minecraft.world.BlockView;
-
-public class CrownMoldingBlock extends StairsBlock implements TypedGrouped {
-	/*
-	NE -> Northeast
-	NW -> Northwest
-	SE -> Southeast
-	SW -> Southwest
-	 */
-	protected static final VoxelShape NORTH_BOX_TOP = Block.createCuboidShape(0.0, 8.0, 0.0, 16.0, 16.0, 8.0);
-	protected static final VoxelShape SOUTH_BOX_TOP = Block.createCuboidShape(0.0, 8.0, 8.0, 16.0, 16.0, 16.0);
-	protected static final VoxelShape EAST_BOX_TOP = Block.createCuboidShape(8.0, 8.0, 0.0, 16.0, 16.0, 16.0);
-	protected static final VoxelShape WEST_BOX_TOP = Block.createCuboidShape(0.0, 8.0, 0.0, 8.0, 16.0, 16.0);
-
-	protected static final VoxelShape NORTH_BOX_BOTTOM = Block.createCuboidShape(0.0, 0.0, 0.0, 16.0, 8.0, 8.0);
-	protected static final VoxelShape SOUTH_BOX_BOTTOM = Block.createCuboidShape(0.0, 0.0, 8.0, 16.0, 8.0, 16.0);
-	protected static final VoxelShape EAST_BOX_BOTTOM = Block.createCuboidShape(8.0, 0.0, 0.0, 16.0, 8.0, 16.0);
-	protected static final VoxelShape WEST_BOX_BOTTOM = Block.createCuboidShape(0.0, 0.0, 0.0, 8.0, 8.0, 16.0);
-	
-	protected final TypedGroupedBlock typedGroupedBlock;
-
-	private VoxelShape getStraightShapeFor(BlockHalf upOrDown, Direction cardinalDir) {
-		return switch (upOrDown) {
-			case TOP -> switch (cardinalDir) {
-				case NORTH -> NORTH_BOX_TOP;
-				case SOUTH -> SOUTH_BOX_TOP;
-				case EAST -> EAST_BOX_TOP;
-				case WEST -> WEST_BOX_TOP;
-				default -> VoxelShapes.fullCube();
-			};
-			case BOTTOM -> switch (cardinalDir) {
-				case NORTH -> NORTH_BOX_BOTTOM;
-				case SOUTH -> SOUTH_BOX_BOTTOM;
-				case EAST -> EAST_BOX_BOTTOM;
-				case WEST -> WEST_BOX_BOTTOM;
-				default -> VoxelShapes.fullCube();
-			};
-			//throw new IllegalStateException("Unexpected value: " + upOrDown);
-		};
-	}
-
-	public CrownMoldingBlock(BlockState blockState, Settings settings, TypedGroupedBlock typedGroupedBlock) {
-		super(blockState, settings);
-		this.typedGroupedBlock = typedGroupedBlock;
-	}
-	
-	public CrownMoldingBlock(Block baseBlock, Settings settings, TypedGroupedBlock typedGroupedBlock) {
-		this(baseBlock.getDefaultState(), settings, typedGroupedBlock);
-	}
-
-	// Both of the following blocks of code below deals with block collision.
-	@Override
-	public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) {
-		Direction cardinalDir = state.get(FACING);
-		BlockHalf upOrDown = state.get(HALF);
-		StairShape moldingShape = state.get(SHAPE);
-
-		var straightShape = this.getStraightShapeFor(upOrDown, cardinalDir);
-
-		final VoxelShape INNER_CORNER = VoxelShapes.union(straightShape, this.getStraightShapeFor(upOrDown, cardinalDir.rotateYCounterclockwise()));
-		final VoxelShape OUTER_CORNER = VoxelShapes.combineAndSimplify(straightShape, this.getStraightShapeFor(upOrDown, cardinalDir.rotateYCounterclockwise()), BooleanBiFunction.AND);
-		final VoxelShape A_DEFAULT_CORNER = VoxelShapes.combineAndSimplify(straightShape, this.getStraightShapeFor(upOrDown, cardinalDir.rotateYClockwise()), BooleanBiFunction.AND);
-
-		return switch (moldingShape) {
-			case STRAIGHT -> straightShape;
-			case INNER_LEFT -> INNER_CORNER;
-			case OUTER_LEFT -> OUTER_CORNER;
-			default -> A_DEFAULT_CORNER;
-		};
-	}
-
-	@Override
-	public TypedGroupedBlock getTypedGroupedBlock() {
-		return typedGroupedBlock;
-	}
-	
-	@Override
-	public MutableText getName() {
-		return getServerTranslation();
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/CurveBlock.java b/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/CurveBlock.java
deleted file mode 100644
index b1de383..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/CurveBlock.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.blocks;
-
-import com.mojang.serialization.MapCodec;
-import io.github.debuggyteam.architecture_extensions.api.BlockType.TypedGroupedBlock;
-import net.minecraft.block.Block;
-import net.minecraft.block.BlockState;
-import net.minecraft.block.HorizontalFacingBlock;
-import net.minecraft.block.enums.BlockHalf;
-import net.minecraft.item.ItemPlacementContext;
-import net.minecraft.state.StateManager;
-import net.minecraft.state.property.DirectionProperty;
-import net.minecraft.state.property.EnumProperty;
-import net.minecraft.state.property.Properties;
-import net.minecraft.text.MutableText;
-import net.minecraft.util.math.BlockPos;
-import net.minecraft.util.shape.VoxelShape;
-import net.minecraft.util.shape.VoxelShapes;
-import net.minecraft.world.BlockView;
-import org.quiltmc.qsl.block.extensions.api.QuiltBlockSettings;
-
-public class CurveBlock extends HorizontalFacingBlock implements TypedGrouped {
-	public static final DirectionProperty FACING = HorizontalFacingBlock.FACING;
-	public static final EnumProperty<BlockHalf> HALF = Properties.BLOCK_HALF;
-	
-	protected final TypedGroupedBlock typedGroupedBlock;
-	
-	protected static final VoxelShape SHAPE_TOP = Block.createCuboidShape(0.0, 8.0, 0.0, 16.0, 16.0, 16.0);
-	protected static final VoxelShape SHAPE_BOTTOM = Block.createCuboidShape(0.0, 0.0, 0.0, 16.0, 8.0, 16.0);
-	
-	public CurveBlock(Block baseBlock, QuiltBlockSettings settings, TypedGroupedBlock typedGroupedBlock) {
-		super(settings);
-		this.typedGroupedBlock = typedGroupedBlock;
-	}
-	
-	@Override
-	public BlockState getPlacementState(ItemPlacementContext context) {
-		// Thanks Falkreon
-		BlockHalf half = switch(context.getSide()) {
-			case UP -> BlockHalf.BOTTOM;
-			case DOWN -> BlockHalf.TOP;
-			default -> {
-				double sideHitHeight = context.getHitPos().getY() - context.getBlockPos().getY();
-				if (sideHitHeight > 0.5) {
-					yield BlockHalf.TOP;
-				} else {
-					yield BlockHalf.BOTTOM;
-				}
-			}
-		};
-		
-		return this.getDefaultState().with(FACING, context.getPlayerFacing()).with(HALF, half);
-	}
-	
-	@Override
-	protected void appendProperties(StateManager.Builder<Block, BlockState> builder) {
-		super.appendProperties(builder);
-		builder.add(FACING, HALF);
-	}
-	
-	@Override
-	public VoxelShape getCullingShape(BlockState state, BlockView world, BlockPos pos) {
-		return VoxelShapes.empty();
-	}
-
-	@Override
-	public TypedGroupedBlock getTypedGroupedBlock() {
-		return typedGroupedBlock;
-	}
-	
-	@Override
-	public MutableText getName() {
-		return getServerTranslation();
-	}
-	
-	@Override
-	protected MapCodec<? extends HorizontalFacingBlock> getCodec() {
-		return null;
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/FacadeBlock.java b/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/FacadeBlock.java
deleted file mode 100644
index a8d17e8..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/FacadeBlock.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.blocks;
-
-import com.mojang.serialization.MapCodec;
-import io.github.debuggyteam.architecture_extensions.api.BlockType.TypedGroupedBlock;
-import net.minecraft.block.AbstractLichenBlock;
-import net.minecraft.block.Block;
-import net.minecraft.block.BlockState;
-import net.minecraft.block.LichenSpreadBehavior;
-import net.minecraft.block.ShapeContext;
-import net.minecraft.fluid.FluidState;
-import net.minecraft.fluid.Fluids;
-import net.minecraft.item.ItemPlacementContext;
-import net.minecraft.state.StateManager;
-import net.minecraft.state.property.BooleanProperty;
-import net.minecraft.state.property.Properties;
-import net.minecraft.text.MutableText;
-import net.minecraft.util.math.BlockPos;
-import net.minecraft.util.math.Direction;
-import net.minecraft.util.shape.VoxelShape;
-import net.minecraft.util.shape.VoxelShapes;
-import net.minecraft.world.BlockView;
-import net.minecraft.world.WorldAccess;
-
-/**
- * @author Gaming32 & Portal Cubed devs
- * @since arch-ex v2.1.0-1.19.4
- **/
-public class FacadeBlock extends AbstractLichenBlock implements TypedGrouped {
-	public static final BooleanProperty WATERLOGGED = Properties.WATERLOGGED;
-	protected final TypedGroupedBlock typedGroupedBlock;
-	
-	public FacadeBlock(Settings settings, TypedGroupedBlock typedGroupedBlock) {
-		super(settings);
-		this.setDefaultState(this.getDefaultState().with(WATERLOGGED, false)); // Thanks LambdAurora!
-		this.typedGroupedBlock = typedGroupedBlock;
-	}
-
-	public FacadeBlock(Block baseBlock, Settings settings, TypedGroupedBlock typedGroupedBlock) {
-		this(settings, typedGroupedBlock);
-	}
-	
-	@Override
-	public VoxelShape getCollisionShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) {
-		return VoxelShapes.empty();
-	}
-
-	@Override
-	public LichenSpreadBehavior getLichenSpreadBehavior() {
-		return new LichenSpreadBehavior(this);
-	}
-	
-	@Override
-	public boolean canReplace(BlockState state, ItemPlacementContext ctx) {
-		return ctx.getStack().isOf(this.asItem());
-	}
-
-	// Deals with block waterlogging. Thanks acikek!
-	@Override
-	public FluidState getFluidState(BlockState state) {
-		return state.get(WATERLOGGED) ? Fluids.WATER.getStill(false) : Fluids.EMPTY.getDefaultState();
-	}
-
-	@Override
-	public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) {
-		if (state.get(WATERLOGGED)) world.scheduleFluidTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world));
-
-		return state;
-	}
-	
-	@Override
-	protected MapCodec<? extends AbstractLichenBlock> getCodec() {
-		return null;
-	}
-	
-	@Override
-	protected void appendProperties(StateManager.Builder<Block, BlockState> builder) {
-		super.appendProperties(builder);
-		builder.add(WATERLOGGED);
-	}
-
-	@Override
-	public TypedGroupedBlock getTypedGroupedBlock() {
-		return typedGroupedBlock;
-	}
-	
-	@Override
-	public MutableText getName() {
-		return getServerTranslation();
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/FencePostBlock.java b/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/FencePostBlock.java
deleted file mode 100644
index 3c65f2d..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/FencePostBlock.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.blocks;
-
-import io.github.debuggyteam.architecture_extensions.api.BlockType.TypedGroupedBlock;
-import net.minecraft.block.Block;
-import net.minecraft.block.BlockState;
-import net.minecraft.block.PillarBlock;
-import net.minecraft.block.ShapeContext;
-import net.minecraft.block.Waterloggable;
-import net.minecraft.fluid.FluidState;
-import net.minecraft.fluid.Fluids;
-import net.minecraft.item.ItemPlacementContext;
-import net.minecraft.state.StateManager;
-import net.minecraft.state.property.BooleanProperty;
-import net.minecraft.state.property.EnumProperty;
-import net.minecraft.state.property.Properties;
-import net.minecraft.state.property.Property;
-import net.minecraft.text.MutableText;
-import net.minecraft.util.BlockRotation;
-import net.minecraft.util.math.BlockPos;
-import net.minecraft.util.math.Direction;
-import net.minecraft.util.shape.VoxelShape;
-import net.minecraft.world.BlockView;
-import net.minecraft.world.WorldAccess;
-
-public class FencePostBlock extends PillarBlock implements Waterloggable, TypedGrouped {
-	public static final EnumProperty<Direction.Axis> AXIS = Properties.AXIS;
-	public static final BooleanProperty WATERLOGGED = Properties.WATERLOGGED;
-
-	protected static final VoxelShape X_AXIS_BOX = Block.createCuboidShape(0.0, 6.0, 6.0, 16.0, 10.0, 10.0);
-	protected static final VoxelShape Y_AXIS_BOX = Block.createCuboidShape(6.0, 0.0, 6.0, 10.0, 16.0, 10.0);
-	protected static final VoxelShape Z_AXIS_BOX = Block.createCuboidShape(6.0, 6.0, 0.0, 10.0, 10.0, 16.0);
-
-	protected final TypedGroupedBlock typedGroupedBlock;
-	
-	public FencePostBlock(Settings settings, TypedGroupedBlock typedGroupedBlock) {
-		super(settings);
-		setDefaultState(this.stateManager.getDefaultState().with(AXIS, Direction.Axis.Y));
-		this.typedGroupedBlock = typedGroupedBlock;
-	}
-	
-	public FencePostBlock(Block baseBlock, Settings settings, TypedGroupedBlock typedGroupedBlock) {
-		this(settings, typedGroupedBlock);
-	}
-
-	// The following deals with block rotation
-	@Override
-	public BlockState rotate(BlockState state, BlockRotation rotation)  {
-		return changeRotation(state, rotation);
-	}
-
-	public static BlockState changeRotation(BlockState state, BlockRotation rotation) {
-		return switch (rotation) {
-			case COUNTERCLOCKWISE_90, CLOCKWISE_90 -> switch (state.get(AXIS)) {
-				case X -> state.with(AXIS, Direction.Axis.Z);
-				case Z -> state.with(AXIS, Direction.Axis.X);
-				default -> state;
-			};
-			default -> state;
-		};
-	}
-
-	// Both of the following blocks of code below deals with block collision.
-	@Override
-	public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) {
-		Direction.Axis cardinalDir = state.get(AXIS);
-		return switch (cardinalDir) {
-			case X -> X_AXIS_BOX;
-			case Y -> Y_AXIS_BOX;
-			case Z -> Z_AXIS_BOX;
-		};
-	}
-
-	// Deals with placing the block properly in accordance to direction.
-	@Override
-	public BlockState getPlacementState(ItemPlacementContext context) {
-		return this.getDefaultState().with(AXIS, context.getSide().getAxis()).with(WATERLOGGED, context.getWorld().getFluidState(context.getBlockPos()).getFluid() == Fluids.WATER);
-	}
-
-	@Override
-	public FluidState getFluidState(BlockState state) {
-		return state.get(WATERLOGGED) ? Fluids.WATER.getStill(false) : Fluids.EMPTY.getDefaultState();
-	}
-
-	@Override
-	public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) {
-		if (state.get(WATERLOGGED)) world.scheduleFluidTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world));
-
-		return state;
-	}
-
-	@Override
-	protected void appendProperties(StateManager.Builder<Block, BlockState> stateManager) {
-		stateManager.add(new Property[]{AXIS, WATERLOGGED});
-	}
-
-	@Override
-	public TypedGroupedBlock getTypedGroupedBlock() {
-		return typedGroupedBlock;
-	}
-	
-	@Override
-	public MutableText getName() {
-		return getServerTranslation();
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/IBeamBlock.java b/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/IBeamBlock.java
deleted file mode 100644
index caca4d9..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/IBeamBlock.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.blocks;
-
-import io.github.debuggyteam.architecture_extensions.api.BlockType.TypedGroupedBlock;
-import net.minecraft.block.Block;
-import net.minecraft.block.BlockState;
-import net.minecraft.block.PillarBlock;
-import net.minecraft.block.ShapeContext;
-import net.minecraft.block.Waterloggable;
-import net.minecraft.fluid.FluidState;
-import net.minecraft.fluid.Fluids;
-import net.minecraft.item.ItemPlacementContext;
-import net.minecraft.state.StateManager;
-import net.minecraft.state.property.BooleanProperty;
-import net.minecraft.state.property.EnumProperty;
-import net.minecraft.state.property.Properties;
-import net.minecraft.text.MutableText;
-import net.minecraft.util.BlockRotation;
-import net.minecraft.util.math.BlockPos;
-import net.minecraft.util.math.Direction;
-import net.minecraft.util.shape.VoxelShape;
-import net.minecraft.world.BlockView;
-import net.minecraft.world.WorldAccess;
-
-public class IBeamBlock extends PillarBlock implements Waterloggable, TypedGrouped {
-	public static final BooleanProperty WATERLOGGED = Properties.WATERLOGGED;
-	public static final EnumProperty<Direction.Axis> AXIS = Properties.AXIS;
-
-	protected static final VoxelShape X_AXIS_BOX = Block.createCuboidShape(0.0, 2.0, 2.0, 16.0, 14.0, 14.0);
-	protected static final VoxelShape Y_AXIS_BOX = Block.createCuboidShape(2.0, 0.0, 2.0, 14.0, 16.0, 14.0);
-	protected static final VoxelShape Z_AXIS_BOX = Block.createCuboidShape(2.0, 2.0, 0.0, 14.0, 14.0, 16.0);
-
-	protected final TypedGroupedBlock typedGroupedBlock;
-	
-	public IBeamBlock(Block baseBlock, Settings settings, TypedGroupedBlock typedGroupedBlock) {
-		super(settings);
-		this.typedGroupedBlock = typedGroupedBlock;
-	}
-
-	// The following deals with block rotation
-	@Override
-	public BlockState rotate(BlockState state, BlockRotation rotation)  {
-		return changeRotation(state, rotation);
-	}
-
-	public static BlockState changeRotation(BlockState state, BlockRotation rotation) {
-		return switch (rotation) {
-			case COUNTERCLOCKWISE_90, CLOCKWISE_90 -> switch (state.get(AXIS)) {
-				case X -> state.with(AXIS, Direction.Axis.Z);
-				case Z -> state.with(AXIS, Direction.Axis.X);
-				default -> state;
-			};
-			default -> state;
-		};
-	}
-
-	@Override
-	public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) {
-		Direction.Axis cardinalDir = state.get(AXIS);
-		return switch (cardinalDir) {
-			case X -> X_AXIS_BOX;
-			case Y -> Y_AXIS_BOX;
-			case Z -> Z_AXIS_BOX;
-		};
-	}
-
-	// Deals with placing the block properly in accordance to direction.
-	@Override
-	public BlockState getPlacementState(ItemPlacementContext context) {
-		return this.getDefaultState().with(AXIS, context.getSide().getAxis()).with(WATERLOGGED, context.getWorld().getFluidState(context.getBlockPos()).getFluid() == Fluids.WATER);
-	}
-
-	// Deals with block waterlogging. Thanks acikek!
-	@Override
-	public FluidState getFluidState(BlockState state) {
-		return state.get(WATERLOGGED) ? Fluids.WATER.getStill(false) : Fluids.EMPTY.getDefaultState();
-	}
-
-	@Override
-	public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) {
-		if (state.get(WATERLOGGED)) world.scheduleFluidTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world));
-
-		return state;
-	}
-
-	@Override
-	protected void appendProperties(StateManager.Builder<Block, BlockState> builder) {
-		builder.add(AXIS, WATERLOGGED);
-	}
-
-	@Override
-	public TypedGroupedBlock getTypedGroupedBlock() {
-		return typedGroupedBlock;
-	}
-	
-	@Override
-	public MutableText getName() {
-		return getServerTranslation();
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/JoistBlock.java b/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/JoistBlock.java
deleted file mode 100644
index ec2ad94..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/JoistBlock.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.blocks;
-
-import com.mojang.serialization.MapCodec;
-import io.github.debuggyteam.architecture_extensions.api.BlockType.TypedGroupedBlock;
-import net.minecraft.block.Block;
-import net.minecraft.block.BlockState;
-import net.minecraft.block.HorizontalFacingBlock;
-import net.minecraft.block.ShapeContext;
-import net.minecraft.block.Waterloggable;
-import net.minecraft.fluid.FluidState;
-import net.minecraft.fluid.Fluids;
-import net.minecraft.item.ItemPlacementContext;
-import net.minecraft.state.StateManager;
-import net.minecraft.state.property.BooleanProperty;
-import net.minecraft.state.property.Properties;
-import net.minecraft.text.MutableText;
-import net.minecraft.util.math.BlockPos;
-import net.minecraft.util.math.Direction;
-import net.minecraft.util.shape.VoxelShape;
-import net.minecraft.util.shape.VoxelShapes;
-import net.minecraft.world.BlockView;
-import net.minecraft.world.WorldAccess;
-
-public class JoistBlock extends HorizontalFacingBlock implements Waterloggable, TypedGrouped {
-	public static final BooleanProperty WATERLOGGED = Properties.WATERLOGGED;
-
-	protected static final VoxelShape X_BOX = Block.createCuboidShape(4.0, 4.0, 0.0, 12.0, 16.0, 16.0);
-	protected static final VoxelShape Y_BOX = Block.createCuboidShape(0.0, 4.0, 4.0, 16.0, 16.0, 12.0);
-
-	protected final TypedGroupedBlock typedGroupedBlock;
-	
-	public JoistBlock(Settings settings, TypedGroupedBlock typedGroupedBlock) {
-		super(settings);
-		setDefaultState(this.stateManager.getDefaultState().with(Properties.HORIZONTAL_FACING, Direction.NORTH));
-		this.setDefaultState(this.getDefaultState().with(WATERLOGGED, false)); // Thanks LambdAurora!
-		this.typedGroupedBlock = typedGroupedBlock;
-	}
-	
-	public JoistBlock(Block baseBlock, Settings settings, TypedGroupedBlock typedGroupedBlock) {
-		this(settings, typedGroupedBlock);
-	}
-
-	// The following deals with block rotation
-	@Override
-	public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) {
-		Direction cardinalDir = state.get(FACING);
-		return switch (cardinalDir) {
-			case NORTH, SOUTH -> X_BOX;
-			case EAST, WEST -> Y_BOX;
-			default -> VoxelShapes.fullCube();
-		};
-	}
-
-	// Deals with placing the block properly in accordance to direction.
-	@Override
-	public BlockState getPlacementState(ItemPlacementContext context) {
-		//World world = context.getWorld();
-		//BlockPos pos = context.getBlockPos();
-		return this.getDefaultState().with(Properties.HORIZONTAL_FACING, context.getPlayerFacing()).with(WATERLOGGED, context.getWorld().getFluidState(context.getBlockPos()).getFluid() == Fluids.WATER);
-	}
-
-	// Deals with block waterlogging. Thanks acikek!
-	@Override
-	public FluidState getFluidState(BlockState state) {
-		return state.get(WATERLOGGED) ? Fluids.WATER.getStill(false) : Fluids.EMPTY.getDefaultState();
-	}
-
-	@Override
-	public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) {
-		if (state.get(WATERLOGGED)) world.scheduleFluidTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world));
-
-		return state;
-	}
-
-	@Override
-	protected void appendProperties(StateManager.Builder<Block, BlockState> builder) {
-		builder.add(Properties.HORIZONTAL_FACING);
-		builder.add(WATERLOGGED);
-	}
-
-	@Override
-	public TypedGroupedBlock getTypedGroupedBlock() {
-		return typedGroupedBlock;
-	}
-	
-	@Override
-	public MutableText getName() {
-		return getServerTranslation();
-	}
-	
-	@Override
-	protected MapCodec<? extends HorizontalFacingBlock> getCodec() {
-		return null;
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/LatticeBlock.java b/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/LatticeBlock.java
deleted file mode 100644
index d8bdae6..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/LatticeBlock.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.blocks;
-
-import com.mojang.serialization.MapCodec;
-import io.github.debuggyteam.architecture_extensions.api.BlockType.TypedGroupedBlock;
-import net.minecraft.block.Block;
-import net.minecraft.block.BlockState;
-import net.minecraft.block.HorizontalFacingBlock;
-import net.minecraft.block.ShapeContext;
-import net.minecraft.block.Waterloggable;
-import net.minecraft.fluid.FluidState;
-import net.minecraft.fluid.Fluids;
-import net.minecraft.item.ItemPlacementContext;
-import net.minecraft.state.StateManager;
-import net.minecraft.state.property.BooleanProperty;
-import net.minecraft.state.property.Properties;
-import net.minecraft.text.MutableText;
-import net.minecraft.util.math.BlockPos;
-import net.minecraft.util.math.Direction;
-import net.minecraft.util.shape.VoxelShape;
-import net.minecraft.util.shape.VoxelShapes;
-import net.minecraft.world.BlockView;
-import net.minecraft.world.WorldAccess;
-
-public class LatticeBlock extends HorizontalFacingBlock implements Waterloggable, TypedGrouped {
-	public static final BooleanProperty WATERLOGGED = Properties.WATERLOGGED;
-	
-	protected static final VoxelShape X_BOX = Block.createCuboidShape(0.0, 0.0, 7.0, 16.0, 16.0, 9.0);
-	protected static final VoxelShape Y_BOX = Block.createCuboidShape(7.0, 0.0, 0.0, 9.0, 16.0, 16.0);
-	
-	protected final TypedGroupedBlock typedGroupedBlock;
-	
-	public LatticeBlock(Settings settings, TypedGroupedBlock typedGroupedBlock) {
-		super(settings);
-		this.typedGroupedBlock = typedGroupedBlock;
-	}
-	
-	public LatticeBlock(Block baseBlock, Settings settings, TypedGroupedBlock typedGroupedBlock) {
-		this(settings, typedGroupedBlock);
-	}
-	
-	// The following deals with block rotation
-	@Override
-	public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) {
-		Direction cardinalDir = state.get(FACING);
-		return switch (cardinalDir) {
-			case NORTH, SOUTH -> X_BOX;
-			case EAST, WEST -> Y_BOX;
-			default -> VoxelShapes.fullCube();
-		};
-	}
-	
-	// Deals with placing the block properly in accordance to direction.
-	@Override
-	public BlockState getPlacementState(ItemPlacementContext context) {
-		//World world = context.getWorld();
-		//BlockPos pos = context.getBlockPos();
-		return this.getDefaultState().with(Properties.HORIZONTAL_FACING, context.getPlayerFacing()).with(WATERLOGGED, context.getWorld().getFluidState(context.getBlockPos()).getFluid() == Fluids.WATER);
-	}
-	
-	// Deals with block waterlogging. Thanks acikek!
-	@Override
-	public FluidState getFluidState(BlockState state) {
-		return state.get(WATERLOGGED) ? Fluids.WATER.getStill(false) : Fluids.EMPTY.getDefaultState();
-	}
-	
-	@Override
-	public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) {
-		if (state.get(WATERLOGGED)) world.scheduleFluidTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world));
-		
-		return state;
-	}
-	
-	@Override
-	protected void appendProperties(StateManager.Builder<Block, BlockState> builder) {
-		builder.add(Properties.HORIZONTAL_FACING);
-		builder.add(WATERLOGGED);
-	}
-
-	@Override
-	public TypedGroupedBlock getTypedGroupedBlock() {
-		return typedGroupedBlock;
-	}
-	
-	@Override
-	public MutableText getName() {
-		return getServerTranslation();
-	}
-	
-	@Override
-	protected MapCodec<? extends HorizontalFacingBlock> getCodec() {
-		return null;
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/OctagonalColumnBlock.java b/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/OctagonalColumnBlock.java
deleted file mode 100644
index e89bc3c..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/OctagonalColumnBlock.java
+++ /dev/null
@@ -1,124 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.blocks;
-
-import io.github.debuggyteam.architecture_extensions.api.BlockType.TypedGroupedBlock;
-import net.minecraft.block.Block;
-import net.minecraft.block.BlockState;
-import net.minecraft.block.PillarBlock;
-import net.minecraft.block.ShapeContext;
-import net.minecraft.block.Waterloggable;
-import net.minecraft.fluid.FluidState;
-import net.minecraft.fluid.Fluids;
-import net.minecraft.item.ItemPlacementContext;
-import net.minecraft.state.StateManager;
-import net.minecraft.state.property.BooleanProperty;
-import net.minecraft.state.property.EnumProperty;
-import net.minecraft.state.property.Properties;
-import net.minecraft.text.MutableText;
-import net.minecraft.util.BlockRotation;
-import net.minecraft.util.math.BlockPos;
-import net.minecraft.util.math.Direction;
-import net.minecraft.util.shape.VoxelShape;
-import net.minecraft.world.BlockView;
-import net.minecraft.world.WorldAccess;
-
-public class OctagonalColumnBlock extends PillarBlock implements Waterloggable, TypedGrouped {
-	public static final BooleanProperty MIN_CAP = BooleanProperty.of("min_cap");
-	public static final BooleanProperty MAX_CAP = BooleanProperty.of("max_cap");
-	public static final EnumProperty<Direction.Axis> AXIS = Properties.AXIS;
-	public static final BooleanProperty WATERLOGGED = Properties.WATERLOGGED;
-	
-	protected static final VoxelShape X_AXIS_BOX = Block.createCuboidShape(0.0, 4.0, 4.0, 16.0, 12.0, 12.0);
-	protected static final VoxelShape Y_AXIS_BOX = Block.createCuboidShape(4.0, 0.0, 4.0, 12.0, 16.0, 12.0);
-	protected static final VoxelShape Z_AXIS_BOX = Block.createCuboidShape(4.0, 4.0, 0.0, 12.0, 12.0, 16.0);
-	
-	protected final TypedGroupedBlock typedGroupedBlock;
-	
-	public OctagonalColumnBlock(Block baseBlock, Settings settings, TypedGroupedBlock typedGroupedBlock) {
-		super(settings);
-		this.setDefaultState(
-				this.getDefaultState()
-				.with(WATERLOGGED, false)
-				.with(AXIS, Direction.Axis.Y)
-				.with(MIN_CAP, false)
-				.with(MAX_CAP, false)
-			); // Thanks LambdAurora!
-		
-		this.typedGroupedBlock = typedGroupedBlock;
-	}
-	
-	// The following deals with block rotation
-	@Override
-	public BlockState rotate(BlockState state, BlockRotation rotation)  {
-		return changeRotation(state, rotation);
-	}
-	
-	public static BlockState changeRotation(BlockState state, BlockRotation rotation) {
-		return switch (rotation) {
-			case COUNTERCLOCKWISE_90, CLOCKWISE_90 -> switch (state.get(AXIS)) {
-				case X -> state.with(AXIS, Direction.Axis.Z);
-				case Z -> state.with(AXIS, Direction.Axis.X);
-				default -> state;
-			};
-			default -> state;
-		};
-	}
-	
-	// The following block of code below deals with block collision.
-	@Override
-	public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) {
-		Direction.Axis cardinalDir = state.get(AXIS);
-		return switch (cardinalDir) {
-			case X -> X_AXIS_BOX;
-			case Y -> Y_AXIS_BOX;
-			case Z -> Z_AXIS_BOX;
-		};
-	}
-	
-	// Deals with placing the block properly in accordance to direction.
-	@Override
-	public BlockState getPlacementState(ItemPlacementContext context) {
-		BlockState initialState = this.getDefaultState().with(AXIS, context.getSide().getAxis());
-		return getUpdatedState(context.getWorld(), context.getBlockPos(), initialState);
-	}
-	
-	@Override
-	public FluidState getFluidState(BlockState state) {
-		return state.get(WATERLOGGED) ? Fluids.WATER.getStill(false) : Fluids.EMPTY.getDefaultState();
-	}
-	
-	@Override
-	public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) {
-		if (state.get(WATERLOGGED)) world.scheduleFluidTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world));
-		
-		return getUpdatedState(world, pos, state);
-	}
-	
-	@Override
-	protected void appendProperties(StateManager.Builder<Block, BlockState> stateManager) {
-		stateManager.add(AXIS, MIN_CAP, MAX_CAP, WATERLOGGED);
-	}
-	
-	public BlockState getUpdatedState(WorldAccess world, BlockPos pos, BlockState state) {
-		Direction.Axis selfAxis = state.get(AXIS);
-		
-		BlockState minNeighbor = world.getBlockState(pos.offset(selfAxis, -1));
-		boolean minCap = !(minNeighbor.getBlock() instanceof OctagonalColumnBlock &&
-				minNeighbor.get(AXIS) == selfAxis);
-		
-		BlockState maxNeighbor = world.getBlockState(pos.offset(selfAxis, 1));
-		boolean maxCap = !(maxNeighbor.getBlock() instanceof OctagonalColumnBlock &&
-				maxNeighbor.get(AXIS) == selfAxis);
-		
-		return state.with(MIN_CAP, minCap).with(MAX_CAP, maxCap);
-	}
-
-	@Override
-	public TypedGroupedBlock getTypedGroupedBlock() {
-		return typedGroupedBlock;
-	}
-	
-	@Override
-	public MutableText getName() {
-		return getServerTranslation();
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/PostCapBlock.java b/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/PostCapBlock.java
deleted file mode 100644
index 441c2e0..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/PostCapBlock.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.blocks;
-
-import io.github.debuggyteam.architecture_extensions.api.BlockType.TypedGroupedBlock;
-import net.minecraft.block.Block;
-import net.minecraft.block.BlockState;
-import net.minecraft.block.ShapeContext;
-import net.minecraft.fluid.FluidState;
-import net.minecraft.fluid.Fluids;
-import net.minecraft.item.ItemPlacementContext;
-import net.minecraft.state.StateManager;
-import net.minecraft.state.property.BooleanProperty;
-import net.minecraft.state.property.Properties;
-import net.minecraft.text.MutableText;
-import net.minecraft.util.math.BlockPos;
-import net.minecraft.util.math.Direction;
-import net.minecraft.util.shape.VoxelShape;
-import net.minecraft.world.BlockView;
-import net.minecraft.world.WorldAccess;
-
-public class PostCapBlock extends Block implements TypedGrouped {
-	public static final BooleanProperty WATERLOGGED = Properties.WATERLOGGED;
-
-	protected static final VoxelShape POST_CAP_SHAPE = Block.createCuboidShape(5.0, 0.0, 5.0, 11.0, 3.0, 11.0);
-
-	protected final TypedGroupedBlock typedGroupedBlock;
-	
-	public PostCapBlock(Settings settings, TypedGroupedBlock typedGroupedBlock) {
-		super(settings);
-		this.setDefaultState(this.getDefaultState().with(WATERLOGGED, false)); // Thanks LambdAurora!
-		this.typedGroupedBlock = typedGroupedBlock;
-	}
-
-	public PostCapBlock(Block baseBlock, Settings settings, TypedGroupedBlock typedGroupedBlock) {
-		this(settings, typedGroupedBlock);
-	}
-	
-	@Override
-	public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) {
-		return POST_CAP_SHAPE;
-	}
-
-	// Deals with waterlogging. Thanks acikek!
-	@Override
-	public BlockState getPlacementState(ItemPlacementContext context) {
-		return this.getDefaultState().with(WATERLOGGED, context.getWorld().getFluidState(context.getBlockPos()).getFluid() == Fluids.WATER);
-	}
-
-	@Override
-	public FluidState getFluidState(BlockState state) {
-		return state.get(WATERLOGGED) ? Fluids.WATER.getStill(false) : Fluids.EMPTY.getDefaultState();
-	}
-
-	@Override
-	public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) {
-		if (state.get(WATERLOGGED)) world.scheduleFluidTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world));
-
-		return state;
-	}
-
-	@Override
-	protected void appendProperties(StateManager.Builder<Block, BlockState> builder) {
-		builder.add(WATERLOGGED);
-	}
-
-	@Override
-	public TypedGroupedBlock getTypedGroupedBlock() {
-		return typedGroupedBlock;
-	}
-	
-	@Override
-	public MutableText getName() {
-		return getServerTranslation();
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/PostLanternBlock.java b/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/PostLanternBlock.java
deleted file mode 100644
index 1104e82..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/PostLanternBlock.java
+++ /dev/null
@@ -1,129 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.blocks;
-
-import io.github.debuggyteam.architecture_extensions.api.BlockType.TypedGroupedBlock;
-import io.github.debuggyteam.architecture_extensions.util.VoxelHelper;
-import net.minecraft.block.Block;
-import net.minecraft.block.BlockState;
-import net.minecraft.block.ShapeContext;
-import net.minecraft.fluid.FluidState;
-import net.minecraft.fluid.Fluids;
-import net.minecraft.item.ItemPlacementContext;
-import net.minecraft.state.StateManager;
-import net.minecraft.state.property.BooleanProperty;
-import net.minecraft.state.property.Properties;
-import net.minecraft.text.MutableText;
-import net.minecraft.util.function.BooleanBiFunction;
-import net.minecraft.util.math.BlockPos;
-import net.minecraft.util.math.Direction;
-import net.minecraft.util.shape.VoxelShape;
-import net.minecraft.util.shape.VoxelShapes;
-import net.minecraft.world.BlockView;
-import net.minecraft.world.WorldAccess;
-
-public class PostLanternBlock extends Block implements TypedGrouped {
-	public static final BooleanProperty WATERLOGGED = Properties.WATERLOGGED;
-	public static final BooleanProperty HANGING = Properties.HANGING;
-	
-	private static final VoxelShape LANTERN_BODY = Block.createCuboidShape(5, 0, 5, 11, 6, 11);
-	private static final VoxelShape LANTERN_CAP = Block.createCuboidShape(4, 5, 4, 12, 6, 12);
-	private static final VoxelShape LANTERN_FINIAL = Block.createCuboidShape(6, 6, 6, 10, 7, 10);
-	
-	private static final VoxelShape POST_LANTERN_SHAPE = VoxelShapes.combine(
-			VoxelShapes.combine(LANTERN_BODY, LANTERN_CAP, BooleanBiFunction.OR),
-			LANTERN_FINIAL, BooleanBiFunction.OR);
-	
-	private static final VoxelShape HANGING_LANTERN_BODY = Block.createCuboidShape(5, 9, 5, 11, 15, 11);
-	private static final VoxelShape HANGING_LANTERN_CAP = Block.createCuboidShape(4, 14, 4, 12, 15, 12);
-	private static final VoxelShape HANGING_LANTERN_FINIAL = Block.createCuboidShape(6, 15, 6, 10, 16, 10);
-	
-	private static final VoxelShape HANGING_POST_LANTERN_SHAPE = VoxelShapes.combine(
-			VoxelShapes.combine(HANGING_LANTERN_BODY, HANGING_LANTERN_CAP, BooleanBiFunction.OR),
-			HANGING_LANTERN_FINIAL, BooleanBiFunction.OR);
-
-	protected final TypedGroupedBlock typedGroupedBlock;
-	
-	public PostLanternBlock(Settings settings, TypedGroupedBlock typedGroupedBlock) {
-		super(settings.luminance(state -> 15));
-		this.setDefaultState(this.getDefaultState().with(WATERLOGGED, false)); // Thanks LambdAurora!
-		this.typedGroupedBlock = typedGroupedBlock;
-	}
-	
-	public PostLanternBlock(Block baseBlock, Settings settings, TypedGroupedBlock typedGroupedBlock) {
-		this(settings, typedGroupedBlock);
-	}
-
-	@Override
-	public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) {
-		return state.get(HANGING) ? HANGING_POST_LANTERN_SHAPE : POST_LANTERN_SHAPE;
-	}
-	
-	@Override
-	public BlockState getPlacementState(ItemPlacementContext context) {
-		BlockState placementState = this.getDefaultState();
-		
-		if (context.getSide().equals(Direction.DOWN)) {
-			placementState = placementState.with(HANGING, canHang(context.getWorld(), context.getBlockPos()));
-		} else {
-			placementState = placementState.with(HANGING, false);
-		}
-		
-		// Deals with waterlogging. Thanks acikek!
-		return placementState.with(WATERLOGGED, context.getWorld().getFluidState(context.getBlockPos()).getFluid() == Fluids.WATER);
-	}
-
-	@Override
-	public FluidState getFluidState(BlockState state) {
-		return state.get(WATERLOGGED) ? Fluids.WATER.getStill(false) : Fluids.EMPTY.getDefaultState();
-	}
-
-	@Override
-	public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) {
-		if (state.get(WATERLOGGED)) world.scheduleFluidTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world));
-		
-		if (state.get(HANGING)) {
-			//Make sure we can still hang from the block above us, and if not, do not hang
-			if (!canHang(world, pos)) {
-				return state.with(HANGING, false);
-			}
-		} else {
-			/*
-			 * This is more complicated because we kind of favor the non-hanging status. If we're not ahnging, but the
-			 * block below us is completely air, and we discover that there's something to hang from, go ahead and hang.
-			 */
-			if (world.getBlockState(pos.down()).isAir()) {
-				if (canHang(world, pos)) {
-					return state.with(HANGING, true);
-				}
-			}
-		}
-		
-		return state;
-	}
-
-	@Override
-	protected void appendProperties(StateManager.Builder<Block, BlockState> builder) {
-		builder.add(WATERLOGGED).add(HANGING);
-	}
-	
-	public static boolean canHang(BlockView world, BlockPos pos) {
-		BlockPos above = pos.up();
-		VoxelShape shape = world.getBlockState(above).getCollisionShape(world, above);
-		
-		if (!VoxelHelper.testVoxel(shape, 7, 0, 7)) return false;
-		if (!VoxelHelper.testVoxel(shape, 7, 0, 8)) return false;
-		if (!VoxelHelper.testVoxel(shape, 8, 0, 7)) return false;
-		if (!VoxelHelper.testVoxel(shape, 8, 0, 8)) return false;
-		
-		return true;
-	}
-
-	@Override
-	public TypedGroupedBlock getTypedGroupedBlock() {
-		return typedGroupedBlock;
-	}
-	
-	@Override
-	public MutableText getName() {
-		return getServerTranslation();
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/RoofBlock.java b/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/RoofBlock.java
deleted file mode 100644
index 7fbc05f..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/RoofBlock.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.blocks;
-
-import io.github.debuggyteam.architecture_extensions.api.BlockType.TypedGroupedBlock;
-import net.minecraft.block.Block;
-import net.minecraft.block.BlockState;
-import net.minecraft.block.StairsBlock;
-import net.minecraft.text.MutableText;
-
-public class RoofBlock extends StairsBlock implements TypedGrouped {
-	
-	protected final TypedGroupedBlock typedGroupedBlock;
-	
-	public RoofBlock(BlockState blockState, Settings settings, TypedGroupedBlock typedGroupedBlock) {
-		super(blockState, settings);
-		this.typedGroupedBlock = typedGroupedBlock;
-	}
-	
-	public RoofBlock(Block baseBlock, Settings settings, TypedGroupedBlock typedGroupedBlock) {
-		this (baseBlock.getDefaultState(), settings, typedGroupedBlock);
-	}
-
-	@Override
-	public TypedGroupedBlock getTypedGroupedBlock() {
-		return typedGroupedBlock;
-	}
-	
-	@Override
-	public MutableText getName() {
-		return getServerTranslation();
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/RoundArchBlock.java b/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/RoundArchBlock.java
deleted file mode 100644
index bc22ccb..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/RoundArchBlock.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.blocks;
-
-import com.mojang.serialization.MapCodec;
-import net.minecraft.block.Block;
-import net.minecraft.block.BlockState;
-import net.minecraft.block.HorizontalFacingBlock;
-import net.minecraft.block.ShapeContext;
-import net.minecraft.block.enums.BlockHalf;
-import net.minecraft.item.ItemPlacementContext;
-import net.minecraft.state.StateManager;
-import net.minecraft.state.property.DirectionProperty;
-import net.minecraft.state.property.EnumProperty;
-import net.minecraft.state.property.Properties;
-import net.minecraft.text.MutableText;
-import net.minecraft.util.math.BlockPos;
-import net.minecraft.util.math.Direction;
-import net.minecraft.util.shape.VoxelShape;
-import net.minecraft.util.shape.VoxelShapes;
-import net.minecraft.world.BlockView;
-
-import org.quiltmc.qsl.block.extensions.api.QuiltBlockSettings;
-
-import io.github.debuggyteam.architecture_extensions.api.BlockType.TypedGroupedBlock;
-
-public class RoundArchBlock extends HorizontalFacingBlock implements TypedGrouped {
-	public static final DirectionProperty FACING = HorizontalFacingBlock.FACING;
-	public static final EnumProperty<BlockHalf> HALF = Properties.BLOCK_HALF;
-	
-	protected final TypedGroupedBlock typedGroupedBlock;
-	
-	protected static final VoxelShape SHAPE_TOP = Block.createCuboidShape(0.0, 8.0, 0.0, 16.0, 16.0, 16.0);
-	protected static final VoxelShape SHAPE_BOTTOM = Block.createCuboidShape(0.0, 0.0, 0.0, 16.0, 8.0, 16.0);
-	
-	public RoundArchBlock(Block baseBlock, QuiltBlockSettings settings, TypedGroupedBlock typedGroupedBlock) {
-		super(settings);
-		this.typedGroupedBlock = typedGroupedBlock;
-	}
-	
-	@Override
-	public BlockState getPlacementState(ItemPlacementContext context) {
-		// Thanks Falkreon
-		BlockHalf half = switch(context.getSide()) {
-			case UP -> BlockHalf.BOTTOM;
-			case DOWN -> BlockHalf.TOP;
-			default -> {
-				double sideHitHeight = context.getHitPos().getY() - context.getBlockPos().getY();
-				if (sideHitHeight > 0.5) {
-					yield BlockHalf.TOP;
-				} else {
-					yield BlockHalf.BOTTOM;
-				}
-			}
-		};
-		
-		return this.getDefaultState().with(FACING, context.getPlayerFacing()).with(HALF, half);
-	}
-	
-	@Override
-	protected void appendProperties(StateManager.Builder<Block, BlockState> builder) {
-		super.appendProperties(builder);
-		builder.add(FACING, HALF);
-	}
-	
-	@Override
-	public VoxelShape getCullingShape(BlockState state, BlockView world, BlockPos pos) {
-		return VoxelShapes.empty();
-	}
-	
-	@Override
-	public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) {
-		BlockHalf half = state.get(HALF);
-		return switch (half) {
-			case TOP -> SHAPE_TOP;
-			case BOTTOM -> SHAPE_BOTTOM;
-		};
-		
-	}
-
-	@Override
-	public TypedGroupedBlock getTypedGroupedBlock() {
-		return typedGroupedBlock;
-	}
-	
-	@Override
-	public MutableText getName() {
-		return getServerTranslation();
-	}
-	
-	@Override
-	protected MapCodec<? extends HorizontalFacingBlock> getCodec() {
-		return null;
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/RoundFencePostBlock.java b/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/RoundFencePostBlock.java
deleted file mode 100644
index 3e1a20f..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/RoundFencePostBlock.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.blocks;
-
-import io.github.debuggyteam.architecture_extensions.api.BlockType.TypedGroupedBlock;
-import net.minecraft.block.Block;
-import net.minecraft.block.BlockState;
-import net.minecraft.block.PillarBlock;
-import net.minecraft.block.ShapeContext;
-import net.minecraft.block.Waterloggable;
-import net.minecraft.fluid.FluidState;
-import net.minecraft.fluid.Fluids;
-import net.minecraft.item.ItemPlacementContext;
-import net.minecraft.state.StateManager;
-import net.minecraft.state.property.BooleanProperty;
-import net.minecraft.state.property.EnumProperty;
-import net.minecraft.state.property.Properties;
-import net.minecraft.text.MutableText;
-import net.minecraft.util.BlockRotation;
-import net.minecraft.util.math.BlockPos;
-import net.minecraft.util.math.Direction;
-import net.minecraft.util.shape.VoxelShape;
-import net.minecraft.world.BlockView;
-import net.minecraft.world.WorldAccess;
-
-public class RoundFencePostBlock extends PillarBlock implements Waterloggable, TypedGrouped {
-	public static final EnumProperty<Direction.Axis> AXIS = Properties.AXIS;
-	public static final BooleanProperty WATERLOGGED = Properties.WATERLOGGED;
-	
-	protected static final VoxelShape X_AXIS_BOX = Block.createCuboidShape(0.0, 5.0, 5.0, 16.0, 11.0, 11.0);
-	protected static final VoxelShape Y_AXIS_BOX = Block.createCuboidShape(5.0, 0.0, 5.0, 11.0, 16.0, 11.0);
-	protected static final VoxelShape Z_AXIS_BOX = Block.createCuboidShape(5.0, 5.0, 0.0, 11.0, 11.0, 16.0);
-	
-	protected final TypedGroupedBlock typedGroupedBlock;
-	
-	public RoundFencePostBlock(Block baseBlock, Settings settings, TypedGroupedBlock typedGroupedBlock) {
-		super(settings);
-		setDefaultState(this.stateManager.getDefaultState().with(AXIS, Direction.Axis.Y));
-		this.typedGroupedBlock = typedGroupedBlock;
-	}
-	
-	// The following deals with block rotation
-	@Override
-	public BlockState rotate(BlockState state, BlockRotation rotation)  {
-		return changeRotation(state, rotation);
-	}
-	
-	public static BlockState changeRotation(BlockState state, BlockRotation rotation) {
-		return switch (rotation) {
-			case COUNTERCLOCKWISE_90, CLOCKWISE_90 -> switch (state.get(AXIS)) {
-				case X -> state.with(AXIS, Direction.Axis.Z);
-				case Z -> state.with(AXIS, Direction.Axis.X);
-				default -> state;
-			};
-			default -> state;
-		};
-	}
-	
-	// Both of the following blocks of code below deals with block collision.
-	@Override
-	public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) {
-		Direction.Axis cardinalDir = state.get(AXIS);
-		return switch (cardinalDir) {
-			case X -> X_AXIS_BOX;
-			case Y -> Y_AXIS_BOX;
-			case Z -> Z_AXIS_BOX;
-		};
-	}
-	
-	// Deals with placing the block properly in accordance to direction.
-	@Override
-	public BlockState getPlacementState(ItemPlacementContext context) {
-		return this.getDefaultState().with(AXIS, context.getSide().getAxis()).with(WATERLOGGED, context.getWorld().getFluidState(context.getBlockPos()).getFluid() == Fluids.WATER);
-	}
-	
-	@Override
-	public FluidState getFluidState(BlockState state) {
-		return state.get(WATERLOGGED) ? Fluids.WATER.getStill(false) : Fluids.EMPTY.getDefaultState();
-	}
-	
-	@Override
-	public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) {
-		if (state.get(WATERLOGGED)) world.scheduleFluidTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world));
-		
-		return state;
-	}
-	
-	@Override
-	protected void appendProperties(StateManager.Builder<Block, BlockState> stateManager) {
-		stateManager.add(AXIS, WATERLOGGED);
-	}
-
-	@Override
-	public TypedGroupedBlock getTypedGroupedBlock() {
-		return typedGroupedBlock;
-	}
-	
-	@Override
-	public MutableText getName() {
-		return getServerTranslation();
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/TransomBlock.java b/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/TransomBlock.java
deleted file mode 100644
index bf88c5e..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/TransomBlock.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.blocks;
-
-import com.mojang.serialization.MapCodec;
-import io.github.debuggyteam.architecture_extensions.api.BlockType.TypedGroupedBlock;
-import net.minecraft.block.Block;
-import net.minecraft.block.BlockState;
-import net.minecraft.block.HorizontalFacingBlock;
-import net.minecraft.block.ShapeContext;
-import net.minecraft.fluid.FluidState;
-import net.minecraft.fluid.Fluids;
-import net.minecraft.item.ItemPlacementContext;
-import net.minecraft.state.StateManager;
-import net.minecraft.state.property.BooleanProperty;
-import net.minecraft.state.property.Properties;
-import net.minecraft.text.MutableText;
-import net.minecraft.util.math.BlockPos;
-import net.minecraft.util.math.Direction;
-import net.minecraft.util.shape.VoxelShape;
-import net.minecraft.util.shape.VoxelShapes;
-import net.minecraft.world.BlockView;
-
-public class TransomBlock extends HorizontalFacingBlock implements TypedGrouped {
-	public static final BooleanProperty WATERLOGGED = Properties.WATERLOGGED;
-
-	protected static final VoxelShape NORTH_BOX = Block.createCuboidShape(2.0, 0.0, 0.0, 14.0, 16.0, 4.0);
-	protected static final VoxelShape SOUTH_BOX = Block.createCuboidShape(2.0, 0.0, 12.0, 14.0, 16.0, 16.0);
-	protected static final VoxelShape EAST_BOX = Block.createCuboidShape(12.0, 0.0, 2.0, 16.0, 16.0, 14.0);
-	protected static final VoxelShape WEST_BOX = Block.createCuboidShape(0.0, 0.0, 2.0, 4.0, 16.0, 14.0);
-
-	protected final TypedGroupedBlock typedGroupedBlock;
-	
-	public TransomBlock(Block baseBlock, Settings settings, TypedGroupedBlock typedGroupedBlock) {
-		super(settings);
-		setDefaultState(getDefaultState().with(Properties.HORIZONTAL_FACING, Direction.NORTH));
-		this.typedGroupedBlock = typedGroupedBlock;
-	}
-
-	// Both of the following blocks of code below deals with block collision.
-	@Override
-	public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) {
-		Direction cardinalDir = state.get(FACING);
-		return switch (cardinalDir) {
-			case NORTH -> NORTH_BOX;
-			case SOUTH -> SOUTH_BOX;
-			case EAST -> EAST_BOX;
-			case WEST -> WEST_BOX;
-			default -> VoxelShapes.fullCube();
-		};
-	}
-
-	// Deals with placing the block properly in accordance to direction.
-	@Override
-	public BlockState getPlacementState(ItemPlacementContext context) {
-		return this.getDefaultState().with(Properties.HORIZONTAL_FACING, context.getPlayerFacing()).with(WATERLOGGED, context.getWorld().getFluidState(context.getBlockPos()).getFluid() == Fluids.WATER);
-	}
-
-	// Deals with block waterlogging. Thanks acikek!
-	@Override
-	public FluidState getFluidState(BlockState state) {
-		return state.get(WATERLOGGED) ? Fluids.WATER.getStill(false) : Fluids.EMPTY.getDefaultState();
-	}
-
-	@Override
-	protected void appendProperties(StateManager.Builder<Block, BlockState> builder) {
-		builder.add(Properties.HORIZONTAL_FACING, WATERLOGGED);
-	}
-
-	@Override
-	public TypedGroupedBlock getTypedGroupedBlock() {
-		return typedGroupedBlock;
-	}
-	
-	@Override
-	public MutableText getName() {
-		return getServerTranslation();
-	}
-	
-	@Override
-	protected MapCodec<? extends HorizontalFacingBlock> getCodec() {
-		return null;
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/TubeSteelBlock.java b/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/TubeSteelBlock.java
deleted file mode 100644
index 6937fde..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/TubeSteelBlock.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.blocks;
-
-import io.github.debuggyteam.architecture_extensions.api.BlockType.TypedGroupedBlock;
-import net.minecraft.block.Block;
-import net.minecraft.block.BlockState;
-import net.minecraft.block.PillarBlock;
-import net.minecraft.block.ShapeContext;
-import net.minecraft.text.MutableText;
-import net.minecraft.util.BlockRotation;
-import net.minecraft.util.math.BlockPos;
-import net.minecraft.util.math.Direction;
-import net.minecraft.util.shape.VoxelShape;
-import net.minecraft.util.shape.VoxelShapes;
-import net.minecraft.world.BlockView;
-
-public class TubeSteelBlock extends PillarBlock implements TypedGrouped {
-	protected static final VoxelShape FIRST_SIDE = Block.createCuboidShape(0.0, 0.0, 0.0, 16.0, 16.0, 3.0);
-	protected static final VoxelShape SECOND_SIDE = Block.createCuboidShape(0.0, 0.0, 3.0, 3.0, 16.0, 13.0);
-	protected static final VoxelShape THIRD_SIDE = Block.createCuboidShape(13.0, 0.0, 3.0, 16.0, 16.0, 13.0);
-	protected static final VoxelShape FOURTH_SIDE = Block.createCuboidShape(0.0, 0.0, 13.0, 16.0, 16.0, 16.0);
-
-	protected static final VoxelShape TUBE_UPWARDS = VoxelShapes.union(FIRST_SIDE, SECOND_SIDE, THIRD_SIDE, FOURTH_SIDE);
-
-	protected final TypedGroupedBlock typedGroupedBlock;
-	
-	public TubeSteelBlock(Block baseBlock, Settings settings, TypedGroupedBlock typedGroupedBlock) {
-		super(settings);
-		this.typedGroupedBlock = typedGroupedBlock;
-	}
-
-	// The following deals with block rotation
-	@Override
-	public BlockState rotate(BlockState state, BlockRotation rotation)  {
-		return changeRotation(state, rotation);
-	}
-
-	public static BlockState changeRotation(BlockState state, BlockRotation rotation) {
-		return switch (rotation) {
-			case COUNTERCLOCKWISE_90, CLOCKWISE_90 -> switch (state.get(AXIS)) {
-				case X -> state.with(AXIS, Direction.Axis.Z);
-				case Z -> state.with(AXIS, Direction.Axis.X);
-				default -> state;
-			};
-			default -> state;
-		};
-	}
-
-	// Both of the following blocks of code below deals with block collision.
-	@Override
-	public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) {
-		Direction.Axis cardinalDir = state.get(AXIS);
-		return switch (cardinalDir) {
-			case Y -> TUBE_UPWARDS;
-			default -> VoxelShapes.fullCube();
-		};
-	}
-
-	@Override
-	public TypedGroupedBlock getTypedGroupedBlock() {
-		return typedGroupedBlock;
-	}
-	
-	@Override
-	public MutableText getName() {
-		return getServerTranslation();
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/TypedGrouped.java b/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/TypedGrouped.java
deleted file mode 100644
index 714d598..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/TypedGrouped.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.blocks;
-
-import io.github.debuggyteam.architecture_extensions.api.BlockType.TypedGroupedBlock;
-import net.minecraft.text.MutableText;
-import net.minecraft.text.Text;
-import net.minecraft.util.Identifier;
-
-public interface TypedGrouped {
-	public static final String GROUPED_BLOCK_PREFIX = "architecture_extensions.grouped_block";
-	public static final String BLOCKTYPE_BLOCK_KEY = "architecture_extensions.block_type_block";
-	public static final String BLOCK_TYPE_PREFIX = "architecture_extensions.block_type";
-	
-	public TypedGroupedBlock getTypedGroupedBlock();
-	
-	public default MutableText getServerTranslation() {
-		String typeId = getTypedGroupedBlock().type().toString();
-		Identifier blockId = getTypedGroupedBlock().groupedBlock().id();
-		
-		boolean isVanilla = blockId.getNamespace().equals("minecraft") || blockId.getNamespace().equals("");
-		
-		MutableText baseBlockName = (isVanilla) ?
-			//Our VanillaIntegration keys are all legacy ones
-			Text.translatable(GROUPED_BLOCK_PREFIX + "." + blockId.getPath()) :
-			//Assume everyone else is not legacy
-			Text.translatable(GROUPED_BLOCK_PREFIX + "." + blockId.getNamespace() + "." + blockId.getPath());
-		
-		MutableText blockTypeName = Text.translatable(BLOCK_TYPE_PREFIX + "." + typeId);
-		
-		return Text.translatable(BLOCKTYPE_BLOCK_KEY, baseBlockName, blockTypeName);
-		
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/WallColumnBlock.java b/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/WallColumnBlock.java
deleted file mode 100644
index caafec5..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/WallColumnBlock.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.blocks;
-
-import com.mojang.serialization.MapCodec;
-import io.github.debuggyteam.architecture_extensions.api.BlockType.TypedGroupedBlock;
-import net.minecraft.block.Block;
-import net.minecraft.block.BlockState;
-import net.minecraft.block.HorizontalFacingBlock;
-import net.minecraft.block.ShapeContext;
-import net.minecraft.fluid.FluidState;
-import net.minecraft.fluid.Fluids;
-import net.minecraft.item.ItemPlacementContext;
-import net.minecraft.state.StateManager;
-import net.minecraft.state.property.BooleanProperty;
-import net.minecraft.state.property.Properties;
-import net.minecraft.text.MutableText;
-import net.minecraft.util.math.BlockPos;
-import net.minecraft.util.math.Direction;
-import net.minecraft.util.shape.VoxelShape;
-import net.minecraft.util.shape.VoxelShapes;
-import net.minecraft.world.BlockView;
-import net.minecraft.world.World;
-import net.minecraft.world.WorldAccess;
-
-public class WallColumnBlock extends HorizontalFacingBlock implements TypedGrouped {
-	public static final BooleanProperty CAPPED = BooleanProperty.of("cap");
-	public static final BooleanProperty WATERLOGGED = Properties.WATERLOGGED;
-
-	protected static final VoxelShape NORTH_BOX = Block.createCuboidShape(2.0, 0.0, 0.0, 14.0, 16.0, 4.0);
-	protected static final VoxelShape SOUTH_BOX = Block.createCuboidShape(2.0, 0.0, 12.0, 14.0, 16.0, 16.0);
-	protected static final VoxelShape EAST_BOX = Block.createCuboidShape(12.0, 0.0, 2.0, 16.0, 16.0, 14.0);
-	protected static final VoxelShape WEST_BOX = Block.createCuboidShape(0.0, 0.0, 2.0, 4.0, 16.0, 14.0);
-
-	protected final TypedGroupedBlock typedGroupedBlock;
-	
-	// This is a super class of settings.
-	public WallColumnBlock(Settings settings, TypedGroupedBlock typedGroupedBlock) {
-		super(settings);
-		setDefaultState(this.stateManager.getDefaultState().with(Properties.HORIZONTAL_FACING, Direction.NORTH).with(CAPPED, false));
-		this.setDefaultState(this.getDefaultState().with(WATERLOGGED, false)); // Thanks LambdAurora!
-		this.typedGroupedBlock = typedGroupedBlock;
-	}
-	
-	public WallColumnBlock(Block baseBlock, Settings settings, TypedGroupedBlock typedGroupedBlock) {
-		this(settings, typedGroupedBlock);
-	}
-
-	// Both of the following blocks of code below deals with block collision.
-	@Override
-	public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) {
-		Direction cardinalDir = state.get(FACING);
-		return switch (cardinalDir) {
-			case NORTH -> NORTH_BOX;
-			case SOUTH -> SOUTH_BOX;
-			case EAST -> EAST_BOX;
-			case WEST -> WEST_BOX;
-			default -> VoxelShapes.fullCube();
-		};
-	}
-
-	// Deals with placing the block properly in accordance to direction.
-	@Override
-	public BlockState getPlacementState(ItemPlacementContext context) {
-		World world = context.getWorld();
-		BlockPos pos = context.getBlockPos();
-		return this.getDefaultState().with(Properties.HORIZONTAL_FACING, context.getPlayerFacing()).with(CAPPED, world.getBlockState(pos.up()).getBlock() != this).with(WATERLOGGED, context.getWorld().getFluidState(context.getBlockPos()).getFluid() == Fluids.WATER);
-	}
-
-	@Override
-	public BlockState getStateForNeighborUpdate(BlockState state, Direction dir, BlockState adjacentState, WorldAccess world, BlockPos pos, BlockPos adjacentPos) {
-		if (state.get(WATERLOGGED)) world.scheduleFluidTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world));
-
-		return state.with(CAPPED, world.getBlockState(pos.up()).getBlock() != this);
-	}
-
-	// Deals with block waterlogging. Thanks acikek!
-	@Override
-	public FluidState getFluidState(BlockState state) {
-		return state.get(WATERLOGGED) ? Fluids.WATER.getStill(false) : Fluids.EMPTY.getDefaultState();
-	}
-
-	@Override
-	protected void appendProperties(StateManager.Builder<Block, BlockState> builder) {
-		builder.add(Properties.HORIZONTAL_FACING);
-		builder.add(WATERLOGGED);
-		builder.add(CAPPED);
-	}
-
-	@Override
-	public TypedGroupedBlock getTypedGroupedBlock() {
-		return typedGroupedBlock;
-	}
-	
-	@Override
-	public MutableText getName() {
-		return getServerTranslation();
-	}
-	
-	@Override
-	protected MapCodec<? extends HorizontalFacingBlock> getCodec() {
-		return null;
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/WallPostBlock.java b/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/WallPostBlock.java
deleted file mode 100644
index a9670a1..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/blocks/WallPostBlock.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.blocks;
-
-import io.github.debuggyteam.architecture_extensions.api.BlockType.TypedGroupedBlock;
-import net.minecraft.block.Block;
-import net.minecraft.block.BlockState;
-import net.minecraft.block.PillarBlock;
-import net.minecraft.block.ShapeContext;
-import net.minecraft.fluid.FluidState;
-import net.minecraft.fluid.Fluids;
-import net.minecraft.item.ItemPlacementContext;
-import net.minecraft.state.StateManager;
-import net.minecraft.state.property.BooleanProperty;
-import net.minecraft.state.property.EnumProperty;
-import net.minecraft.state.property.Properties;
-import net.minecraft.text.MutableText;
-import net.minecraft.util.BlockRotation;
-import net.minecraft.util.math.BlockPos;
-import net.minecraft.util.math.Direction;
-import net.minecraft.util.shape.VoxelShape;
-import net.minecraft.world.BlockView;
-import net.minecraft.world.WorldAccess;
-
-public class WallPostBlock extends PillarBlock implements TypedGrouped {
-	public static final EnumProperty<Direction.Axis> AXIS = Properties.AXIS;
-	public static final BooleanProperty WATERLOGGED = Properties.WATERLOGGED;
-
-	protected static final VoxelShape X_AXIS_BOX = Block.createCuboidShape(0.0, 4.0, 4.0, 16.0, 12.0, 12.0);
-	protected static final VoxelShape Y_AXIS_BOX = Block.createCuboidShape(4.0, 0.0, 4.0, 12.0, 16.0, 12.0);
-	protected static final VoxelShape Z_AXIS_BOX = Block.createCuboidShape(4.0, 4.0, 0.0, 12.0, 12.0, 16.0);
-	
-	protected final TypedGroupedBlock typedGroupedBlock;
-
-	public WallPostBlock(Settings settings, TypedGroupedBlock typedGroupedBlock) {
-		super(settings);
-		setDefaultState(this.stateManager.getDefaultState().with(AXIS, Direction.Axis.Y));
-		this.setDefaultState(this.getDefaultState().with(WATERLOGGED, false)); // Thanks LambdAurora!
-		this.typedGroupedBlock = typedGroupedBlock;
-	}
-	
-	public WallPostBlock(Block baseBlock, Settings settings, TypedGroupedBlock typedGroupedBlock) {
-		this(settings, typedGroupedBlock);
-	}
-
-	// The following deals with block rotation
-	@Override
-	public BlockState rotate(BlockState state, BlockRotation rotation)  {
-		return changeRotation(state, rotation);
-	}
-
-	public static BlockState changeRotation(BlockState state, BlockRotation rotation) {
-		return switch (rotation) {
-			case COUNTERCLOCKWISE_90, CLOCKWISE_90 -> switch (state.get(AXIS)) {
-				case X -> state.with(AXIS, Direction.Axis.Z);
-				case Z -> state.with(AXIS, Direction.Axis.X);
-				default -> state;
-			};
-			default -> state;
-		};
-	}
-
-	// The following block of code below deals with block collision.
-	@Override
-	public VoxelShape getOutlineShape(BlockState state, BlockView view, BlockPos pos, ShapeContext context) {
-		Direction.Axis cardinalDir = state.get(AXIS);
-		return switch (cardinalDir) {
-			case X -> X_AXIS_BOX;
-			case Y -> Y_AXIS_BOX;
-			case Z -> Z_AXIS_BOX;
-		};
-	}
-
-	// Deals with placing the block properly in accordance to direction.
-	@Override
-	public BlockState getPlacementState(ItemPlacementContext context) {
-		return this.getDefaultState().with(AXIS, context.getSide().getAxis()).with(WATERLOGGED, context.getWorld().getFluidState(context.getBlockPos()).getFluid() == Fluids.WATER);
-	}
-
-	@Override
-	public FluidState getFluidState(BlockState state) {
-		return state.get(WATERLOGGED) ? Fluids.WATER.getStill(false) : Fluids.EMPTY.getDefaultState();
-	}
-
-	@Override
-	public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState neighborState, WorldAccess world, BlockPos pos, BlockPos neighborPos) {
-		if (state.get(WATERLOGGED)) world.scheduleFluidTick(pos, Fluids.WATER, Fluids.WATER.getTickRate(world));
-
-		return state;
-	}
-
-	@Override
-	protected void appendProperties(StateManager.Builder<Block, BlockState> stateManager) {
-		stateManager.add(AXIS, WATERLOGGED);
-	}
-
-	@Override
-	public TypedGroupedBlock getTypedGroupedBlock() {
-		return typedGroupedBlock;
-	}
-	
-	@Override
-	public MutableText getName() {
-		return getServerTranslation();
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/client/ArchitectureExtensionsClient.java b/src/main/java/io/github/debuggyteam/architecture_extensions/client/ArchitectureExtensionsClient.java
deleted file mode 100644
index ee91c16..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/client/ArchitectureExtensionsClient.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.client;
-
-import io.github.debuggyteam.architecture_extensions.ArchitectureExtensions;
-import io.github.debuggyteam.architecture_extensions.resource.DataGeneration;
-import io.github.debuggyteam.architecture_extensions.util.SafeRenderLayer;
-import net.minecraft.registry.Registries;
-import net.minecraft.resource.ResourceType;
-import org.jetbrains.annotations.NotNull;
-import org.quiltmc.loader.api.ModContainer;
-import org.quiltmc.qsl.base.api.entrypoint.client.ClientModInitializer;
-import org.quiltmc.qsl.block.extensions.api.client.BlockRenderLayerMap;
-import org.quiltmc.qsl.resource.loader.api.ResourceLoader;
-import org.quiltmc.qsl.resource.loader.api.PackRegistrationContext;
-
-public class ArchitectureExtensionsClient implements ClientModInitializer, PackRegistrationContext.Callback {
-	@Override
-	public void onInitializeClient(ModContainer mod) {
-		DataGeneration.BLOCKS.forEach(block -> {
-			SafeRenderLayer renderLayer = SafeRenderLayer.choose(
-					block.type().renderLayer(),
-					block.groupedBlock().renderLayer()
-					);
-			if (renderLayer != SafeRenderLayer.SOLID) {
-				BlockRenderLayerMap.put(renderLayer.get(), Registries.BLOCK.get(block.id()));
-			}
-		});
-
-		ResourceLoader.get(ResourceType.CLIENT_RESOURCES).getRegisterDefaultPackEvent().register(this);
-	}
-
-	@Override
-	public void onRegisterPack(@NotNull PackRegistrationContext context) {
-		DataGeneration.generate(ResourceType.CLIENT_RESOURCES);
-		context.addResourcePack(ArchitectureExtensions.RESOURCE_PACK);
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/resource/DataGeneration.java b/src/main/java/io/github/debuggyteam/architecture_extensions/resource/DataGeneration.java
deleted file mode 100644
index 147d267..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/resource/DataGeneration.java
+++ /dev/null
@@ -1,187 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.resource;
-
-import java.io.FileNotFoundException;
-import java.util.Set;
-
-import org.jetbrains.annotations.Nullable;
-import org.quiltmc.qsl.block.content.registry.api.BlockContentRegistries;
-
-import com.google.common.collect.Sets;
-
-import io.github.debuggyteam.architecture_extensions.ArchitectureExtensions;
-import io.github.debuggyteam.architecture_extensions.api.BlockType;
-import io.github.debuggyteam.architecture_extensions.api.RecipeConfigurator;
-import io.github.debuggyteam.architecture_extensions.api.TextureConfiguration;
-import io.github.debuggyteam.architecture_extensions.api.BlockType.TypedGroupedBlock;
-import io.github.debuggyteam.architecture_extensions.resource.json.BlockStateTemplate;
-import io.github.debuggyteam.architecture_extensions.resource.json.LootTableTemplate;
-import io.github.debuggyteam.architecture_extensions.resource.json.ModelTemplate;
-import io.github.debuggyteam.architecture_extensions.resource.json.RecipeTemplate;
-import io.github.debuggyteam.architecture_extensions.resource.json.TagTemplate;
-import io.github.debuggyteam.architecture_extensions.resource.json.LootTableTemplate.JPool;
-import io.github.debuggyteam.architecture_extensions.resource.json.LootTableTemplate.JPool.JCondition;
-import net.minecraft.registry.Registries;
-import net.minecraft.resource.ResourceType;
-import net.minecraft.util.Identifier;
-
-public final class DataGeneration {
-	public static final Set<BlockType.TypedGroupedBlock> BLOCKS = Sets.newHashSet();
-
-	private static final String GROUP_PLACEHOLDER = "group";
-	private static final String BASE_PLACEHOLDER = "base";
-	private static final String RESULT_PLACEHOLDER = "result";
-	private static int serverLoadCount = -1;
-
-	private static final String MODEL_PLACEHOLDER = "model";
-	private static int clientLoadCount = -1;
-
-	private static @Nullable String getModelTemplate(BlockType type, String variant) {
-		try {
-			return ResourceUtils.getResourceAsString(ArchitectureExtensions.MOD_CONTAINER, ResourceType.CLIENT_RESOURCES,
-				"assets/architecture_extensions/templates/model/block/" + "template_" + type.toString() + variant + ".json");
-		} catch (FileNotFoundException e) {
-			ArchitectureExtensions.LOGGER.error("The model template for the " + type.toString() + " block type can not be found");
-			return null;
-		} catch (Exception e) {
-			ArchitectureExtensions.LOGGER.error("Exception while trying to load the model template for the " + type.toString() + " block type : ", e);
-			return null;
-		}
-	}
-
-	private static @Nullable String getBlockStateTemplate(BlockType type) {
-		try {
-			return ResourceUtils.getResourceAsString(ArchitectureExtensions.MOD_CONTAINER, ResourceType.CLIENT_RESOURCES,
-				"assets/architecture_extensions/templates/blockstate/" + "template_" + type.toString() + ".json");
-		} catch (FileNotFoundException e) {
-			ArchitectureExtensions.LOGGER.error("The blockstate template for the " + type.toString() + " block type can not be found");
-			return null;
-		} catch (Exception e) {
-			ArchitectureExtensions.LOGGER.error("Exception while trying to load the blockstate template for the " + type.toString() + " block type : ", e);
-			return null;
-		}
-	}
-
-	private static @Nullable String getRecipeTemplate(String id) {
-		try {
-			return ResourceUtils.getResourceAsString(ArchitectureExtensions.MOD_CONTAINER, ResourceType.SERVER_DATA,
-				"data/architecture_extensions/templates/recipe/" + id + ".json");
-		} catch (FileNotFoundException e) {
-			ArchitectureExtensions.LOGGER.error("The recipe template for " + id + " can not be found");
-			return null;
-		} catch (Exception e) {
-			ArchitectureExtensions.LOGGER.error("Exception while trying to load the recipe template for " + id + " : ", e);
-			return null;
-		}
-	}
-
-	private static void generateModels(TypedGroupedBlock block) {
-		var modelId = new Identifier(block.id().getNamespace(), "models/block/" + block.id().getPath());
-
-		for (String variant : block.type().variants()) {
-			if (!variant.isBlank()) variant = "_" + variant;
-			var rawModel = getModelTemplate(block.type(), variant);
-			if (rawModel == null) continue;
-
-			var model = new ModelTemplate(rawModel);
-
-			var textureConfiguration = block.groupedBlock().textureConfiguration();
-
-			for (String textureId : TextureConfiguration.TEXTURE_IDS) {
-				if (rawModel.contains(textureId)) model.addTexture(textureId, textureConfiguration.apply(block.type(), textureId));
-			}
-
-			ArchitectureExtensions.RESOURCE_PACK.putTextAsync(ResourceType.CLIENT_RESOURCES, new Identifier(modelId.getNamespace(), modelId.getPath() + variant + ".json"), path -> model.serialize().toString());
-		}
-
-		var itemModel = "{\"parent\":\"" + modelId.toString().replaceFirst("models/", "") + "\"}";
-		ArchitectureExtensions.RESOURCE_PACK.putText(ResourceType.CLIENT_RESOURCES, new Identifier(modelId.getNamespace(), modelId.getPath().replaceFirst("block", "item") + ".json"), itemModel);
-	}
-
-	private static void generateBlockState(TypedGroupedBlock block) {
-		var rawBlockState = getBlockStateTemplate(block.type());
-		if (rawBlockState == null) return;
-		var blockState = new BlockStateTemplate(rawBlockState);
-		blockState.addConstant(MODEL_PLACEHOLDER, new Identifier(block.id().getNamespace(), "block/" + block.id().getPath()).toString());
-		ArchitectureExtensions.RESOURCE_PACK.putTextAsync(ResourceType.CLIENT_RESOURCES, new Identifier(block.id().getNamespace(), "blockstates/" + block.id().getPath() + ".json"), path -> blockState.serialize().toString());
-	}
-
-	private static void generateMineableByPickaxeTag() {
-		var tag = TagTemplate.DEFAULT.get();
-		BLOCKS.forEach(block -> { if (BlockContentRegistries.STRIPPABLE.get(block.groupedBlock().baseBlock().get()).isEmpty()) tag.addValue(block.id().toString()); });
-		ArchitectureExtensions.RESOURCE_PACK.putTextAsync(ResourceType.SERVER_DATA, new Identifier("tags/blocks/mineable/pickaxe.json"), path -> tag.serialize().toString());
-	}
-
-	private static void generateMineableByAxeTag() {
-		var tag = TagTemplate.DEFAULT.get();
-		BLOCKS.forEach(block -> { if (BlockContentRegistries.STRIPPABLE.get(block.groupedBlock().baseBlock().get()).isPresent()) tag.addValue(block.id().toString()); });
-		ArchitectureExtensions.RESOURCE_PACK.putTextAsync(ResourceType.SERVER_DATA, new Identifier("tags/blocks/mineable/axe.json"), path -> tag.serialize().toString());
-	}
-
-	private static void generateNeedsStoneToolTag() {
-		var tag = TagTemplate.DEFAULT.get();
-		BLOCKS.forEach(block -> tag.addValue(block.id().toString()));
-		ArchitectureExtensions.RESOURCE_PACK.putTextAsync(ResourceType.SERVER_DATA, new Identifier("tags/blocks/needs_stone_tool.json"), path -> tag.serialize().toString());
-	}
-
-	private static void generateLootTables() {
-		for (TypedGroupedBlock block : BLOCKS) {
-			var lootTable = LootTableTemplate.BLOCK_BREAK.get();
-			lootTable.addPool(JPool.ofItems(block.id()).addCondition(JCondition.SURVIVES_EXPLOSION.get()));
-			ArchitectureExtensions.RESOURCE_PACK.putTextAsync(ResourceType.SERVER_DATA, new Identifier(block.id().getNamespace(), "loot_tables/blocks/" + block.id().getPath() + ".json"), path -> lootTable.serialize().toString());
-		}
-	}
-
-	private static void generateRecipes() {
-		final Set<RecipeConfigurator.RecipeTemplate> templates = Sets.newHashSet();
-		for (TypedGroupedBlock block : BLOCKS) {
-			block.groupedBlock().recipeConfigurator().accept(block.type(), templates::add);
-			for (RecipeConfigurator.RecipeTemplate template : templates) {
-				final var rawRecipe = getRecipeTemplate(template.id());
-				if (rawRecipe == null) continue;
-				final var recipe = new RecipeTemplate(rawRecipe);
-
-				recipe.addConstant(GROUP_PLACEHOLDER, block.groupedBlock().id().toString());
-				recipe.addConstant(BASE_PLACEHOLDER, Registries.BLOCK.getId(block.groupedBlock().baseBlock().get()).toString());
-				recipe.addConstant(RESULT_PLACEHOLDER, block.id().toString());
-
-				final var path = template.tablesaw() ? "custom_recipes/tablesaw/" : "recipes/";
-				final var prefix = template.simple() ? "" : block.id().getPath() + "_";
-				ArchitectureExtensions.RESOURCE_PACK.putTextAsync(ResourceType.SERVER_DATA, new Identifier(block.id().getNamespace(), path + prefix + template.id() + ".json"), blah -> recipe.serialize().toString());
-			}
-			templates.clear();
-		}
-	}
-
-	public static void generate(ResourceType resourceType) {
-		if (resourceType == ResourceType.SERVER_DATA) {
-			// needs to be a count since for some reason server data tries to get generated 4 TIMES??!??!!?!
-			++serverLoadCount;
-			if (serverLoadCount % 4 == 1) return;
-			if (serverLoadCount > 4) ResourceUtils.refreshCaches(ResourceType.SERVER_DATA);
-
-			generateMineableByPickaxeTag();
-			generateMineableByAxeTag();
-			generateNeedsStoneToolTag();
-			generateLootTables();
-			generateRecipes();
-
-			return;
-		}
-
-		if (resourceType == ResourceType.CLIENT_RESOURCES) {
-			// needs to be a count since for some reason client resources try to get generated 2 times!
-			++clientLoadCount;
-			if (clientLoadCount % 2 == 1) return;
-			if (clientLoadCount > 1) ResourceUtils.refreshCaches(ResourceType.CLIENT_RESOURCES);
-
-			for (TypedGroupedBlock block : BLOCKS) {
-				generateModels(block);
-				generateBlockState(block);
-			}
-		}
-	}
-
-	public static void collect(TypedGroupedBlock block) {
-		BLOCKS.add(block);
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/resource/ResourceUtils.java b/src/main/java/io/github/debuggyteam/architecture_extensions/resource/ResourceUtils.java
deleted file mode 100644
index 3fdb1a7..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/resource/ResourceUtils.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.resource;
-
-import java.io.FileNotFoundException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-
-import org.jetbrains.annotations.Nullable;
-import org.quiltmc.loader.api.ModContainer;
-
-import com.google.common.collect.Sets;
-
-import io.github.debuggyteam.architecture_extensions.ArchitectureExtensions;
-import io.github.debuggyteam.architecture_extensions.util.LRUHashMap;
-import net.minecraft.resource.ResourceType;
-
-public final class ResourceUtils {
-	// Field to get around weird java crap with lambdas
-	private static Exception exception;
-
-	private static final LRUHashMap<CacheKey, Cache> CACHES = new LRUHashMap<>(400);
-
-	static void refreshCaches(ResourceType resourceType) {
-		final var removing = Sets.newHashSet();
-		CACHES.keySet().forEach(key -> {
-			if (key.resourceType == resourceType) {
-				final var refreshedCache = CACHES.get(key).getRefreshed();
-				if (refreshedCache == null) removing.add(key);
-				CACHES.replace(key, refreshedCache);
-			}
-		});
-		removing.forEach(CACHES::remove);
-	}
-
-	static String getResourceAsString(ModContainer resourceOwner, ResourceType resourceType, String resourceName) throws Exception {
-		final var cache = loadOrGetCache(resourceOwner, resourceType, resourceName);
-		if (exception != null) throw exception;
-		return cache.content;
-	}
-
-	private static Cache loadOrGetCache(ModContainer resourceOwner, ResourceType resourceType, String resourceName) throws Exception {
-		exception = null;
-
-		// use computeIfAbsent to avoid unnecessary object creation
-		return CACHES.computeIfAbsent(new CacheKey(resourceOwner, resourceType, resourceName), k -> {
-			try {
-				return Cache.withInitialContent(resourceOwner.getPath(resourceName).toAbsolutePath());
-			} catch (Exception e) {
-				exception = e;
-			}
-			return null;
-		});
-	}
-	
-	private static record CacheKey(ModContainer resourceOwner, ResourceType resourceType, String resourceName) { }
-
-	private static record Cache(Path resourcePath, String content) {
-		public static Cache withInitialContent(Path resourcePath) throws Exception {
-			return new Cache(resourcePath, Files.readString(resourcePath));
-		}
-
-		public @Nullable Cache getRefreshed() {
-			try {
-				return new Cache(resourcePath, Files.readString(resourcePath));
-			} catch (FileNotFoundException e) {
-				return null;
-			} catch (Exception e) {
-				ArchitectureExtensions.LOGGER.error("Exception while refreshing resource cache, falling back to old data : ", e);
-				return this;
-			}
-		}
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/resource/json/BaseTemplateJson.java b/src/main/java/io/github/debuggyteam/architecture_extensions/resource/json/BaseTemplateJson.java
deleted file mode 100644
index d0cd1ee..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/resource/json/BaseTemplateJson.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.resource.json;
-
-import java.io.IOException;
-import java.io.StringReader;
-import java.util.regex.Pattern;
-
-import com.google.gson.Gson;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParseException;
-import com.google.gson.stream.JsonReader;
-
-import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap;
-import it.unimi.dsi.fastutil.objects.Object2ObjectMap;
-
-abstract class BaseTemplateJson<T> {
-
-	private static final Gson GSON = new Gson();
-
-	private final String raw;
-
-	private final Object2ObjectMap<String, String> constants = new Object2ObjectArrayMap<>();
-
-	protected BaseTemplateJson(String raw) {
-		this.raw = raw;
-	}
-
-	@SuppressWarnings("unchecked")
-	public T addConstant(String id, String value) {
-		this.constants.putIfAbsent(id, value);
-		return (T) this;
-	}
-
-	public JsonObject serialize() {
-		String modifiedRaw = raw.stripIndent();
-		for (Object2ObjectMap.Entry<String, String> entry : constants.object2ObjectEntrySet()) {
-			modifiedRaw = modifiedRaw.replaceAll(Pattern.quote("{" + entry.getKey() + "}"), entry.getValue());
-		}
-		return deserialize(modifiedRaw);
-	}
-
-	protected static JsonObject deserialize(String raw) {
-		try {
-			return GSON.getAdapter(JsonObject.class).read(new JsonReader(new StringReader(raw)));
-		} catch (IOException e) {
-			throw new JsonParseException(e);
-		}
-	}
-
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/resource/json/BlockStateTemplate.java b/src/main/java/io/github/debuggyteam/architecture_extensions/resource/json/BlockStateTemplate.java
deleted file mode 100644
index bb3db29..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/resource/json/BlockStateTemplate.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.resource.json;
-
-public final class BlockStateTemplate extends BaseTemplateJson<BlockStateTemplate> {
-
-	public BlockStateTemplate(String raw) {
-		super(raw);
-	}
-
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/resource/json/LootTableTemplate.java b/src/main/java/io/github/debuggyteam/architecture_extensions/resource/json/LootTableTemplate.java
deleted file mode 100644
index d56c092..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/resource/json/LootTableTemplate.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.resource.json;
-
-import java.util.Set;
-import java.util.function.Supplier;
-
-import com.google.common.collect.Sets;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonObject;
-
-import net.minecraft.util.Identifier;
-
-public final class LootTableTemplate extends BaseTemplateJson<LootTableTemplate> {
-
-	public static final Supplier<LootTableTemplate> BLOCK_BREAK = () -> new LootTableTemplate("{\"type\":\"minecraft:block\",\"pools\":[]}");
-
-	private final Set<JPool> pools = Sets.newHashSet();
-
-	private LootTableTemplate(String raw) {
-		super(raw);
-	}
-
-	public LootTableTemplate addPool(JPool pool) {
-		pools.add(pool);
-		return this;
-	}
-
-	@Override
-	public JsonObject serialize() {
-		final JsonObject json = super.serialize();
-		final JsonArray jsonPools = json.get("pools").getAsJsonArray();
-		pools.forEach(pool -> jsonPools.add(pool.serialize()));
-		return json;
-	}
-
-	public static final class JPool extends BaseTemplateJson<JPool> {
-
-		private int rolls = 1;
-		private final Set<JEntry> entries = Sets.newHashSet();
-		private final Set<JCondition> conditions = Sets.newHashSet();
-
-		private JPool(String raw) {
-			super(raw);
-		}
-
-		public static JPool ofItems(Identifier... ids) {
-			var pool = new JPool("{\"entries\":[],\"conditions\":[]}");
-			for (Identifier id : ids) { pool.addEntry(JEntry.ofItem(id)); }
-			return pool;
-		}
-
-		public JPool addEntry(JEntry entry) {
-			entries.add(entry);
-			return this;
-		}
-
-		public JPool addCondition(JCondition condition) {
-			conditions.add(condition);
-			return this;
-		}
-
-		public JPool setRolls(int rolls) {
-			if (rolls < 0) rolls = 0;
-			this.rolls = rolls;
-			return this;
-		}
-
-		@Override
-		public JsonObject serialize() {
-			final JsonObject json = super.serialize();
-			final JsonArray jsonEntries = json.get("entries").getAsJsonArray();
-			final JsonArray jsonConditions = json.get("conditions").getAsJsonArray();
-			json.addProperty("rolls", rolls);
-			entries.forEach(entry -> jsonEntries.add(entry.serialize()));
-			conditions.forEach(condition -> jsonConditions.add(condition.serialize()));
-			return json;
-		}
-
-		public static final class JEntry extends BaseTemplateJson<JEntry> {
-
-			private JEntry(String raw) {
-				super(raw);
-			}
-
-			public static JEntry ofItem(Identifier id) {
-				return new JEntry("{\"type\":\"minecraft:item\",\"name\":\"" + id.toString() + "\"}");
-			}
-
-		}
-
-		public static final class JCondition extends BaseTemplateJson<JCondition> {
-
-			public static final Supplier<JCondition> SURVIVES_EXPLOSION = () -> new JCondition("{\"condition\":\"minecraft:survives_explosion\"}");
-
-			private JCondition(String raw) {
-				super(raw);
-			}
-
-		}
-
-	}
-
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/resource/json/ModelTemplate.java b/src/main/java/io/github/debuggyteam/architecture_extensions/resource/json/ModelTemplate.java
deleted file mode 100644
index d26e499..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/resource/json/ModelTemplate.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.resource.json;
-
-import com.google.gson.JsonObject;
-
-import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap;
-import it.unimi.dsi.fastutil.objects.Object2ObjectMap;
-
-public final class ModelTemplate extends BaseTemplateJson<ModelTemplate> {
-
-	private final Object2ObjectMap<String, String> textures = new Object2ObjectArrayMap<>();
-
-	public ModelTemplate(String raw) {
-		super(raw);
-	}
-
-	public ModelTemplate addTexture(String textureId, String texture) {
-		textures.putIfAbsent(textureId, texture);
-		return this;
-	}
-
-	@Override
-	public JsonObject serialize() {
-		final JsonObject json = super.serialize();
-		final JsonObject jsonTextures = json.get("textures").getAsJsonObject();
-		textures.object2ObjectEntrySet().forEach(entry -> jsonTextures.addProperty(entry.getKey(), entry.getValue()));
-		return json;
-	}
-
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/resource/json/RecipeTemplate.java b/src/main/java/io/github/debuggyteam/architecture_extensions/resource/json/RecipeTemplate.java
deleted file mode 100644
index 0427c95..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/resource/json/RecipeTemplate.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.resource.json;
-
-public final class RecipeTemplate extends BaseTemplateJson<RecipeTemplate> {
-
-	public RecipeTemplate(String raw) {
-		super(raw);
-	}
-
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/resource/json/TagTemplate.java b/src/main/java/io/github/debuggyteam/architecture_extensions/resource/json/TagTemplate.java
deleted file mode 100644
index 251df25..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/resource/json/TagTemplate.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.resource.json;
-
-import java.util.Set;
-import java.util.function.Supplier;
-
-import com.google.common.collect.Sets;
-import com.google.gson.JsonArray;
-import com.google.gson.JsonObject;
-
-public final class TagTemplate extends BaseTemplateJson<TagTemplate> {
-
-	public static final Supplier<TagTemplate> DEFAULT = () -> new TagTemplate("{\"replace\":false,\"values\":[]}");
-
-	private final Set<String> values = Sets.newHashSet();
-
-	public TagTemplate(String raw) {
-		super(raw);
-	}
-
-	public TagTemplate addValue(String value) {
-		values.add(value);
-		return this;
-	}
-
-	@Override
-	public JsonObject serialize() {
-		final JsonObject json = super.serialize();
-		final JsonArray jsonValues = json.get("values").getAsJsonArray();
-		values.forEach(jsonValues::add);
-		return json;
-	}
-
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/staticdata/BlockGroupSchema.java b/src/main/java/io/github/debuggyteam/architecture_extensions/staticdata/BlockGroupSchema.java
deleted file mode 100644
index 8a957f4..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/staticdata/BlockGroupSchema.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.staticdata;
-
-import java.util.HashSet;
-import java.util.Locale;
-import java.util.Optional;
-import java.util.Set;
-import java.util.function.Function;
-import java.util.function.Supplier;
-
-import com.google.gson.GsonBuilder;
-
-import io.github.debuggyteam.architecture_extensions.ArchitectureExtensions;
-import io.github.debuggyteam.architecture_extensions.api.BlockGroup;
-import io.github.debuggyteam.architecture_extensions.api.BlockType;
-import io.github.debuggyteam.architecture_extensions.api.MetaBlockType;
-import io.github.debuggyteam.architecture_extensions.api.RecipeConfigurator;
-import io.github.debuggyteam.architecture_extensions.api.TextureConfiguration;
-import io.github.debuggyteam.architecture_extensions.util.MapColors;
-import io.github.debuggyteam.architecture_extensions.util.SafeRenderLayer;
-import net.minecraft.block.Block;
-import net.minecraft.block.Blocks;
-import net.minecraft.block.MapColor;
-import net.minecraft.registry.Registries;
-import net.minecraft.util.Identifier;
-
-public class BlockGroupSchema {
-	public String name;
-	public String base_block;
-	public String textures;
-	public String recipes;
-	public String map_color;
-	public String[] types_to_generate;
-	public String only_if_present;
-	public String render_layer;
-	
-	public BlockGroupSchema() {
-		name = null;
-		base_block = "minecraft:air";
-		types_to_generate = new String[0];
-	}
-
-	@SuppressWarnings("unchecked")
-	private static <T> Optional<T> reflectField(Class<?> originClass, String name) {
-		try {
-			return Optional.of((T) originClass.getDeclaredField(name).get(null));
-		} catch (Exception ex) {
-			return Optional.empty();
-		}
-	}
-	
-	public BlockGroup createBlockGroup() {
-		Identifier baseBlockId = new Identifier(base_block);
-		Supplier<Block> getter = () -> {
-			Block block = Registries.BLOCK.get(baseBlockId);
-			return (block == Blocks.AIR) ? null : block;
-		};
-		Identifier baseId = baseBlockId;
-		if (name != null) baseId = new Identifier(baseBlockId.getNamespace(), name);
-
-		TextureConfiguration textureConfig = (textures.contains(":")) ? TextureConfiguration.create(it -> textures, it -> textures, it -> textures, it -> textures) :
-			BlockGroupSchema.<Function<Identifier, TextureConfiguration>>reflectField(TextureConfiguration.class, textures.toUpperCase(Locale.ROOT))
-				.orElse(TextureConfiguration.ALL).apply(baseId);
-		RecipeConfigurator recipeConfig = BlockGroupSchema.<RecipeConfigurator>reflectField(RecipeConfigurator.class, recipes.toUpperCase(Locale.ROOT))
-			.orElse(RecipeConfigurator.STONECUTTER);
-		Optional<MapColor> mapColor = MapColors.byName(map_color);
-		
-		if (render_layer == null) render_layer = "solid";
-		SafeRenderLayer renderLayer = BlockGroupSchema.<SafeRenderLayer>reflectField(SafeRenderLayer.class, render_layer.toUpperCase(Locale.ROOT)).orElse(SafeRenderLayer.SOLID);
-		
-		return BlockGroup.of(
-				new BlockGroup.GroupedBlock(baseId, baseBlockId, getter, textureConfig, recipeConfig, mapColor, renderLayer)
-				);
-	}
-	
-	public Set<BlockType> getBlockTypes() {
-		Set<BlockType> result = new HashSet<>();
-		
-		for(String typeToGenerate : types_to_generate) {
-			if (typeToGenerate.startsWith("#")) {
-				typeToGenerate = typeToGenerate.substring(1);
-				Optional<MetaBlockType> metaType = BlockGroupSchema.<MetaBlockType>reflectField(MetaBlockType.class, typeToGenerate.toUpperCase(Locale.ROOT));
-				if (metaType.isPresent()) {
-					for(BlockType t : metaType.get().blockTypes()) result.add(t);
-				} else {
-					ArchitectureExtensions.LOGGER.warn("A file requested a nonexistent meta-type '#" + typeToGenerate + "'.");
-				}
-				continue;
-			}
-			
-			BlockType blockType = BlockGroupSchema.<BlockType>reflectField(BlockType.class, typeToGenerate.toUpperCase(Locale.ROOT)).orElse(null);
-			if (blockType != null) {
-				result.add(blockType);
-			} else {
-				ArchitectureExtensions.LOGGER.warn("A file requested a nonexistent block type '" + typeToGenerate + "'.");
-			}
-		}
-		
-		return result;
-	}
-	
-	@Override
-	public String toString() {
-		return new GsonBuilder().create().toJson(this);
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/util/LRUHashMap.java b/src/main/java/io/github/debuggyteam/architecture_extensions/util/LRUHashMap.java
deleted file mode 100644
index deb7fc5..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/util/LRUHashMap.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.util;
-
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-public final class LRUHashMap<K, V> extends LinkedHashMap<K, V> {
-	private final int maxSize;
-
-	public LRUHashMap(int maxSize) {
-		super((int) Math.ceil(maxSize / .75f) + 1, .75f);
-		this.maxSize = maxSize;
-	}
-
-	@Override
-	protected boolean removeEldestEntry(Map.Entry<K, V> entry) {
-		return size() > maxSize;
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/util/MapColors.java b/src/main/java/io/github/debuggyteam/architecture_extensions/util/MapColors.java
deleted file mode 100644
index 49ed1c4..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/util/MapColors.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.util;
-
-import java.util.Optional;
-
-import net.minecraft.block.MapColor;
-
-public class MapColors {
-	public static Optional<MapColor> byName(String name) {
-		return switch(name) {
-			case "none" -> Optional.empty();
-
-			case "grass" -> Optional.of(MapColor.GRASS);
-			case "sand" -> Optional.of(MapColor.SAND);
-			case "wool" -> Optional.of(MapColor.WOOL);
-			case "fire" -> Optional.of(MapColor.FIRE);
-			case "ice" -> Optional.of(MapColor.ICE);
-			case "metal" -> Optional.of(MapColor.METAL);
-			case "plant" -> Optional.of(MapColor.PLANT);
-			case "snow" -> Optional.of(MapColor.SNOW);
-			case "clay" -> Optional.of(MapColor.CLAY);
-			case "dirt" -> Optional.of(MapColor.DIRT);
-			case "stone" -> Optional.of(MapColor.STONE);
-			case "water" -> Optional.of(MapColor.WATER);
-			case "wood" -> Optional.of(MapColor.WOOD);
-			case "quartz" -> Optional.of(MapColor.QUARTZ);
-			case "orange" -> Optional.of(MapColor.ORANGE);
-			case "magenta" -> Optional.of(MapColor.MAGENTA);
-			case "light_blue" -> Optional.of(MapColor.LIGHT_BLUE);
-			case "yellow" -> Optional.of(MapColor.YELLOW);
-			case "lime" -> Optional.of(MapColor.LIME);
-			case "pink" -> Optional.of(MapColor.PINK);
-			case "gray" -> Optional.of(MapColor.GRAY);
-			case "light_gray" -> Optional.of(MapColor.LIGHT_GRAY);
-			case "cyan" -> Optional.of(MapColor.CYAN);
-			case "purple" -> Optional.of(MapColor.PURPLE);
-			case "blue" -> Optional.of(MapColor.BLUE);
-			case "brown" -> Optional.of(MapColor.BROWN);
-			case "green" -> Optional.of(MapColor.GREEN);
-			case "red" -> Optional.of(MapColor.RED);
-			case "black" -> Optional.of(MapColor.BLACK);
-			case "gold" -> Optional.of(MapColor.GOLD);
-			case "diamond" -> Optional.of(MapColor.DIAMOND);
-			case "lapis" -> Optional.of(MapColor.LAPIS);
-			case "emerald" -> Optional.of(MapColor.EMERALD);
-			case "podzol" -> Optional.of(MapColor.PODZOL);
-			case "nether" -> Optional.of(MapColor.NETHER);
-			case "white_terracotta" -> Optional.of(MapColor.WHITE_TERRACOTTA);
-			case "orange_terracotta" -> Optional.of(MapColor.ORANGE_TERRACOTTA);
-			case "magenta_terracotta" -> Optional.of(MapColor.MAGENTA_TERRACOTTA);
-			case "light_blue_terracotta" -> Optional.of(MapColor.LIGHT_BLUE_TERRACOTTA);
-			case "yellow_terracotta" -> Optional.of(MapColor.YELLOW_TERRACOTTA);
-			case "lime_terracotta" -> Optional.of(MapColor.LIME_TERRACOTTA);
-			case "pink_terracotta" -> Optional.of(MapColor.PINK_TERRACOTTA);
-			case "gray_terracotta" -> Optional.of(MapColor.GRAY_TERRACOTTA);
-			case "light_gray_terracotta" -> Optional.of(MapColor.LIGHT_GRAY_TERRACOTTA);
-			case "cyan_terracotta" -> Optional.of(MapColor.CYAN_TERRACOTTA);
-			case "purple_terracotta" -> Optional.of(MapColor.PURPLE_TERRACOTTA);
-			case "blue_terracotta" -> Optional.of(MapColor.BLUE_TERRACOTTA);
-			case "brown_terracotta" -> Optional.of(MapColor.BROWN_TERRACOTTA);
-			case "green_terracotta" -> Optional.of(MapColor.GREEN_TERRACOTTA);
-			case "red_terracotta" -> Optional.of(MapColor.RED_TERRACOTTA);
-			case "black_terracotta" -> Optional.of(MapColor.BLACK_TERRACOTTA);
-			case "crimson_nylium" -> Optional.of(MapColor.CRIMSON_NYLIUM);
-			case "crimson_stem" -> Optional.of(MapColor.CRIMSON_STEM);
-			case "crimson_hyphae" -> Optional.of(MapColor.CRIMSON_HYPHAE);
-			case "warped_nylium" -> Optional.of(MapColor.WARPED_NYLIUM);
-			case "warped_stem" -> Optional.of(MapColor.WARPED_STEM);
-			case "warped_hyphae" -> Optional.of(MapColor.WARPED_HYPHAE);
-			case "warped_wart_block" -> Optional.of(MapColor.WARPED_WART_BLOCK);
-			case "deepslate" -> Optional.of(MapColor.DEEPSLATE);
-			case "raw_iron" -> Optional.of(MapColor.RAW_IRON);
-			case "glow_lichen" -> Optional.of(MapColor.GLOW_LICHEN);
-
-			default -> Optional.of(MapColor.GRAY);
-		};
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/util/SafeRenderLayer.java b/src/main/java/io/github/debuggyteam/architecture_extensions/util/SafeRenderLayer.java
deleted file mode 100644
index 070e4ed..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/util/SafeRenderLayer.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.util;
-
-import java.util.function.Supplier;
-
-import org.quiltmc.loader.api.minecraft.ClientOnly;
-
-import net.minecraft.client.render.RenderLayer;
-
-public enum SafeRenderLayer implements @ClientOnly Supplier<RenderLayer> {
-	SOLID(0),
-	TRANSLUCENT(2),
-	CUTOUT(1);
-
-	private final int priority;
-
-	SafeRenderLayer(int priority) {
-		this.priority = priority;
-	}
-
-	@ClientOnly
-	@Override
-	public RenderLayer get() {
-		return switch (this) {
-			case SOLID -> RenderLayer.getSolid();
-			case TRANSLUCENT -> RenderLayer.getTranslucent();
-			case CUTOUT -> RenderLayer.getCutout();
-		};
-	}
-
-	public static SafeRenderLayer choose(SafeRenderLayer first, SafeRenderLayer second) {
-		if (second.priority > first.priority) return second;
-		return first;
-	}
-}
diff --git a/src/main/java/io/github/debuggyteam/architecture_extensions/util/VoxelHelper.java b/src/main/java/io/github/debuggyteam/architecture_extensions/util/VoxelHelper.java
deleted file mode 100644
index 2ac80b6..0000000
--- a/src/main/java/io/github/debuggyteam/architecture_extensions/util/VoxelHelper.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package io.github.debuggyteam.architecture_extensions.util;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import net.minecraft.util.shape.VoxelShape;
-
-public class VoxelHelper {
-	public static boolean testVoxel(VoxelShape shape, int x, int y, int z) {
-		
-		List<Boolean> hits = new ArrayList<>();
-		shape.forEachBox((x1, y1, z1, x2, y2, z2) -> {
-			int x1i = (int) (x1 * 16);
-			int y1i = (int) (y1 * 16);
-			int z1i = (int) (z1 * 16);
-			int x2i = (int) (x2 * 16);
-			int y2i = (int) (y2 * 16);
-			int z2i = (int) (z2 * 16);
-			
-			if (x >= x1i && y >= y1i && z >= z1i && x < x2i && y < y2i && z < z2i) {
-				hits.add(Boolean.valueOf(true));
-			}
-		});
-		
-		return !hits.isEmpty();
-	}
-}
diff --git a/src/main/resources/architecture_extensions.mixins.json b/src/main/resources/architecture_extensions.mixins.json
deleted file mode 100644
index c753759..0000000
--- a/src/main/resources/architecture_extensions.mixins.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-	"required": true,
-	"package": "io.github.debuggyteam.architecture_extensions.mixin",
-	"compatibilityLevel": "JAVA_17",
-	"mixins": [],
-	"client": [
-	],
-	"injectors": {
-		"defaultRequire": 1
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/blockstates/debuggy_block.json b/src/main/resources/assets/architecture_extensions/blockstates/debuggy_block.json
deleted file mode 100644
index 898e95b..0000000
--- a/src/main/resources/assets/architecture_extensions/blockstates/debuggy_block.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-    "variants": {
-        "": {
-            "model": "architecture_extensions:block/peculiar/debuggy_block"
-        }
-    }
-}
diff --git a/src/main/resources/assets/architecture_extensions/blockstates/end_rod_nubless.json b/src/main/resources/assets/architecture_extensions/blockstates/end_rod_nubless.json
deleted file mode 100644
index 0835f11..0000000
--- a/src/main/resources/assets/architecture_extensions/blockstates/end_rod_nubless.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
-	"variants": {
-		"facing=down": {
-			"model": "architecture_extensions:block/peculiar/end_rod_nubless",
-			"x": 180
-		},
-		"facing=east": {
-			"model": "architecture_extensions:block/peculiar/end_rod_nubless",
-			"x": 90,
-			"y": 90
-		},
-		"facing=north": {
-			"model": "architecture_extensions:block/peculiar/end_rod_nubless",
-			"x": 90
-		},
-		"facing=south": {
-			"model": "architecture_extensions:block/peculiar/end_rod_nubless",
-			"x": 90,
-			"y": 180
-		},
-		"facing=up": {
-			"model": "architecture_extensions:block/peculiar/end_rod_nubless"
-		},
-		"facing=west": {
-			"model": "architecture_extensions:block/peculiar/end_rod_nubless",
-			"x": 90,
-			"y": 270
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/blockstates/fake_end_portal_block.json b/src/main/resources/assets/architecture_extensions/blockstates/fake_end_portal_block.json
deleted file mode 100644
index 3e95ebc..0000000
--- a/src/main/resources/assets/architecture_extensions/blockstates/fake_end_portal_block.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-	"variants": {
-		"": { "model": "architecture_extensions:block/peculiar/fake_end_portal_block" }
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/lang/en_us.json b/src/main/resources/assets/architecture_extensions/lang/en_us.json
deleted file mode 100644
index e730198..0000000
--- a/src/main/resources/assets/architecture_extensions/lang/en_us.json
+++ /dev/null
@@ -1,178 +0,0 @@
-{
-	"itemGroup.architecture_extensions.building_blocks": "Arch-Ex Building Blocks",
-
-	"block.architecture_extensions.end_rod_nubless": "End Rod Nubless",
-	"block.architecture_extensions.debuggy_block": "Oddly Colored Block",
-	"block.architecture_extensions.fake_end_portal_block": "Starry Night Sky Block",
-
-	"architecture_extensions.block_type_block": "%s %s",
-
-	"architecture_extensions.block_type.arch": "Arch",
-	"architecture_extensions.block_type.round_arch": "Arch",
-	"architecture_extensions.block_type.beam": "Beam",
-	"architecture_extensions.block_type.crown_molding": "Crown Molding",
-	"architecture_extensions.block_type.curve": "Curve",
-	"architecture_extensions.block_type.facade": "Facade",
-	"architecture_extensions.block_type.fence_post": "Fence Post",
-	"architecture_extensions.block_type.round_fence_post": "Fence Post",
-	"architecture_extensions.block_type.h_beam": "H Beam",
-	"architecture_extensions.block_type.i_beam": "I Beam",
-	"architecture_extensions.block_type.joist": "Joist",
-	"architecture_extensions.block_type.lattice": "Lattice",
-	"architecture_extensions.block_type.post_cap": "Post Cap",
-	"architecture_extensions.block_type.post_lantern": "Post Lantern",
-	"architecture_extensions.block_type.rod": "Rod",
-	"architecture_extensions.block_type.roof": "Roof",
-	"architecture_extensions.block_type.transom": "Transom",
-	"architecture_extensions.block_type.tube_metal": "Tube Metal",
-	"architecture_extensions.block_type.wall_column": "Pilaster",
-	"architecture_extensions.block_type.wall_post": "Wall Post",
-	"architecture_extensions.block_type.octagonal_column": "Octagonal Column",
-
-	"architecture_extensions.grouped_block.debuggy_block": "Debuggy Block",
-
-	"architecture_extensions.grouped_block.bamboo": "Bamboo",
-
-	"architecture_extensions.grouped_block.iron": "Iron",
-	"architecture_extensions.grouped_block.copper": "Copper",
-	
-	"architecture_extensions.grouped_block.dirt": "Dirt",
-	"architecture_extensions.grouped_block.sand": "Sand",
-	"architecture_extensions.grouped_block.red_sand": "Red Sand",
-
-	"architecture_extensions.grouped_block.stone": "Stone",
-	"architecture_extensions.grouped_block.smooth_stone": "Smooth Stone",
-	"architecture_extensions.grouped_block.granite": "Granite",
-	"architecture_extensions.grouped_block.diorite": "Diorite",
-	"architecture_extensions.grouped_block.andesite": "Andesite",
-	"architecture_extensions.grouped_block.calcite": "Calcite",
-	"architecture_extensions.grouped_block.tuff": "Tuff",
-	"architecture_extensions.grouped_block.dripstone": "Dripstone",
-	"architecture_extensions.grouped_block.obsidian": "Obsidian",
-	"architecture_extensions.grouped_block.glowstone": "Glowstone",
-	"architecture_extensions.grouped_block.deepslate": "Deepslate",
-	"architecture_extensions.grouped_block.sandstone": "Sandstone",
-	"architecture_extensions.grouped_block.smooth_sandstone": "Smooth Sandstone",
-	"architecture_extensions.grouped_block.red_sandstone": "Red Sandstone",
-	"architecture_extensions.grouped_block.smooth_red_sandstone": "Smooth Red Sandstone",
-	"architecture_extensions.grouped_block.blackstone": "Blackstone",
-	"architecture_extensions.grouped_block.end_stone": "End Stone",
-	"architecture_extensions.grouped_block.raw_iron": "Raw Iron",
-	"architecture_extensions.grouped_block.raw_copper": "Raw Copper",
-	"architecture_extensions.grouped_block.raw_gold": "Raw Gold",
-
-	"architecture_extensions.grouped_block.prismarine": "Prismarine",
-	"architecture_extensions.grouped_block.sea_lantern": "Sea",
-
-	"architecture_extensions.grouped_block.cobblestone": "Cobblestone",
-	"architecture_extensions.grouped_block.mossy_cobblestone": "Mossy Cobblestone",
-	"architecture_extensions.grouped_block.cobbled_deepslate": "Cobbled Deepslate",
-	"architecture_extensions.grouped_block.polished_deepslate": "Polished Deepslate",
-	"architecture_extensions.grouped_block.polished_blackstone": "Polished Blackstone",
-
-	"architecture_extensions.grouped_block.oak": "Oak",
-	"architecture_extensions.grouped_block.spruce": "Spruce",
-	"architecture_extensions.grouped_block.birch": "Birch",
-	"architecture_extensions.grouped_block.jungle": "Jungle",
-	"architecture_extensions.grouped_block.acacia": "Acacia",
-	"architecture_extensions.grouped_block.cherry": "Cherry",
-	"architecture_extensions.grouped_block.dark_oak": "Dark Oak",
-	"architecture_extensions.grouped_block.mangrove": "Mangrove",
-	"architecture_extensions.grouped_block.crimson": "Crimson",
-	"architecture_extensions.grouped_block.warped": "Warped",
-
-	"architecture_extensions.grouped_block.stone_brick": "Stone Brick",
-	"architecture_extensions.grouped_block.cracked_stone_brick": "Cracked Stone Brick",
-	"architecture_extensions.grouped_block.mossy_stone_brick": "Mossy Stone Brick",
-	"architecture_extensions.grouped_block.deepslate_brick": "Deepslate Brick",
-	"architecture_extensions.grouped_block.cracked_deepslate_brick": "Cracked Deepslate Brick",
-	"architecture_extensions.grouped_block.brick": "Brick",
-	"architecture_extensions.grouped_block.mud_brick": "Mud Brick",
-	"architecture_extensions.grouped_block.prismarine_brick": "Prismarine Brick",
-	"architecture_extensions.grouped_block.nether_brick": "Nether Brick",
-	"architecture_extensions.grouped_block.cracked_nether_brick": "Cracked Nether Brick",
-	"architecture_extensions.grouped_block.red_nether_brick": "Red Nether Brick",
-	"architecture_extensions.grouped_block.polished_blackstone_brick": "Cracked Polished Blackstone Brick",
-	"architecture_extensions.grouped_block.cracked_polished_blackstone_brick": "Stone Brick",
-	"architecture_extensions.grouped_block.end_stone_brick": "End Stone Brick",
-
-	"architecture_extensions.grouped_block.deepslate_tile": "Deepslate Tile",
-	"architecture_extensions.grouped_block.cracked_deepslate_tile": "Cracked Deepslate Tile",
-	"architecture_extensions.grouped_block.dark_prismarine": "Dark Prismarine",
-	"architecture_extensions.grouped_block.purpur": "Purpur",
-
-	"architecture_extensions.grouped_block.quartz": "Quartz",
-	"architecture_extensions.grouped_block.smooth_quartz": "Smooth Quartz",
-
-	"architecture_extensions.grouped_block.terracotta": "Terracotta",
-	"architecture_extensions.grouped_block.white_terracotta": "White Terracotta",
-	"architecture_extensions.grouped_block.light_gray_terracotta": "Light Gray Terracotta",
-	"architecture_extensions.grouped_block.gray_terracotta": "Gray Terracotta",
-	"architecture_extensions.grouped_block.black_terracotta": "Black Terracotta",
-	"architecture_extensions.grouped_block.brown_terracotta": "Brown Terracotta",
-	"architecture_extensions.grouped_block.red_terracotta": "Red Terracotta",
-	"architecture_extensions.grouped_block.orange_terracotta": "Orange Terracotta",
-	"architecture_extensions.grouped_block.yellow_terracotta": "Yellow Terracotta",
-	"architecture_extensions.grouped_block.lime_terracotta": "Lime Terracotta",
-	"architecture_extensions.grouped_block.green_terracotta": "Green Terracotta",
-	"architecture_extensions.grouped_block.cyan_terracotta": "Cyan Terracotta",
-	"architecture_extensions.grouped_block.light_blue_terracotta": "Light Blue Terracotta",
-	"architecture_extensions.grouped_block.blue_terracotta": "Blue Terracotta",
-	"architecture_extensions.grouped_block.purple_terracotta": "Purple Terracotta",
-	"architecture_extensions.grouped_block.magenta_terracotta": "Magenta Terracotta",
-	"architecture_extensions.grouped_block.pink_terracotta": "Pink Terracotta",
-
-	"architecture_extensions.grouped_block.white_concrete": "White Concrete",
-	"architecture_extensions.grouped_block.light_gray_concrete": "Light Gray Concrete",
-	"architecture_extensions.grouped_block.gray_concrete": "Gray Concrete",
-	"architecture_extensions.grouped_block.black_concrete": "Black Concrete",
-	"architecture_extensions.grouped_block.brown_concrete": "Brown Concrete",
-	"architecture_extensions.grouped_block.red_concrete": "Red Concrete",
-	"architecture_extensions.grouped_block.orange_concrete": "Orange Concrete",
-	"architecture_extensions.grouped_block.yellow_concrete": "Yellow Concrete",
-	"architecture_extensions.grouped_block.lime_concrete": "Lime Concrete",
-	"architecture_extensions.grouped_block.green_concrete": "Green Concrete",
-	"architecture_extensions.grouped_block.cyan_concrete": "Cyan Concrete",
-	"architecture_extensions.grouped_block.light_blue_concrete": "Light Blue Concrete",
-	"architecture_extensions.grouped_block.blue_concrete": "Blue Concrete",
-	"architecture_extensions.grouped_block.purple_concrete": "Purple Concrete",
-	"architecture_extensions.grouped_block.magenta_concrete": "Magenta Concrete",
-	"architecture_extensions.grouped_block.pink_concrete": "Pink Concrete",
-
-	"architecture_extensions.grouped_block.white_concrete_powder": "White Concrete Powder",
-	"architecture_extensions.grouped_block.light_gray_concrete_powder": "Light Gray Concrete Powder",
-	"architecture_extensions.grouped_block.gray_concrete_powder": "Gray Concrete Powder",
-	"architecture_extensions.grouped_block.black_concrete_powder": "Black Concrete Powder",
-	"architecture_extensions.grouped_block.brown_concrete_powder": "Brown Concrete Powder",
-	"architecture_extensions.grouped_block.red_concrete_powder": "Red Concrete Powder",
-	"architecture_extensions.grouped_block.orange_concrete_powder": "Orange Concrete Powder",
-	"architecture_extensions.grouped_block.yellow_concrete_powder": "Yellow Concrete Powder",
-	"architecture_extensions.grouped_block.lime_concrete_powder": "Lime Concrete Powder",
-	"architecture_extensions.grouped_block.green_concrete_powder": "Green Concrete Powder",
-	"architecture_extensions.grouped_block.cyan_concrete_powder": "Cyan Concrete Powder",
-	"architecture_extensions.grouped_block.light_blue_concrete_powder": "Light Blue Concrete Powder",
-	"architecture_extensions.grouped_block.blue_concrete_powder": "Blue Concrete Powder",
-	"architecture_extensions.grouped_block.purple_concrete_powder": "Purple Concrete Powder",
-	"architecture_extensions.grouped_block.magenta_concrete_powder": "Magenta Concrete Powder",
-	"architecture_extensions.grouped_block.pink_concrete_powder": "Pink Concrete Powder",
-
-	"architecture_extensions.grouped_block.glass": "Glass",
-	"architecture_extensions.grouped_block.white_stained_glass": "White Stained Glass",
-	"architecture_extensions.grouped_block.light_gray_stained_glass": "Light Gray Stained Glass",
-	"architecture_extensions.grouped_block.gray_stained_glass": "Gray Stained Glass",
-	"architecture_extensions.grouped_block.black_stained_glass": "Black Stained Glass",
-	"architecture_extensions.grouped_block.brown_stained_glass": "Brown Stained Glass",
-	"architecture_extensions.grouped_block.red_stained_glass": "Red Stained Glass",
-	"architecture_extensions.grouped_block.orange_stained_glass": "Orange Stained Glass",
-	"architecture_extensions.grouped_block.yellow_stained_glass": "Yellow Stained Glass",
-	"architecture_extensions.grouped_block.lime_stained_glass": "Lime Stained Glass",
-	"architecture_extensions.grouped_block.green_stained_glass": "Green Stained Glass",
-	"architecture_extensions.grouped_block.cyan_stained_glass": "Cyan Stained Glass",
-	"architecture_extensions.grouped_block.light_blue_stained_glass": "Light Blue Stained Glass",
-	"architecture_extensions.grouped_block.blue_stained_glass": "Blue Stained Glass",
-	"architecture_extensions.grouped_block.purple_stained_glass": "Purple Stained Glass",
-	"architecture_extensions.grouped_block.magenta_stained_glass": "Magenta Stained Glass",
-	"architecture_extensions.grouped_block.pink_stained_glass": "Pink Stained Glass",
-	
-	"architecture_extensions.i18n.missing_key": "Missing Localization: %s"
-}
diff --git a/src/main/resources/assets/architecture_extensions/lang/ja_jp.json b/src/main/resources/assets/architecture_extensions/lang/ja_jp.json
deleted file mode 100644
index 1a7917e..0000000
--- a/src/main/resources/assets/architecture_extensions/lang/ja_jp.json
+++ /dev/null
@@ -1,178 +0,0 @@
-{
-	"itemGroup.architecture_extensions.building_blocks": "Arch-Exビルディングブロック",
-
-	"block.architecture_extensions.end_rod_nubless": "エンドロッド",
-	"block.architecture_extensions.debuggy_block": "奇妙な色のブロック",
-	"block.architecture_extensions.fake_end_portal_block": "星空のブロック",
-
-	"architecture_extensions.block_type_block": "%s %s",
-
-	"architecture_extensions.block_type.arch": "アーチ",
-	"architecture_extensions.block_type.round_arch": "アーチ",
-	"architecture_extensions.block_type.beam": "ビーム",
-	"architecture_extensions.block_type.crown_molding": "クラウンモールディング",
-	"architecture_extensions.block_type.curve": "曲線",
-	"architecture_extensions.block_type.facade": "外観",
-	"architecture_extensions.block_type.fence_post": "フェンスの支柱",
-	"architecture_extensions.block_type.round_fence_post": "フェンスの支柱",
-	"architecture_extensions.block_type.h_beam": "Hビーム",
-	"architecture_extensions.block_type.i_beam": "Iビーム",
-	"architecture_extensions.block_type.joist": "根太",
-	"architecture_extensions.block_type.lattice": "格子",
-	"architecture_extensions.block_type.post_cap": "ポストキャップ",
-	"architecture_extensions.block_type.post_lantern": "ポストランタン",
-	"architecture_extensions.block_type.rod": "ロッド",
-	"architecture_extensions.block_type.roof": "屋根",
-	"architecture_extensions.block_type.transom": "欄間",
-	"architecture_extensions.block_type.tube_metal": "チューブメタル",
-	"architecture_extensions.block_type.wall_column": "壁柱",
-	"architecture_extensions.block_type.wall_post": "壁掛けポスト",
-	"architecture_extensions.block_type.octagonal_column": "八角柱",
-
-        "architecture_extensions.grouped_block.debuggy_block": "デバッグブロック",
-	
-	"architecture_extensions.grouped_block.bamboo": "竹",
-
-	"architecture_extensions.grouped_block.iron": "鉄",
-	"architecture_extensions.grouped_block.copper": "銅",
-	
-	"architecture_extensions.grouped_block.dirt": "泥",
-	"architecture_extensions.grouped_block.sand": "砂",
-	"architecture_extensions.grouped_block.red_sand": "赤い砂",
-
-	"architecture_extensions.grouped_block.stone": "石",
-	"architecture_extensions.grouped_block.smooth_stone": "滑らかな石",
-	"architecture_extensions.grouped_block.granite": "花崗岩",
-	"architecture_extensions.grouped_block.diorite": "閃緑岩",
-	"architecture_extensions.grouped_block.andesite": "安山岩",
-	"architecture_extensions.grouped_block.calcite": "方解石",
-	"architecture_extensions.grouped_block.tuff": "凝灰岩",
-	"architecture_extensions.grouped_block.dripstone": "鍾乳石",
-	"architecture_extensions.grouped_block.obsidian": "黒曜石",
-	"architecture_extensions.grouped_block.glowstone": "グロウストーン",
-	"architecture_extensions.grouped_block.deepslate": "深層岩",
-	"architecture_extensions.grouped_block.sandstone": "砂岩",
-	"architecture_extensions.grouped_block.smooth_sandstone": "滑らかな砂岩",
-	"architecture_extensions.grouped_block.red_sandstone": "赤い砂岩",
-	"architecture_extensions.grouped_block.smooth_red_sandstone": "滑らかな赤い砂岩",
-	"architecture_extensions.grouped_block.blackstone": "ブラックストーン",
-	"architecture_extensions.grouped_block.end_stone": "エンドストーン",
-	"architecture_extensions.grouped_block.raw_iron": "鉄の原石",
-	"architecture_extensions.grouped_block.raw_copper": "銅の原石",
-	"architecture_extensions.grouped_block.raw_gold": "金の原石",
-
-	"architecture_extensions.grouped_block.prismarine": "プリズマリン",
-	"architecture_extensions.grouped_block.sea_lantern": "海",
-
-	"architecture_extensions.grouped_block.cobblestone": "丸石",
-	"architecture_extensions.grouped_block.mossy_cobblestone": "苔むした丸石",
-	"architecture_extensions.grouped_block.cobbled_deepslate": "深層岩の丸石",
-	"architecture_extensions.grouped_block.polished_deepslate": "磨かれた深層岩",
-	"architecture_extensions.grouped_block.polished_blackstone": "磨かれたブラックストーン",
-
-	"architecture_extensions.grouped_block.oak": "オーク",
-	"architecture_extensions.grouped_block.spruce": "トウヒ",
-	"architecture_extensions.grouped_block.birch": "シラカバ",
-	"architecture_extensions.grouped_block.jungle": "ジャングル",
-	"architecture_extensions.grouped_block.acacia": "アカシア",
-	"architecture_extensions.grouped_block.cherry": "サクラ",
-	"architecture_extensions.grouped_block.dark_oak": "ダークオーク",
-	"architecture_extensions.grouped_block.mangrove": "マングローブ",
-	"architecture_extensions.grouped_block.crimson": "真紅",
-	"architecture_extensions.grouped_block.warped": "歪んだ",
-
-	"architecture_extensions.grouped_block.stone_brick": "石レンガ",
-	"architecture_extensions.grouped_block.cracked_stone_brick": "ひび割れた石レンガ",
-	"architecture_extensions.grouped_block.mossy_stone_brick": "苔むした石レンガ",
-	"architecture_extensions.grouped_block.deepslate_brick": "深層岩レンガ",
-	"architecture_extensions.grouped_block.cracked_deepslate_brick": "ひび割れた深層岩レンガ",
-	"architecture_extensions.grouped_block.brick": "レンガ",
-	"architecture_extensions.grouped_block.mud_brick": "泥レンガ",
-	"architecture_extensions.grouped_block.prismarine_brick": "プリズマリンレンガ",
-	"architecture_extensions.grouped_block.nether_brick": "ネザーレンガ",
-	"architecture_extensions.grouped_block.cracked_nether_brick": "ひび割れたネザーレンガ",
-	"architecture_extensions.grouped_block.red_nether_brick": "赤いネザーレンガ",
-	"architecture_extensions.grouped_block.polished_blackstone_brick": "ひび割れたブラックストーンレンガ",
-	"architecture_extensions.grouped_block.cracked_polished_blackstone_brick": "ひび割れた石レンガ",
-	"architecture_extensions.grouped_block.end_stone_brick": "エンドストーンレンガ",
-
-	"architecture_extensions.grouped_block.deepslate_tile": "深層岩タイル",
-	"architecture_extensions.grouped_block.cracked_deepslate_tile": "ひび割れた深層岩タイル",
-	"architecture_extensions.grouped_block.dark_prismarine": "ダークプリズマリン",
-	"architecture_extensions.grouped_block.purpur": "プルプァブロック",
-
-	"architecture_extensions.grouped_block.quartz": "クォーツブロック",
-	"architecture_extensions.grouped_block.smooth_quartz": "滑らかなクォーツブロック",
-
-	"architecture_extensions.grouped_block.terracotta": "テラコッタ",
-	"architecture_extensions.grouped_block.white_terracotta": "白色のテラコッタ",
-	"architecture_extensions.grouped_block.light_gray_terracotta": " 薄灰色のテラコッタ",
-	"architecture_extensions.grouped_block.gray_terracotta": "灰色のテラコッタ",
-	"architecture_extensions.grouped_block.black_terracotta": "黒色のテラコッタ",
-	"architecture_extensions.grouped_block.brown_terracotta": "茶色のテラコッタ",
-	"architecture_extensions.grouped_block.red_terracotta": "赤色のテラコッタ",
-	"architecture_extensions.grouped_block.orange_terracotta": "橙色のテラコッタ",
-	"architecture_extensions.grouped_block.yellow_terracotta": "黄色のテラコッタ",
-	"architecture_extensions.grouped_block.lime_terracotta": "黄緑色のテラコッタ",
-	"architecture_extensions.grouped_block.green_terracotta": "緑色のテラコッタ",
-	"architecture_extensions.grouped_block.cyan_terracotta": "青緑色のテラコッタ",
-	"architecture_extensions.grouped_block.light_blue_terracotta": "空色のテラコッタ",
-	"architecture_extensions.grouped_block.blue_terracotta": "青色のテラコッタ",
-	"architecture_extensions.grouped_block.purple_terracotta": "紫色のテラコッタ",
-	"architecture_extensions.grouped_block.magenta_terracotta": "赤紫色のテラコッタ",
-	"architecture_extensions.grouped_block.pink_terracotta": "桃色のテラコッタ",
-
-	"architecture_extensions.grouped_block.white_concrete": "白色のコンクリート",
-	"architecture_extensions.grouped_block.light_gray_concrete": "薄灰色のコンクリート",
-	"architecture_extensions.grouped_block.gray_concrete": "灰色のコンクリート",
-	"architecture_extensions.grouped_block.black_concrete": "黒色のコンクリート",
-	"architecture_extensions.grouped_block.brown_concrete": "茶色のコンクリート",
-	"architecture_extensions.grouped_block.red_concrete": "赤色のコンクリート",
-	"architecture_extensions.grouped_block.orange_concrete": "橙色のコンクリート",
-	"architecture_extensions.grouped_block.yellow_concrete": "黄色のコンクリート",
-	"architecture_extensions.grouped_block.lime_concrete": "黄緑色のコンクリート",
-	"architecture_extensions.grouped_block.green_concrete": "緑色のコンクリート",
-	"architecture_extensions.grouped_block.cyan_concrete": "青緑色のコンクリート",
-	"architecture_extensions.grouped_block.light_blue_concrete": "空色のコンクリート",
-	"architecture_extensions.grouped_block.blue_concrete": "青色のコンクリート",
-	"architecture_extensions.grouped_block.purple_concrete": "紫色のコンクリート",
-	"architecture_extensions.grouped_block.magenta_concrete": "赤紫色のコンクリート",
-	"architecture_extensions.grouped_block.pink_concrete": "桃色のコンクリート",
-
-	"architecture_extensions.grouped_block.white_concrete_powder": "白色のコンクリートパウダー",
-	"architecture_extensions.grouped_block.light_gray_concrete_powder": "薄灰色のコンクリートパウダー",
-	"architecture_extensions.grouped_block.gray_concrete_powder": "灰色のコンクリートパウダー",
-	"architecture_extensions.grouped_block.black_concrete_powder": "黒色のコンクリートパウダー",
-	"architecture_extensions.grouped_block.brown_concrete_powder": "茶色のコンクリートパウダー",
-	"architecture_extensions.grouped_block.red_concrete_powder": "赤色のコンクリートパウダー",
-	"architecture_extensions.grouped_block.orange_concrete_powder": "橙色のコンクリートパウダー",
-	"architecture_extensions.grouped_block.yellow_concrete_powder": "黄色のコンクリートパウダー",
-	"architecture_extensions.grouped_block.lime_concrete_powder": "黄緑色のコンクリートパウダー",
-	"architecture_extensions.grouped_block.green_concrete_powder": "緑色のコンクリートパウダー",
-	"architecture_extensions.grouped_block.cyan_concrete_powder": "青緑色のコンクリートパウダー",
-	"architecture_extensions.grouped_block.light_blue_concrete_powder": "空色のコンクリートパウダー",
-	"architecture_extensions.grouped_block.blue_concrete_powder": "青色のコンクリートパウダー",
-	"architecture_extensions.grouped_block.purple_concrete_powder": "紫色のコンクリートパウダー",
-	"architecture_extensions.grouped_block.magenta_concrete_powder": "赤紫色のコンクリートパウダー",
-	"architecture_extensions.grouped_block.pink_concrete_powder": "桃色のコンクリートパウダー",
-
-	"architecture_extensions.grouped_block.glass": "ガラス",
-	"architecture_extensions.grouped_block.white_stained_glass": "白色の色付きガラス",
-	"architecture_extensions.grouped_block.light_gray_stained_glass": "薄灰色の色付きガラス",
-	"architecture_extensions.grouped_block.gray_stained_glass": "灰色の色付きガラス",
-	"architecture_extensions.grouped_block.black_stained_glass": "黒色の色付きガラス",
-	"architecture_extensions.grouped_block.brown_stained_glass": "茶色の色付きガラス",
-	"architecture_extensions.grouped_block.red_stained_glass": "赤色の色付きガラス",
-	"architecture_extensions.grouped_block.orange_stained_glass": "橙色の色付きガラス",
-	"architecture_extensions.grouped_block.yellow_stained_glass": "黄色の色付きガラス",
-	"architecture_extensions.grouped_block.lime_stained_glass": "黄緑色の色付きガラス",
-	"architecture_extensions.grouped_block.green_stained_glass": "緑色の色付きガラス",
-	"architecture_extensions.grouped_block.cyan_stained_glass": "青緑色の色付きガラス",
-	"architecture_extensions.grouped_block.light_blue_stained_glass": "空色の色付きガラス",
-	"architecture_extensions.grouped_block.blue_stained_glass": "青色の色付きガラス",
-	"architecture_extensions.grouped_block.purple_stained_glass": "紫色の色付きガラス",
-	"architecture_extensions.grouped_block.magenta_stained_glass": "赤紫色の色付きガラス",
-	"architecture_extensions.grouped_block.pink_stained_glass": "桃色の色付きガラス",
-	
-	"architecture_extensions.i18n.missing_key": "翻訳がありません: %s"
-}
diff --git a/src/main/resources/assets/architecture_extensions/lang/uk_ua.json b/src/main/resources/assets/architecture_extensions/lang/uk_ua.json
deleted file mode 100644
index c404fac..0000000
--- a/src/main/resources/assets/architecture_extensions/lang/uk_ua.json
+++ /dev/null
@@ -1,116 +0,0 @@
-{
-	"itemGroup.architecture_extensions.building_blocks": "Будівельні блоки Arch-Ex",
-	"block.architecture_extensions.end_rod_nubless": "Безосновний стрижень Енду",
-	"block.architecture_extensions.debuggy_block": "Дивно забарвлений блок",
-	"block.architecture_extensions.fake_end_portal_block": "Блок зоревого нічного неба",
-	"architecture_extensions.block_type_block": "%s у формі %s",
-	"architecture_extensions.block_type.arch": "дуги",
-	"architecture_extensions.block_type.round_arch": "дуги",
-	"architecture_extensions.block_type.beam": "балки",
-	"architecture_extensions.block_type.crown_molding": "плінтуса",
-	"architecture_extensions.block_type.facade": "фасаду",
-	"architecture_extensions.block_type.fence_post": "парканного стовпа",
-	"architecture_extensions.block_type.round_fence_post": "парканного стовпа",
-	"architecture_extensions.block_type.h_beam": "Н-подібної балки",
-	"architecture_extensions.block_type.i_beam": "І-подібної балки",
-	"architecture_extensions.block_type.joist": "Перекладина",
-	"architecture_extensions.block_type.lattice": "решітки",
-	"architecture_extensions.block_type.post_cap": "шапки стовпа",
-	"architecture_extensions.block_type.post_lantern": "ліхтаря стовпа",
-	"architecture_extensions.block_type.rod": "стрижня",
-	"architecture_extensions.block_type.roof": "покрівлі",
-	"architecture_extensions.block_type.transom": "ригеля",
-	"architecture_extensions.block_type.tube_metal": "труби",
-	"architecture_extensions.block_type.wall_column": "стінової колони",
-	"architecture_extensions.block_type.wall_post": "стінового стовпа",
-	"architecture_extensions.block_type.octagonal_column": "восьмикутної колони",
-	"architecture_extensions.grouped_block.bamboo": "Бамбук",
-	"architecture_extensions.grouped_block.iron": "Залізо",
-	"architecture_extensions.grouped_block.copper": "Мідь",
-	"architecture_extensions.grouped_block.stone": "Камінь",
-	"architecture_extensions.grouped_block.granite": "Граніт",
-	"architecture_extensions.grouped_block.diorite": "Діорит",
-	"architecture_extensions.grouped_block.andesite": "Андезит",
-	"architecture_extensions.grouped_block.calcite": "Кальцит",
-	"architecture_extensions.grouped_block.tuff": "Туф",
-	"architecture_extensions.grouped_block.dripstone": "Сталактит",
-	"architecture_extensions.grouped_block.obsidian": "Обсидіан",
-	"architecture_extensions.grouped_block.glowstone": "Світлокамінь",
-	"architecture_extensions.grouped_block.deepslate": "Глибосланець",
-	"architecture_extensions.grouped_block.sandstone": "Пісковик",
-	"architecture_extensions.grouped_block.red_sandstone": "Червоний пісковик",
-	"architecture_extensions.grouped_block.blackstone": "Чорнокамінь",
-	"architecture_extensions.grouped_block.end_stone": "Камінь Енду",
-	"architecture_extensions.grouped_block.raw_iron": "Необроблене залізо",
-	"architecture_extensions.grouped_block.raw_copper": "Необроблена мідь",
-	"architecture_extensions.grouped_block.raw_gold": "Необроблене золото",
-	"architecture_extensions.grouped_block.prismarine": "Призмарин",
-	"architecture_extensions.grouped_block.sea_lantern": "Море",
-	"architecture_extensions.grouped_block.cobblestone": "Кругляк",
-	"architecture_extensions.grouped_block.mossy_cobblestone": "Моховитий кругляк",
-	"architecture_extensions.grouped_block.cobbled_deepslate": "Глибосланцевий кругляк",
-	"architecture_extensions.grouped_block.polished_deepslate": "Полірований глибосланець",
-	"architecture_extensions.grouped_block.polished_blackstone": "Полірований чорнокамінь",
-	"architecture_extensions.grouped_block.oak": "Дуб",
-	"architecture_extensions.grouped_block.spruce": "Смерека",
-	"architecture_extensions.grouped_block.birch": "Береза",
-	"architecture_extensions.grouped_block.jungle": "Тропічне дерево",
-	"architecture_extensions.grouped_block.acacia": "Акація",
-	"architecture_extensions.grouped_block.cherry": "Вишня",
-	"architecture_extensions.grouped_block.dark_oak": "Темний дуб",
-	"architecture_extensions.grouped_block.mangrove": "Мангрове дерево",
-	"architecture_extensions.grouped_block.crimson": "Багряний гриб",
-	"architecture_extensions.grouped_block.warped": "Химерний гриб",
-	"architecture_extensions.grouped_block.stone_brick": "Кам'яна цеглина",
-	"architecture_extensions.grouped_block.cracked_stone_brick": "Тріснута кам'яна цегла",
-	"architecture_extensions.grouped_block.mossy_stone_brick": "Моховита кам’яна цегла",
-	"architecture_extensions.grouped_block.deepslate_brick": "Глибосланцева цегла",
-	"architecture_extensions.grouped_block.cracked_deepslate_brick": "Тріснута глибосланцева цегла",
-	"architecture_extensions.grouped_block.brick": "Цегла",
-	"architecture_extensions.grouped_block.mud_brick": "Лимпач",
-	"architecture_extensions.grouped_block.prismarine_brick": "Призмаринова цегла",
-	"architecture_extensions.grouped_block.nether_brick": "Незерська цегла",
-	"architecture_extensions.grouped_block.cracked_nether_brick": "Тріснута незерська цегла",
-	"architecture_extensions.grouped_block.red_nether_brick": "Червона незерська цегла",
-	"architecture_extensions.grouped_block.polished_blackstone_brick": "Тріснута полірована чорнокам'яна цегла",
-	"architecture_extensions.grouped_block.cracked_polished_blackstone_brick": "Кам'яна цегла",
-	"architecture_extensions.grouped_block.end_stone_brick": "Цегла з каменю Енду",
-	"architecture_extensions.grouped_block.deepslate_tile": "Глибосланцеві кахлі",
-	"architecture_extensions.grouped_block.dark_prismarine": "Темний призмарин",
-	"architecture_extensions.grouped_block.purpur": "Пурпур",
-	"architecture_extensions.grouped_block.quartz": "Кварц",
-	"architecture_extensions.grouped_block.smooth_quartz": "Гладкий кварц",
-	"architecture_extensions.grouped_block.terracotta": "Кераміка",
-	"architecture_extensions.grouped_block.white_terracotta": "Біла кераміка",
-	"architecture_extensions.grouped_block.light_gray_terracotta": "Світло-сіра кераміка",
-	"architecture_extensions.grouped_block.gray_terracotta": "Сіра кераміка",
-	"architecture_extensions.grouped_block.black_terracotta": "Чорна кераміка",
-	"architecture_extensions.grouped_block.brown_terracotta": "Коричнева кераміка",
-	"architecture_extensions.grouped_block.red_terracotta": "Червона кераміка",
-	"architecture_extensions.grouped_block.orange_terracotta": "Помаранчева кераміка",
-	"architecture_extensions.grouped_block.yellow_terracotta": "Жовта кераміка",
-	"architecture_extensions.grouped_block.lime_terracotta": "Лаймова кераміка",
-	"architecture_extensions.grouped_block.green_terracotta": "Зелена кераміка",
-	"architecture_extensions.grouped_block.cyan_terracotta": "Бірюзова кераміка",
-	"architecture_extensions.grouped_block.light_blue_terracotta": "Блакитна кераміка",
-	"architecture_extensions.grouped_block.blue_terracotta": "Синя кераміка",
-	"architecture_extensions.grouped_block.purple_terracotta": "Фіолетова кераміка",
-	"architecture_extensions.grouped_block.magenta_terracotta": "Пурпурова кераміка",
-	"architecture_extensions.grouped_block.pink_terracotta": "Рожева кераміка",
-	"architecture_extensions.grouped_block.white_concrete": "Білий бетон",
-	"architecture_extensions.grouped_block.light_gray_concrete": "Світло-сірий бетон",
-	"architecture_extensions.grouped_block.gray_concrete": "Сірий бетон",
-	"architecture_extensions.grouped_block.black_concrete": "Чорний бетон",
-	"architecture_extensions.grouped_block.brown_concrete": "Коричневий бетон",
-	"architecture_extensions.grouped_block.red_concrete": "Червоний бетон",
-	"architecture_extensions.grouped_block.orange_concrete": "Помаранчевий бетон",
-	"architecture_extensions.grouped_block.yellow_concrete": "Жовтий бетон",
-	"architecture_extensions.grouped_block.lime_concrete": "Лаймовий бетон",
-	"architecture_extensions.grouped_block.green_concrete": "Зелений бетон",
-	"architecture_extensions.grouped_block.cyan_concrete": "Бірюзовий бетон",
-	"architecture_extensions.grouped_block.light_blue_concrete": "Блакитний бетон",
-	"architecture_extensions.grouped_block.blue_concrete": "Синій бетон",
-	"architecture_extensions.grouped_block.purple_concrete": "Фіолетовий бетон",
-	"architecture_extensions.grouped_block.magenta_concrete": "Пурпуровий бетон",
-	"architecture_extensions.grouped_block.pink_concrete": "Рожевий бетон"
-}
diff --git a/src/main/resources/assets/architecture_extensions/lang/zh_cn.json b/src/main/resources/assets/architecture_extensions/lang/zh_cn.json
deleted file mode 100644
index d4739b8..0000000
--- a/src/main/resources/assets/architecture_extensions/lang/zh_cn.json
+++ /dev/null
@@ -1,121 +0,0 @@
-{
-	"itemGroup.architecture_extensions.building_blocks": "建筑拓展:建造方块",
-
-	"block.architecture_extensions.end_rod_nubless": "连贯末地烛",
-	"block.architecture_extensions.debuggy_block": "奇怪的彩色方块",
-	"block.architecture_extensions.fake_end_portal_block": "璀璨星空块",
-
-	"architecture_extensions.block_type_block": "%s%s",
-
-	"architecture_extensions.block_type.arch": "拱",
-	"architecture_extensions.block_type.beam": "梁",
-	"architecture_extensions.block_type.crown_molding": "冠饰",
-	"architecture_extensions.block_type.facade": "伪装板",
-	"architecture_extensions.block_type.fence_post": "栅栏柱",
-	"architecture_extensions.block_type.h_beam": "H形梁",
-	"architecture_extensions.block_type.i_beam": "I形梁",
-	"architecture_extensions.block_type.joist": "托梁",
-	"architecture_extensions.block_type.lattice": "牖窗",
-	"architecture_extensions.block_type.post_cap": "柱顶",
-	"architecture_extensions.block_type.post_lantern": "柱灯",
-	"architecture_extensions.block_type.rod": "棍",
-	"architecture_extensions.block_type.roof": "屋顶",
-	"architecture_extensions.block_type.transom": "窗",
-	"architecture_extensions.block_type.tube_metal": "管柱",
-	"architecture_extensions.block_type.wall_column": "壁柱",
-	"architecture_extensions.block_type.wall_post": "柱",
-
-
-	"architecture_extensions.grouped_block.bamboo": "竹",
-
-	"architecture_extensions.grouped_block.copper": "铜",
-
-	"architecture_extensions.grouped_block.iron": "铁",
-
-	"architecture_extensions.grouped_block.stone": "石头",
-	"architecture_extensions.grouped_block.granite": "花岗岩",
-	"architecture_extensions.grouped_block.diorite": "闪长岩",
-	"architecture_extensions.grouped_block.andesite": "安山岩",
-	"architecture_extensions.grouped_block.calcite": "方解石",
-	"architecture_extensions.grouped_block.tuff": "凝灰岩",
-	"architecture_extensions.grouped_block.dripstone": "滴水石",
-	"architecture_extensions.grouped_block.obsidian": "黑曜石",
-	"architecture_extensions.grouped_block.glowstone": "荧石",
-	"architecture_extensions.grouped_block.deepslate": "深板岩",
-	"architecture_extensions.grouped_block.sandstone": "砂岩",
-	"architecture_extensions.grouped_block.red_sandstone": "红砂岩",
-	"architecture_extensions.grouped_block.end_stone": "末地石",
-	"architecture_extensions.grouped_block.blackstone": "黑石",
-
-	"architecture_extensions.grouped_block.prismarine": "海晶石",
-	"architecture_extensions.grouped_block.sea_lantern": "海晶灯",
-
-	"architecture_extensions.grouped_block.cobblestone": "圆石",
-	"architecture_extensions.grouped_block.mossy_cobblestone": "苔石",
-	"architecture_extensions.grouped_block.cobbled_deepslate": "深板岩圆石",
-	"architecture_extensions.grouped_block.polished_deepslate": "磨制深板岩",
-	"architecture_extensions.grouped_block.polished_blackstone": "磨制黑石",
-
-	"architecture_extensions.grouped_block.oak": "橡木",
-	"architecture_extensions.grouped_block.spruce": "云杉木",
-	"architecture_extensions.grouped_block.birch": "白桦木",
-	"architecture_extensions.grouped_block.jungle": "丛林木",
-	"architecture_extensions.grouped_block.acacia": "金合欢木",
-	"architecture_extensions.grouped_block.dark_oak": "深色橡木",
-	"architecture_extensions.grouped_block.mangrove": "红树木",
-	"architecture_extensions.grouped_block.crimson": "绯红菌",
-	"architecture_extensions.grouped_block.warped": "扭曲菌",
-
-	"architecture_extensions.grouped_block.stone_brick": "石砖",
-	"architecture_extensions.grouped_block.mossy_stone_brick": "苔石砖",
-	"architecture_extensions.grouped_block.deepslate_brick": "深板岩砖",
-	"architecture_extensions.grouped_block.brick": "红砖",
-	"architecture_extensions.grouped_block.mud_brick": "泥砖",
-	"architecture_extensions.grouped_block.prismarine_brick": "海晶石砖",
-	"architecture_extensions.grouped_block.nether_brick": "下界砖",
-	"architecture_extensions.grouped_block.red_nether_brick": "红色下界砖",
-	"architecture_extensions.grouped_block.polished_blackstone_brick": "磨制黑石砖",
-	"architecture_extensions.grouped_block.end_stone_brick": "末地石砖",
-
-	"architecture_extensions.grouped_block.deepslate_tile": "深板岩瓦",
-	"architecture_extensions.grouped_block.dark_prismarine": "暗海晶石",
-	"architecture_extensions.grouped_block.purpur": "紫珀",
-
-	"architecture_extensions.grouped_block.quartz": "石英",
-	"architecture_extensions.grouped_block.smooth_quartz": "平滑石英",
-
-	"architecture_extensions.grouped_block.terracotta": "陶瓦",
-	"architecture_extensions.grouped_block.white_terracotta": "白色陶瓦",
-	"architecture_extensions.grouped_block.light_gray_terracotta": "淡灰色陶瓦",
-	"architecture_extensions.grouped_block.gray_terracotta": "灰色陶瓦",
-	"architecture_extensions.grouped_block.black_terracotta": "黑色陶瓦",
-	"architecture_extensions.grouped_block.brown_terracotta": "棕色陶瓦",
-	"architecture_extensions.grouped_block.red_terracotta": "红色陶瓦",
-	"architecture_extensions.grouped_block.orange_terracotta": "橙色陶瓦",
-	"architecture_extensions.grouped_block.yellow_terracotta": "黄色陶瓦",
-	"architecture_extensions.grouped_block.lime_terracotta": "黄绿色陶瓦",
-	"architecture_extensions.grouped_block.green_terracotta": "绿色陶瓦",
-	"architecture_extensions.grouped_block.cyan_terracotta": "青色陶瓦",
-	"architecture_extensions.grouped_block.light_blue_terracotta": "淡蓝色陶瓦",
-	"architecture_extensions.grouped_block.blue_terracotta": "蓝色陶瓦",
-	"architecture_extensions.grouped_block.purple_terracotta": "紫色陶瓦",
-	"architecture_extensions.grouped_block.magenta_terracotta": "品红色陶瓦",
-	"architecture_extensions.grouped_block.pink_terracotta": "粉红色陶瓦",
-
-	"architecture_extensions.grouped_block.white_concrete": "白色混凝土",
-	"architecture_extensions.grouped_block.light_gray_concrete": "淡灰色混凝土",
-	"architecture_extensions.grouped_block.gray_concrete": "灰色混凝土",
-	"architecture_extensions.grouped_block.black_concrete": "黑色混凝土",
-	"architecture_extensions.grouped_block.brown_concrete": "棕色混凝土",
-	"architecture_extensions.grouped_block.red_concrete": "红色混凝土",
-	"architecture_extensions.grouped_block.orange_concrete": "橙色混凝土",
-	"architecture_extensions.grouped_block.yellow_concrete": "黄色混凝土",
-	"architecture_extensions.grouped_block.lime_concrete": "黄绿色混凝土",
-	"architecture_extensions.grouped_block.green_concrete": "绿色混凝土",
-	"architecture_extensions.grouped_block.cyan_concrete": "青色混凝土",
-	"architecture_extensions.grouped_block.light_blue_concrete": "淡蓝色混凝土",
-	"architecture_extensions.grouped_block.blue_concrete": "蓝色混凝土",
-	"architecture_extensions.grouped_block.purple_concrete": "紫色混凝土",
-	"architecture_extensions.grouped_block.magenta_concrete": "品红色混凝土",
-	"architecture_extensions.grouped_block.pink_concrete": "粉红色混凝土"
-}
diff --git a/src/main/resources/assets/architecture_extensions/models/block/curve.gltf b/src/main/resources/assets/architecture_extensions/models/block/curve.gltf
deleted file mode 100644
index fa9801a..0000000
--- a/src/main/resources/assets/architecture_extensions/models/block/curve.gltf
+++ /dev/null
@@ -1,142 +0,0 @@
-{
-	"asset":{
-		"generator":"Khronos glTF Blender I/O v3.5.30",
-		"version":"2.0"
-	},
-	"scene":0,
-	"scenes":[
-		{
-			"name":"Scene",
-			"nodes":[
-				0
-			]
-		}
-	],
-	"nodes":[
-		{
-			"mesh":0,
-			"name":"Cylinder.001"
-		}
-	],
-	"materials":[
-		{
-			"doubleSided":true,
-			"name":"Material.003",
-			"pbrMetallicRoughness":{
-				"baseColorTexture":{
-					"index":0
-				},
-				"metallicFactor":0,
-				"roughnessFactor":0.4000000059604645
-			}
-		}
-	],
-	"meshes":[
-		{
-			"name":"Cylinder.002",
-			"primitives":[
-				{
-					"attributes":{
-						"POSITION":0,
-						"TEXCOORD_0":1,
-						"NORMAL":2
-					},
-					"indices":3,
-					"material":0
-				}
-			]
-		}
-	],
-	"textures":[
-		{
-			"sampler":0,
-			"source":0
-		}
-	],
-	"images":[
-		{
-			"bufferView":4,
-			"mimeType":"image/png",
-			"name":"bricks"
-		}
-	],
-	"accessors":[
-		{
-			"bufferView":0,
-			"componentType":5126,
-			"count":48,
-			"max":[
-				0.4999999403953552,
-				0.5000000596046448,
-				0.4999998211860657
-			],
-			"min":[
-				-0.5000002384185791,
-				-0.5000000596046448,
-				-0.5000004172325134
-			],
-			"type":"VEC3"
-		},
-		{
-			"bufferView":1,
-			"componentType":5126,
-			"count":48,
-			"type":"VEC2"
-		},
-		{
-			"bufferView":2,
-			"componentType":5126,
-			"count":48,
-			"type":"VEC3"
-		},
-		{
-			"bufferView":3,
-			"componentType":5123,
-			"count":84,
-			"type":"SCALAR"
-		}
-	],
-	"bufferViews":[
-		{
-			"buffer":0,
-			"byteLength":576,
-			"byteOffset":0,
-			"target":34962
-		},
-		{
-			"buffer":0,
-			"byteLength":384,
-			"byteOffset":576,
-			"target":34962
-		},
-		{
-			"buffer":0,
-			"byteLength":576,
-			"byteOffset":960,
-			"target":34962
-		},
-		{
-			"buffer":0,
-			"byteLength":168,
-			"byteOffset":1536,
-			"target":34963
-		},
-		{
-			"buffer":0,
-			"byteLength":301,
-			"byteOffset":1704
-		}
-	],
-	"samplers":[
-		{
-			"magFilter":9728,
-			"minFilter":9984
-		}
-	],
-	"buffers":[
-		{
-			"byteLength":2008,
-			"uri":"data:application/octet-stream;base64,AgAAvwEAAD8CAAC/AgAAv9aN7j4u+Ha+AgAAv9aN7j4u+Ha+AgAAv9aN7j4u+Ha+AgAAv65nuz4AAIi0AgAAv65nuz4AAIi0AgAAv65nuz4AAIi0AgAAv8wTVD64E1Q+AgAAv8wTVD64E1Q+AgAAv8wTVD64E1Q+BAAAvwAAALSoZ7s+BAAAvwAAALSoZ7s+BAAAvwAAALSoZ7s+BAAAvyv4dr7Mje4+BAAAvyv4dr7Mje4+BAAAvyv4dr7Mje4++v//Pvr//74FAAC/+v//Pvr//74FAAC/+v//Pvr//74FAAC/BAAAv/r//74HAAC/BAAAv/r//74HAAC/BAAAv/r//74HAAC/+P//PgEAAL/6//8+BAAAv/7//772//8+/v//PgEAAD8BAAC//v//PgEAAD8BAAC/AgAAvwEAAD8DAAC/AgAAvwEAAD8DAAC/BAAAvwEAAL/2//8+BAAAvwEAAL/2//8+/v//PgEAAD8AAAC//P//PtaN7j4m+Ha+/P//PtaN7j4m+Ha+/P//PtaN7j4m+Ha+/P//Pq5nuz4AAAC0/P//Pq5nuz4AAAC0/P//Pq5nuz4AAAC0/P//PswTVD7AE1Q+/P//PswTVD7AE1Q+/P//PswTVD7AE1Q++P//PgAAQLSsZ7s++P//PgAAQLSsZ7s++P//PgAAQLSsZ7s++P//Pi/4dr7Qje4++P//Pi/4dr7Qje4++P//Pi/4dr7Qje4++P//PgAAAL/6//8++P//PgAAAL/6//8+ANfUOwDd1DuA2NQ7uDUwPoDY1Du4NTA+UoqEPiDzCz0A2tQ7QuKsPgDa1DtC4qw+BwAAP+BDCT4A2tQ73tQAPwDa1Dve1AA/QgI1P4z7lT4A2tQ7kTgrPwDa1DuROCs/Ea9dPwcAAD+A29Q7SJxVP4Db1DtInFU/0kB3P+O6PT8AAAA0AACAPwAAADRMVn4/bvl/P3D5fz8AANI4bvl/PwAAgD8AAIA/AACAP0xWfj8AAAA0AAAAAAAAgD8AAAAAcvl/PwAA0jgAAAA0AJiaOQDA0jgAgNE4AACAPwCYmjl0+X8/dPl/PwDd1DsDAIA/+v9/PwDX1Dvguj0/QPMLPf3/fz+INTA+/f9/P4g1MD4DAAA/1EMJPgAAgD9G4qw+AACAP0birD6Q+5U+hPuVPgAAgD/W1AA/AACAP9bUAD/QQwk++v//PgAAgD+LOCs/AACAP4s4Kz8A8ws92ro9PwEAgD8+nFU/AQCAPz6cVT8AYNE4avl/PwMAgD/6/38/AAAAAGTMfT/LoQU+AAAAgLaEbD9B8cM+AAAAgGTMfT/LoQU+AACAvwAAAAAAAAAAAAAAgEMcSz9R2hs/AAAAgLaEbD9B8cM+AACAvwAAAAAAAAAAAAAAgFHaGz9DHEs/AAAAgEMcSz9R2hs/AACAvwAAAAAAAACAAAAAgEHxwz62hGw/AAAAgFHaGz9DHEs/AACAvwAAAAAAAACAAAAAgMuhBT5kzH0/AAAAgEHxwz62hGw/AACAvwAAAAAAAAAAAAAAAAAAAAAAAIC/AAAAgAAAgL8AAACAAACAPwAAAIAAAACAAACAvwAAAAAAAAAAAAAAAAAAAAAAAIC/AAAAAAAAgL8AAACAAAAAgAAAgL8AAACAAAAAAAAAgL8AAACAAACAPwAAAIAAAAAAAAAAAAAAAAAAAIC/AACAvwAAAAAAAACAAAAAAAAAAAAAAIC/AACAvwAAAAAAAAAAAAAAgMuhBT5kzH0/AAAAgGTMfT/LoQU+AACAPwAAAIAAAAAAAAAAgLaEbD9B8cM+AAAAgGTMfT/LoQU+AACAPwAAAIAAAACAAAAAgEMcSz9R2hs/AAAAgLaEbD9B8cM+AACAPwAAAIAAAAAAAAAAgFHaGz9DHEs/AAAAgEMcSz9R2hs/AACAPwAAAAAAAAAAAAAAgEHxwz62hGw/AAAAgFHaGz9DHEs/AACAPwAAAAAAAACAAAAAgMuhBT5kzH0/AAAAgEHxwz62hGw/AACAPwAAAAAAAACAAAAAgMuhBT5kzH0/BwAqACYABwALACoAIAAFACQAIAABAAUADQAvACwADQAdAC8AIwAIACcAIwAEAAgAHgACACEAHgAAAAIAEQAXABUAEQAWABcAGQAUABsAGQAQABQAHwAiABIAIgAlABIAHwASABgAEgAoACsAEgArAC4AJQAoABIADwATABwAAwAaABMABgADABMAEwAPAAwADAAJABMACQAGABMACgAtACkACgAOAC0AiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA2klEQVR4Xo2SoQ7CQBBE95cw2AqCJAHDB2BAYbDFYgjB4HA4JD/Bb5XMJtNMptsGMel1393mZm7js1t10HO76K7Hffc9bHqRkb8u50E9AKD7uskN7XKea9YrrvVA4dTMUu/HrV/jAKQcDchQhwLXhgDRAF/WlI3xcL+41pRn5dnAPdEv6pqJizwbMDT6om/NRBuRZwP3VHke2wMe1TtrLlUmmstgDqoZoL2KZwbqif/qVzPxUHMO3LP7Vc/O08LUO0/NAZqVcwD9m0nwjV06B86Ul3Pgnn0PGfQDd4RKtBJ9p+oAAAAOZVhJZk1NACoAAAAIAAAAAAAAANJTkwAAAABJRU5ErkJgggAAAA=="
-		}
-	]
-}
diff --git a/src/main/resources/assets/architecture_extensions/models/block/octagonal_column.gltf b/src/main/resources/assets/architecture_extensions/models/block/octagonal_column.gltf
deleted file mode 100644
index a5d17d5..0000000
--- a/src/main/resources/assets/architecture_extensions/models/block/octagonal_column.gltf
+++ /dev/null
@@ -1,145 +0,0 @@
-{
-    "asset" : {
-        "generator" : "Khronos glTF Blender I/O v1.7.33",
-        "version" : "2.0"
-    },
-    "scene" : 0,
-    "scenes" : [
-        {
-            "name" : "Scene",
-            "nodes" : [
-                1
-            ]
-        }
-    ],
-    "nodes" : [
-        {
-            "mesh" : 0,
-            "name" : "cylinder"
-        },
-        {
-            "children" : [
-                0
-            ],
-            "name" : "Node_1"
-        }
-    ],
-    "materials" : [
-        {
-            "doubleSided" : true,
-            "name" : "Material",
-            "pbrMetallicRoughness" : {
-                "baseColorTexture" : {
-                    "index" : 0
-                },
-                "metallicFactor" : 0,
-                "roughnessFactor" : 0.5
-            }
-        }
-    ],
-    "meshes" : [
-        {
-            "name" : "Mesh_0",
-            "primitives" : [
-                {
-                    "attributes" : {
-                        "POSITION" : 0,
-                        "NORMAL" : 1,
-                        "TEXCOORD_0" : 2
-                    },
-                    "indices" : 3,
-                    "material" : 0
-                }
-            ]
-        }
-    ],
-    "textures" : [
-        {
-            "sampler" : 0,
-            "source" : 0
-        }
-    ],
-    "images" : [
-        {
-            "bufferView" : 4,
-            "mimeType" : "image/png",
-            "name" : "all",
-            "uri" : "#all"
-        }
-    ],
-    "accessors" : [
-        {
-            "bufferView" : 0,
-            "componentType" : 5126,
-            "count" : 56,
-            "max" : [
-                0.375,
-                0.5,
-                0.375
-            ],
-            "min" : [
-                -0.375,
-                -0.5,
-                -0.375
-            ],
-            "type" : "VEC3"
-        },
-        {
-            "bufferView" : 1,
-            "componentType" : 5126,
-            "count" : 56,
-            "type" : "VEC3"
-        },
-        {
-            "bufferView" : 2,
-            "componentType" : 5126,
-            "count" : 56,
-            "type" : "VEC2"
-        },
-        {
-            "bufferView" : 3,
-            "componentType" : 5123,
-            "count" : 84,
-            "type" : "SCALAR"
-        }
-    ],
-    "bufferViews" : [
-        {
-            "buffer" : 0,
-            "byteLength" : 672,
-            "byteOffset" : 0
-        },
-        {
-            "buffer" : 0,
-            "byteLength" : 672,
-            "byteOffset" : 672
-        },
-        {
-            "buffer" : 0,
-            "byteLength" : 448,
-            "byteOffset" : 1344
-        },
-        {
-            "buffer" : 0,
-            "byteLength" : 168,
-            "byteOffset" : 1792
-        },
-        {
-            "buffer" : 0,
-            "byteLength" : 269,
-            "byteOffset" : 1960
-        }
-    ],
-    "samplers" : [
-        {
-            "magFilter" : 9728,
-            "minFilter" : 9984
-        }
-    ],
-    "buffers" : [
-        {
-            "byteLength" : 2232,
-            "uri" : "data:application/octet-stream;base64,2g4fPgAAAL8AAMA+2g4fPgAAAL8AAMA+AADAPgAAAL/aDh8+AADAPgAAAL/aDh8+AADAPgAAAD/aDh8+AADAPgAAAD/aDh8+2g4fPgAAAD8AAMA+2g4fPgAAAD8AAMA+AADAPgAAAL/aDh8+AADAPgAAAL/aDh8+AADAPgAAAL/aDh++AADAPgAAAL/aDh++AADAPgAAAD/aDh++AADAPgAAAD/aDh++AADAPgAAAD/aDh8+AADAPgAAAD/aDh8+AADAPgAAAL/aDh++AADAPgAAAL/aDh++2g4fPgAAAL8AAMC+2g4fPgAAAL8AAMC+2g4fPgAAAD8AAMC+2g4fPgAAAD8AAMC+AADAPgAAAD/aDh++AADAPgAAAD/aDh++2g4fPgAAAL8AAMC+2g4fvgAAAL8AAMC+2g4fvgAAAD8AAMC+2g4fPgAAAD8AAMC+2g4fvgAAAL8AAMC+2g4fvgAAAL8AAMC+AADAvgAAAL/aDh++AADAvgAAAL/aDh++AADAvgAAAD/aDh++AADAvgAAAD/aDh++2g4fvgAAAD8AAMC+2g4fvgAAAD8AAMC+AADAvgAAAL/aDh++AADAvgAAAL/aDh++AADAvgAAAL/aDh8+AADAvgAAAL/aDh8+AADAvgAAAD/aDh8+AADAvgAAAD/aDh8+AADAvgAAAD/aDh++AADAvgAAAD/aDh++AADAvgAAAL/aDh8+AADAvgAAAL/aDh8+2g4fvgAAAL8AAMA+2g4fvgAAAL8AAMA+2g4fvgAAAD8AAMA+2g4fvgAAAD8AAMA+AADAvgAAAD/aDh8+AADAvgAAAD/aDh8+2g4fvgAAAL8AAMA+2g4fPgAAAL8AAMA+2g4fPgAAAD8AAMA+2g4fvgAAAD8AAMA+AAAAAP//f78AAACA9AQ1PwAAAAD0BDU/AAAAAP//f78AAACA9AQ1PwAAAAD0BDU/AAAAAP//fz8AAACA9AQ1PwAAAAD0BDU/AAAAAP//fz8AAACA9AQ1PwAAAAD0BDU/AAAAAAAAgL8AAACAAACAPwAAAAAAAACAAAAAAAAAgL8AAACAAACAPwAAAAAAAACAAAAAAAAAgD8AAACAAACAPwAAAAAAAACAAAAAAAAAgD8AAACAAACAPwAAAAAAAACAAAAAAP//f78AAACA9AQ1PwAAAAD0BDW/AAAAAP//f78AAACA9AQ1PwAAAAD0BDW/AAAAAP//fz8AAACA9AQ1PwAAAAD0BDW/AAAAAP//fz8AAACA9AQ1PwAAAAD0BDW/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/9AQ1vwAAAAD0BDW/AAAAAP//f78AAACA9AQ1vwAAAAD0BDW/AAAAAP//f78AAACA9AQ1vwAAAAD0BDW/AAAAAP//fz8AAACA9AQ1vwAAAAD0BDW/AAAAAP//fz8AAACAAACAvwAAAAAAAACAAAAAAAAAgL8AAACAAACAvwAAAAAAAACAAAAAAAAAgL8AAACAAACAvwAAAAAAAACAAAAAAAAAgD8AAACAAACAvwAAAAAAAACAAAAAAAAAgD8AAACA9AQ1vwAAAAD0BDU/AAAAAP//f78AAACA9AQ1vwAAAAD0BDU/AAAAAP//f78AAACA9AQ1vwAAAAD0BDU/AAAAAP//fz8AAACA9AQ1vwAAAAD0BDU/AAAAAP//fz8AAACAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/tusnP5BgYD8AAAA/AACAP5BgYD+26yc/9fw/PwAAgD+pSmA/pOInP/X8Pz8AAAAApOInP6lKYD8AAAA/AAAAAJBgYD+26yc/AABAPwAAgD+QYGA/lCiwPgAAgD8AAIA/qUpgP7g6sD4AAIA/AAAAAKlKYD+k4ic/AABAPwAAAACQYGA/lCiwPgAAAAAAAIA/tusnP4D7/D0AAIA+AACAP6TiJz+4qv09AACAPgAAAACpSmA/uDqwPgAAAAAAAAAAAACAPgAAgD8AAAA/AACAPwAAAD8AAAAAAACAPgAAAAAAAAA/AACAP5QosD6A+/w9AABAPwAAgD+E+/w9lCiwPgAAQD8AAAAAuKr9Pbg6sD4AAAA/AAAAALk6sD64qv09AABAPwAAgD+E+/w9lCiwPjTwfz8AAIA/hPv8PbbrJz808H8/AAAAALiq/T2k4ic/AABAPwAAAAC4qv09uDqwPgAAgLIAAIA/hPv8PbbrJz8AAIA+AACAP5QosD6QYGA/AACAPgAAAAC5OrA+qUpgPwAAgLIAAAAAuKr9PaTiJz8AAIA+AACAPwAAAD8AAIA/AAAAPwAAAAAAAIA+AAAAAAkACwANAAkADQAPABEAEwAVABEAFQAXABgAGQAaABgAGgAbABwAHgAgABwAIAAiACQAJgAoACQAKAAqACwALgAwACwAMAAyAAEAAwAFAAEABQAHADQANQA2ADQANgA3AAQAMwAxAAQAMQAGAAAALwAtAAAALQACAAgAJwAlAAgAJQAKABAAHwAdABAAHQASAAwAKwApAAwAKQAOABQAIwAhABQAIQAWAIlQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgGAAAAH/P/YQAAANRJREFUOMuFUyESAkEMy3MYMAwGicQgUDgUmn+cQ+P4AB9A8rFlsjPZCaGA6HW37WybNIfHad3ux1Wjf543H/Yrft0vGnjQIzQGb4fleDTzurOGhqpQXkWyfKRPwM9lN+/Gs+7TdtZNOZ09Tg9hZIfEmTGHwhzvbxCUkHc+Eqrq4fi8gwitiHRekFiTg8xnDXzP3uWfFrRK+Opy3Fyhe3GEit1q95kfEzjGSgeec03IxgTJhTo4bnHjtfim8Ry3WmfXgRfmf+A6qPgZHCQ258M5qfTxAhwqM9p+Fc+CAAAAAElFTkSuQmCCAAAA"
-        }
-    ]
-}
diff --git a/src/main/resources/assets/architecture_extensions/models/block/octagonal_column_cap.gltf b/src/main/resources/assets/architecture_extensions/models/block/octagonal_column_cap.gltf
deleted file mode 100644
index fe5f774..0000000
--- a/src/main/resources/assets/architecture_extensions/models/block/octagonal_column_cap.gltf
+++ /dev/null
@@ -1,145 +0,0 @@
-{
-    "asset" : {
-        "generator" : "Khronos glTF Blender I/O v1.7.33",
-        "version" : "2.0"
-    },
-    "scene" : 0,
-    "scenes" : [
-        {
-            "name" : "Scene",
-            "nodes" : [
-                1
-            ]
-        }
-    ],
-    "nodes" : [
-        {
-            "mesh" : 0,
-            "name" : "cylinder.001"
-        },
-        {
-            "children" : [
-                0
-            ],
-            "name" : "Node_3"
-        }
-    ],
-    "materials" : [
-        {
-            "doubleSided" : true,
-            "name" : "Material",
-            "pbrMetallicRoughness" : {
-                "baseColorTexture" : {
-                    "index" : 0
-                },
-                "metallicFactor" : 0,
-                "roughnessFactor" : 0.5
-            }
-        }
-    ],
-    "meshes" : [
-        {
-            "name" : "Mesh_1",
-            "primitives" : [
-                {
-                    "attributes" : {
-                        "POSITION" : 0,
-                        "NORMAL" : 1,
-                        "TEXCOORD_0" : 2
-                    },
-                    "indices" : 3,
-                    "material" : 0
-                }
-            ]
-        }
-    ],
-    "textures" : [
-        {
-            "sampler" : 0,
-            "source" : 0
-        }
-    ],
-    "images" : [
-        {
-            "bufferView" : 4,
-            "mimeType" : "image/png",
-            "name" : "all",
-            "uri": "#all"
-        }
-    ],
-    "accessors" : [
-        {
-            "bufferView" : 0,
-            "componentType" : 5126,
-            "count" : 144,
-            "max" : [
-                0.5,
-                0.5,
-                0.5
-            ],
-            "min" : [
-                -0.5,
-                -0.5,
-                -0.5
-            ],
-            "type" : "VEC3"
-        },
-        {
-            "bufferView" : 1,
-            "componentType" : 5126,
-            "count" : 144,
-            "type" : "VEC3"
-        },
-        {
-            "bufferView" : 2,
-            "componentType" : 5126,
-            "count" : 144,
-            "type" : "VEC2"
-        },
-        {
-            "bufferView" : 3,
-            "componentType" : 5123,
-            "count" : 216,
-            "type" : "SCALAR"
-        }
-    ],
-    "bufferViews" : [
-        {
-            "buffer" : 0,
-            "byteLength" : 1728,
-            "byteOffset" : 0
-        },
-        {
-            "buffer" : 0,
-            "byteLength" : 1728,
-            "byteOffset" : 1728
-        },
-        {
-            "buffer" : 0,
-            "byteLength" : 1152,
-            "byteOffset" : 3456
-        },
-        {
-            "buffer" : 0,
-            "byteLength" : 432,
-            "byteOffset" : 4608
-        },
-        {
-            "buffer" : 0,
-            "byteLength" : 269,
-            "byteOffset" : 5040
-        }
-    ],
-    "samplers" : [
-        {
-            "magFilter" : 9728,
-            "minFilter" : 9984
-        }
-    ],
-    "buffers" : [
-        {
-            "byteLength" : 5312,
-            "uri" : "data:application/octet-stream;base64,U5E5PgAAgD4AAOA+U5E5PgAAgD4AAOA+AADgPgAAgD5TkTk+AADgPgAAgD5TkTk+AADgPgAAwD5TkTk+U5E5PgAAwD4AAOA+AADgPgAAgD5TkTk+AADgPgAAgD5TkTk+AADgPgAAgD5TkTm+AADgPgAAgD5TkTm+AADgPgAAwD5TkTm+AADgPgAAwD5TkTk+AADgPgAAgD5TkTm+AADgPgAAgD5TkTm+U5E5PgAAgD4AAOC+U5E5PgAAgD4AAOC+U5E5PgAAwD4AAOC+AADgPgAAwD5TkTm+U5E5PgAAgD4AAOC+U5E5vgAAgD4AAOC+U5E5vgAAwD4AAOC+U5E5PgAAwD4AAOC+U5E5vgAAgD4AAOC+U5E5vgAAgD4AAOC+AADgvgAAgD5TkTm+AADgvgAAgD5TkTm+AADgvgAAwD5TkTm+U5E5vgAAwD4AAOC+AADgvgAAgD5TkTm+AADgvgAAgD5TkTm+AADgvgAAgD5TkTk+AADgvgAAgD5TkTk+AADgvgAAwD5TkTk+AADgvgAAwD5TkTm+AADgvgAAgD5TkTk+AADgvgAAgD5TkTk+U5E5vgAAgD4AAOA+U5E5vgAAgD4AAOA+U5E5vgAAwD4AAOA+AADgvgAAwD5TkTk+U5E5vgAAgD4AAOA+U5E5PgAAgD4AAOA+U5E5PgAAwD4AAOA+U5E5vgAAwD4AAOA+2g4fPgAAAL8AAMA+2g4fPgAAAL8AAMA+AADAPgAAAL/aDh8+AADAPgAAAL/aDh8+AADAPgAAgD7aDh8+2g4fPgAAgD4AAMA+AADAPgAAAL/aDh8+AADAPgAAAL/aDh8+AADAPgAAAL/aDh++AADAPgAAAL/aDh++AADAPgAAgD7aDh++AADAPgAAgD7aDh8+AADAPgAAAL/aDh++AADAPgAAAL/aDh++2g4fPgAAAL8AAMC+2g4fPgAAAL8AAMC+2g4fPgAAgD4AAMC+AADAPgAAgD7aDh++2g4fPgAAAL8AAMC+2g4fvgAAAL8AAMC+2g4fvgAAgD4AAMC+2g4fPgAAgD4AAMC+2g4fvgAAAL8AAMC+2g4fvgAAAL8AAMC+AADAvgAAAL/aDh++AADAvgAAAL/aDh++AADAvgAAgD7aDh++2g4fvgAAgD4AAMC+AADAvgAAAL/aDh++AADAvgAAAL/aDh++AADAvgAAAL/aDh8+AADAvgAAAL/aDh8+AADAvgAAgD7aDh8+AADAvgAAgD7aDh++AADAvgAAAL/aDh8+AADAvgAAAL/aDh8+2g4fvgAAAL8AAMA+2g4fvgAAAL8AAMA+2g4fvgAAgD4AAMA+AADAvgAAgD7aDh8+2g4fvgAAAL8AAMA+2g4fPgAAAL8AAMA+2g4fPgAAgD4AAMA+2g4fvgAAgD4AAMA+zRNUPgAAwD4AAAA/zRNUPgAAwD4AAAA/AAAAPwAAwD7NE1Q+AAAAPwAAwD7NE1Q+AAAAPwAAAD/NE1Q+AAAAPwAAAD/NE1Q+zRNUPgAAAD8AAAA/zRNUPgAAAD8AAAA/AAAAPwAAwD7NE1Q+AAAAPwAAwD7NE1Q+AAAAPwAAwD7NE1S+AAAAPwAAwD7NE1S+AAAAPwAAAD/NE1S+AAAAPwAAAD/NE1S+AAAAPwAAAD/NE1Q+AAAAPwAAAD/NE1Q+AAAAPwAAwD7NE1S+AAAAPwAAwD7NE1S+zRNUPgAAwD4AAAC/zRNUPgAAwD4AAAC/zRNUPgAAAD8AAAC/zRNUPgAAAD8AAAC/AAAAPwAAAD/NE1S+AAAAPwAAAD/NE1S+zRNUPgAAwD4AAAC/zRNUvgAAwD4AAAC/zRNUvgAAAD8AAAC/zRNUPgAAAD8AAAC/zRNUvgAAwD4AAAC/zRNUvgAAwD4AAAC/AAAAvwAAwD7NE1S+AAAAvwAAwD7NE1S+AAAAvwAAAD/NE1S+AAAAvwAAAD/NE1S+zRNUvgAAAD8AAAC/zRNUvgAAAD8AAAC/AAAAvwAAwD7NE1S+AAAAvwAAwD7NE1S+AAAAvwAAwD7NE1Q+AAAAvwAAwD7NE1Q+AAAAvwAAAD/NE1Q+AAAAvwAAAD/NE1Q+AAAAvwAAAD/NE1S+AAAAvwAAAD/NE1S+AAAAvwAAwD7NE1Q+AAAAvwAAwD7NE1Q+zRNUvgAAwD4AAAA/zRNUvgAAwD4AAAA/zRNUvgAAAD8AAAA/zRNUvgAAAD8AAAA/AAAAvwAAAD/NE1Q+AAAAvwAAAD/NE1Q+zRNUvgAAwD4AAAA/zRNUPgAAwD4AAAA/zRNUPgAAAD8AAAA/zRNUvgAAAD8AAAA/AAAAAAAAgL8AAACA8gQ1PwAAAADyBDU/AAAAAAAAgL8AAACA8gQ1PwAAAADyBDU/8gQ1PwAAAADyBDU/8gQ1PwAAAADyBDU/AAAAAAAAgL8AAACA//9/PwAAAAAAAACAAAAAAAAAgL8AAACA//9/PwAAAAAAAACA//9/PwAAAAAAAACA//9/PwAAAAAAAACAAAAAAAAAgL8AAACA8gQ1PwAAAADyBDW/AAAAAAAAgL8AAACA8gQ1PwAAAADyBDW/8gQ1PwAAAADyBDW/8gQ1PwAAAADyBDW/AAAAAAAAAAD//3+/AAAAAAAAAAD//3+/AAAAAAAAAAD//3+/AAAAAAAAAAD//3+/8gQ1vwAAAADyBDW/AAAAAAAAgL8AAACA8gQ1vwAAAADyBDW/AAAAAAAAgL8AAACA8gQ1vwAAAADyBDW/8gQ1vwAAAADyBDW///9/vwAAAAAAAACAAAAAAAAAgL8AAACA//9/vwAAAAAAAACAAAAAAAAAgL8AAACA//9/vwAAAAAAAACA//9/vwAAAAAAAACA8gQ1vwAAAADyBDU/AAAAAAAAgL8AAACA8gQ1vwAAAADyBDU/AAAAAAAAgL8AAACA8gQ1vwAAAADyBDU/8gQ1vwAAAADyBDU/AAAAAAAAAAD//38/AAAAAAAAAAD//38/AAAAAAAAAAD//38/AAAAAAAAAAD//38/AAAAAP//f78AAACA8wQ1PwAAAADzBDU/AAAAAP//f78AAACA8wQ1PwAAAADzBDU/8wQ1PwAAAADzBDU/8wQ1PwAAAADzBDU/AAAAAAAAgL8AAACAAACAPwAAAAAAAACAAAAAAAAAgL8AAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAACAPwAAAAAAAACAAAAAAP//f78AAACA8wQ1PwAAAADzBDW/AAAAAP//f78AAACA8wQ1PwAAAADzBDW/8wQ1PwAAAADzBDW/8wQ1PwAAAADzBDW/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/8wQ1vwAAAADzBDW/AAAAAP//f78AAACA8wQ1vwAAAADzBDW/AAAAAP//f78AAACA8wQ1vwAAAADzBDW/8wQ1vwAAAADzBDW/AACAvwAAAAAAAACAAAAAAAAAgL8AAACAAACAvwAAAAAAAACAAAAAAAAAgL8AAACAAACAvwAAAAAAAACAAACAvwAAAAAAAACA8wQ1vwAAAADzBDU/AAAAAP//f78AAACA8wQ1vwAAAADzBDU/AAAAAP//f78AAACA8wQ1vwAAAADzBDU/8wQ1vwAAAADzBDU/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AAAAAP//f78AAACA8wQ1PwAAAADzBDU/AAAAAP//f78AAACA8wQ1PwAAAADzBDU/AAAAAP//fz8AAACA8wQ1PwAAAADzBDU/AAAAAP//fz8AAACA8wQ1PwAAAADzBDU/AAAAAP//f78AAACAAACAPwAAAAAAAACAAAAAAP//f78AAACAAACAPwAAAAAAAACAAAAAAP//fz8AAACAAACAPwAAAAAAAACAAAAAAP//fz8AAACAAACAPwAAAAAAAACAAAAAAP//f78AAACA8wQ1PwAAAADzBDW/AAAAAP//f78AAACA8wQ1PwAAAADzBDW/AAAAAP//fz8AAACA8wQ1PwAAAADzBDW/AAAAAP//fz8AAACA8wQ1PwAAAADzBDW/AAAAAAAAAAD//3+/AAAAAAAAAAD//3+/AAAAAAAAAAD//3+/AAAAAAAAAAD//3+/8wQ1vwAAAADzBDW/AAAAAP//f78AAACA8wQ1vwAAAADzBDW/AAAAAP//f78AAACA8wQ1vwAAAADzBDW/AAAAAP//fz8AAACA8wQ1vwAAAADzBDW/AAAAAP//fz8AAACAAACAvwAAAAAAAACAAAAAAP//f78AAACAAACAvwAAAAAAAACAAAAAAP//f78AAACAAACAvwAAAAAAAACAAAAAAP//fz8AAACAAACAvwAAAAAAAACAAAAAAP//fz8AAACA8wQ1vwAAAADzBDU/AAAAAP//f78AAACA8wQ1vwAAAADzBDU/AAAAAP//f78AAACA8wQ1vwAAAADzBDU/AAAAAP//fz8AAACA8wQ1vwAAAADzBDU/AAAAAP//fz8AAACAAAAAAAAAAAD//38/AAAAAAAAAAD//38/AAAAAAAAAAD//38/AAAAAAAAAAD//38/SeZuPyJiLj8AAAA/AACAPmxLLT8fNm8/AABAPwAAgD4AAEA/AAAAPgAAAD8AAAA+LmKjPoDshT0AAEA/AACAPmzsLT9w7IU9AACAPwAAgD4AAIA/AAAAPgAAQD8AAAA+oImjPlhobz8AAAAAAACAPqxohD2dMC4/AACAPgAAgD4AAIA+AAAAPgAAAAAAAAA+AACAPgAAgD4AAAA/AACAPgAAAD8AAAA+AACAPgAAAD4AAAA/AACAPqxohD2Q6qM+AABAPwAAgD6giaM+gOyFPQAAQD8AAAA+AAAAPwAAAD4AAEA/AACAPm7sLT9YaG8/AACAPwAAgD4xYqM+WGhvPwAAgD8AAAA+AABAPwAAAD4AAAAAAACAPuqeLj/QYoQ9AACAPgAAgD7qcm8/cE6kPgAAgD4AAAA+AAAAAAAAAD4AAIA+AACAPgAAAD8AAIA+AAAAPwAAAD4AAIA+AAAAPoDLJz9w1fw9AAAAPwAAgD/gMGA/HACwPgAAQD8AAIA/AABAPwAAgD4AAAA/AACAPuAwYD+8G7A+AABAPwAAgD/gMGA/aM8nPwAAgD8AAIA/AACAPwAAgD4AAEA/AACAPmxbYD/jSig/AAAAAAAAgD9SoCc/BlpgPwAAgD4AAIA/AACAPgAAgD4AAAAAAACAPgAAgD4AAIA/AAAAPwAAgD8AAAA/AACAPgAAgD4AAIA+AAAAPwAAgD9Ovq8+buBfPwAAQD8AAIA/GID+PVMlJz8AAEA/AACAPgAAAD8AAIA+AABAPwAAgD+4JP09ac8nPwAAgD8AAIA/qCT9Pb4bsD4AAIA/AACAPgAAQD8AAIA+AAAAAAAAgD+oJP09HgCwPgAAgD4AAIA/7BOwPnDV/D0AAIA+AACAPgAAAAAAAIA+AACAPgAAgD8AAAA/AACAPwAAAD8AAIA+AACAPgAAgD4AAAAAYD+WPgAAAD8AAAA+YM6VPgAAYjoAAEA/AAAAPgAAgD/0BDU/AABAPwAAAADzBDU/AACAPwAAAD8AAAAA4DuWPgAEYjoAAEA/AAAAPsILNT8ABGI6AACAPwAAAD4AAIA/GvaVPgAAgD8AAAAAAACAP/QENT8AAEA/AAAAAM8YNT8AAGI6AAAAAAAAAD4AAIA/ZD+WPgAAgD4AAAA+8wQ1PwAAAAAAAIA+AAAAAAAAgD8a9pU+AAAAAAAAAAAAAIA+AAAAPgAAAD8AAAA+AAAAPwAAAAAAAIA+AAAAAAAAAD8AAAA+AACAP4QNNT8AAEA/AAAAPs8YNT+z9H8/AABAPwAAAAAAAAAAGvaVPgAAAD8AAAAAGvaVPgAAAAAAAEA/AAAAPsQLNT+y9H8/AACAPwAAAD7jO5Y+s/R/PwAAgD8AAAAAAAAAAPQENT8AAEA/AAAAAAAAAAAa9pU+AAAAAAAAAD5gzpU+s/R/PwAAgD4AAAA+AAAAAIENNT8AAIA+AAAAABr2lT4AAIA/AAAAAAAAAAAAAAAA9AQ1PwAAgD4AAAA+AAAAPwAAAD4AAAA/AAAAAAAAgD4AAAAABwAJAAoABwAKAAsADQAPABAADQAQABEAEgATABQAEgAUABUAFgAYABoAFgAaABsAHAAeACAAHAAgACEAIgAkACYAIgAmACcAAQADAAQAAQAEAAUAKAApACoAKAAqACsAAAAlACMAAAAjAAIADAAZABcADAAXAA4ABgAfAB0ABgAdAAgAMwA1ADYAMwA2ADcAOQA7ADwAOQA8AD0APgA/AEAAPgBAAEEAQgBEAEYAQgBGAEcASABKAEwASABMAE0ATgBQAFIATgBSAFMALQAvADAALQAwADEAVABVAFYAVABWAFcALABRAE8ALABPAC4AMgBLAEkAMgBJADQAOABFAEMAOABDADoAYQBjAGUAYQBlAGcAaQBrAG0AaQBtAG8AcABxAHIAcAByAHMAdAB2AHgAdAB4AHoAfAB+AIAAfACAAIIAhACGAIgAhACIAIoAWQBbAF0AWQBdAF8AjACNAI4AjACOAI8AaAB3AHUAaAB1AGoAYAB/AH0AYAB9AGIAWACHAIUAWACFAFoAXACLAIkAXACJAF4AZACDAIEAZACBAGYAbAB7AHkAbAB5AG4AiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA1ElEQVQ4y4VTIRICQQzLcxgwDAaJxCBQOBSaf5xD4/gAH0DysWWyM9kJoYDodbftbJs0h8dp3e7HVaN/njcf9it+3S8aeNAjNAZvh+V4NPO6s4aGqlBeRbJ8pE/Az2U378az7tN21k05nT1OD2Fkh8SZMYfCHO9vEJSQdz4Squrh+LyDCK2IdF6QWJODzGcNfM/e5Z8WtEr46nLcXKF7cYSK3Wr3mR8TOMZKB55zTcjGBMmFOjhuceO1+KbxHLdaZ9eBF+Z/4Dqo+BkcJDbnwzmp9PECHCoz2n4Vz4IAAAAASUVORK5CYIIAAAA="
-        }
-    ]
-}
diff --git a/src/main/resources/assets/architecture_extensions/models/block/octagonal_column_double_cap.gltf b/src/main/resources/assets/architecture_extensions/models/block/octagonal_column_double_cap.gltf
deleted file mode 100644
index cf93393..0000000
--- a/src/main/resources/assets/architecture_extensions/models/block/octagonal_column_double_cap.gltf
+++ /dev/null
@@ -1,121 +0,0 @@
-{
-	"asset":{
-		"generator":"Khronos glTF Blender I/O v3.5.30",
-		"version":"2.0"
-	},
-	"scene":0,
-	"scenes":[
-		{
-			"name":"Scene",
-			"nodes":[
-				1
-			]
-		}
-	],
-	"nodes":[
-		{
-			"mesh":0,
-			"name":"cylinder.001"
-		},
-		{
-			"children":[
-				0
-			],
-			"name":"Node_3"
-		}
-	],
-	"materials":[
-		{
-			"doubleSided":true,
-			"name":"Material.001",
-			"pbrMetallicRoughness":{
-				"metallicFactor":0,
-				"roughnessFactor":0.5
-			}
-		}
-	],
-	"meshes":[
-		{
-			"name":"Mesh_1",
-			"primitives":[
-				{
-					"attributes":{
-						"POSITION":0,
-						"TEXCOORD_0":1,
-						"NORMAL":2
-					},
-					"indices":3,
-					"material":0
-				}
-			]
-		}
-	],
-	"accessors":[
-		{
-			"bufferView":0,
-			"componentType":5126,
-			"count":232,
-			"max":[
-				0.5,
-				0.5,
-				0.5
-			],
-			"min":[
-				-0.5,
-				-0.5,
-				-0.5
-			],
-			"type":"VEC3"
-		},
-		{
-			"bufferView":1,
-			"componentType":5126,
-			"count":232,
-			"type":"VEC2"
-		},
-		{
-			"bufferView":2,
-			"componentType":5126,
-			"count":232,
-			"type":"VEC3"
-		},
-		{
-			"bufferView":3,
-			"componentType":5123,
-			"count":348,
-			"type":"SCALAR"
-		}
-	],
-	"bufferViews":[
-		{
-			"buffer":0,
-			"byteLength":2784,
-			"byteOffset":0,
-			"target":34962
-		},
-		{
-			"buffer":0,
-			"byteLength":1856,
-			"byteOffset":2784,
-			"target":34962
-		},
-		{
-			"buffer":0,
-			"byteLength":2784,
-			"byteOffset":4640,
-			"target":34962
-		},
-		{
-			"buffer":0,
-			"byteLength":696,
-			"byteOffset":7424,
-			"target":34963
-		}
-	],
-	"buffers":[
-		{
-			"byteLength":8120,
-			"uri":"data:application/octet-stream;base64,U5E5PgAAgD4AAOA+U5E5PgAAgD4AAOA+AADgPgAAgD5TkTk+AADgPgAAgD5TkTk+AADgPgAAwD5TkTk+U5E5PgAAwD4AAOA+AADgPgAAgD5TkTk+AADgPgAAgD5TkTk+AADgPgAAgD5TkTm+AADgPgAAgD5TkTm+AADgPgAAwD5TkTm+AADgPgAAwD5TkTk+AADgPgAAgD5TkTm+AADgPgAAgD5TkTm+U5E5PgAAgD4AAOC+U5E5PgAAgD4AAOC+U5E5PgAAwD4AAOC+AADgPgAAwD5TkTm+U5E5PgAAgD4AAOC+U5E5vgAAgD4AAOC+U5E5vgAAwD4AAOC+U5E5PgAAwD4AAOC+U5E5vgAAgD4AAOC+U5E5vgAAgD4AAOC+AADgvgAAgD5TkTm+AADgvgAAgD5TkTm+AADgvgAAwD5TkTm+U5E5vgAAwD4AAOC+AADgvgAAgD5TkTm+AADgvgAAgD5TkTm+AADgvgAAgD5TkTk+AADgvgAAgD5TkTk+AADgvgAAwD5TkTk+AADgvgAAwD5TkTm+AADgvgAAgD5TkTk+AADgvgAAgD5TkTk+U5E5vgAAgD4AAOA+U5E5vgAAgD4AAOA+U5E5vgAAwD4AAOA+AADgvgAAwD5TkTk+U5E5vgAAgD4AAOA+U5E5PgAAgD4AAOA+U5E5PgAAwD4AAOA+U5E5vgAAwD4AAOA+2g4fPgAAgL4AAMA+AADAPgAAgL7aDh8+AADAPgAAgD7aDh8+2g4fPgAAgD4AAMA+AADAPgAAgL7aDh8+AADAPgAAgL7aDh++AADAPgAAgD7aDh++AADAPgAAgD7aDh8+AADAPgAAgL7aDh++2g4fPgAAgL4AAMC+2g4fPgAAgD4AAMC+AADAPgAAgD7aDh++2g4fPgAAgL4AAMC+2g4fvgAAgL4AAMC+2g4fvgAAgD4AAMC+2g4fPgAAgD4AAMC+2g4fvgAAgL4AAMC+AADAvgAAgL7aDh++AADAvgAAgD7aDh++2g4fvgAAgD4AAMC+AADAvgAAgL7aDh++AADAvgAAgL7aDh8+AADAvgAAgD7aDh8+AADAvgAAgD7aDh++AADAvgAAgL7aDh8+2g4fvgAAgL4AAMA+2g4fvgAAgD4AAMA+AADAvgAAgD7aDh8+2g4fvgAAgL4AAMA+2g4fPgAAgL4AAMA+2g4fPgAAgD4AAMA+2g4fvgAAgD4AAMA+zRNUPgAAwD4AAAA/zRNUPgAAwD4AAAA/AAAAPwAAwD7NE1Q+AAAAPwAAwD7NE1Q+AAAAPwAAAD/NE1Q+AAAAPwAAAD/NE1Q+zRNUPgAAAD8AAAA/zRNUPgAAAD8AAAA/AAAAPwAAwD7NE1Q+AAAAPwAAwD7NE1Q+AAAAPwAAwD7NE1S+AAAAPwAAwD7NE1S+AAAAPwAAAD/NE1S+AAAAPwAAAD/NE1S+AAAAPwAAAD/NE1Q+AAAAPwAAAD/NE1Q+AAAAPwAAwD7NE1S+AAAAPwAAwD7NE1S+zRNUPgAAwD4AAAC/zRNUPgAAwD4AAAC/zRNUPgAAAD8AAAC/zRNUPgAAAD8AAAC/AAAAPwAAAD/NE1S+AAAAPwAAAD/NE1S+zRNUPgAAwD4AAAC/zRNUvgAAwD4AAAC/zRNUvgAAAD8AAAC/zRNUPgAAAD8AAAC/zRNUvgAAwD4AAAC/zRNUvgAAwD4AAAC/AAAAvwAAwD7NE1S+AAAAvwAAwD7NE1S+AAAAvwAAAD/NE1S+AAAAvwAAAD/NE1S+zRNUvgAAAD8AAAC/zRNUvgAAAD8AAAC/AAAAvwAAwD7NE1S+AAAAvwAAwD7NE1S+AAAAvwAAwD7NE1Q+AAAAvwAAwD7NE1Q+AAAAvwAAAD/NE1Q+AAAAvwAAAD/NE1Q+AAAAvwAAAD/NE1S+AAAAvwAAAD/NE1S+AAAAvwAAwD7NE1Q+AAAAvwAAwD7NE1Q+zRNUvgAAwD4AAAA/zRNUvgAAwD4AAAA/zRNUvgAAAD8AAAA/zRNUvgAAAD8AAAA/AAAAvwAAAD/NE1Q+AAAAvwAAAD/NE1Q+zRNUvgAAwD4AAAA/zRNUPgAAwD4AAAA/zRNUPgAAAD8AAAA/zRNUvgAAAD8AAAA/zRNUPgAAAL8AAAA/zRNUPgAAAL8AAAA/AAAAPwAAAL/NE1Q+AAAAPwAAAL/NE1Q+AAAAPwAAwL7NE1Q+AAAAPwAAwL7NE1Q+zRNUPgAAwL4AAAA/zRNUPgAAwL4AAAA/AAAAPwAAAL/NE1Q+AAAAPwAAAL/NE1Q+AAAAPwAAAL/NE1S+AAAAPwAAAL/NE1S+AAAAPwAAwL7NE1S+AAAAPwAAwL7NE1S+AAAAPwAAwL7NE1Q+AAAAPwAAwL7NE1Q+AAAAPwAAAL/NE1S+AAAAPwAAAL/NE1S+zRNUPgAAAL8AAAC/zRNUPgAAAL8AAAC/zRNUPgAAwL4AAAC/zRNUPgAAwL4AAAC/AAAAPwAAwL7NE1S+AAAAPwAAwL7NE1S+zRNUPgAAAL8AAAC/zRNUvgAAAL8AAAC/zRNUvgAAwL4AAAC/zRNUPgAAwL4AAAC/zRNUvgAAAL8AAAC/zRNUvgAAAL8AAAC/AAAAvwAAAL/NE1S+AAAAvwAAAL/NE1S+AAAAvwAAwL7NE1S+AAAAvwAAwL7NE1S+zRNUvgAAwL4AAAC/zRNUvgAAwL4AAAC/AAAAvwAAAL/NE1S+AAAAvwAAAL/NE1S+AAAAvwAAAL/NE1Q+AAAAvwAAAL/NE1Q+AAAAvwAAwL7NE1Q+AAAAvwAAwL7NE1Q+AAAAvwAAwL7NE1S+AAAAvwAAwL7NE1S+AAAAvwAAAL/NE1Q+AAAAvwAAAL/NE1Q+zRNUvgAAAL8AAAA/zRNUvgAAAL8AAAA/zRNUvgAAwL4AAAA/zRNUvgAAwL4AAAA/AAAAvwAAwL7NE1Q+AAAAvwAAwL7NE1Q+zRNUvgAAAL8AAAA/zRNUPgAAAL8AAAA/zRNUPgAAwL4AAAA/zRNUvgAAwL4AAAA/U5E5PgAAgL4AAOA+U5E5PgAAgL4AAOA+AADgPgAAgL5TkTk+AADgPgAAgL5TkTk+AADgPgAAwL5TkTk+U5E5PgAAwL4AAOA+AADgPgAAgL5TkTk+AADgPgAAgL5TkTk+AADgPgAAgL5TkTm+AADgPgAAgL5TkTm+AADgPgAAwL5TkTm+AADgPgAAwL5TkTk+AADgPgAAgL5TkTm+AADgPgAAgL5TkTm+U5E5PgAAgL4AAOC+U5E5PgAAgL4AAOC+U5E5PgAAwL4AAOC+AADgPgAAwL5TkTm+U5E5PgAAgL4AAOC+U5E5vgAAgL4AAOC+U5E5vgAAwL4AAOC+U5E5PgAAwL4AAOC+U5E5vgAAgL4AAOC+U5E5vgAAgL4AAOC+AADgvgAAgL5TkTm+AADgvgAAgL5TkTm+AADgvgAAwL5TkTm+U5E5vgAAwL4AAOC+AADgvgAAgL5TkTm+AADgvgAAgL5TkTm+AADgvgAAgL5TkTk+AADgvgAAgL5TkTk+AADgvgAAwL5TkTk+AADgvgAAwL5TkTm+AADgvgAAgL5TkTk+AADgvgAAgL5TkTk+U5E5vgAAgL4AAOA+U5E5vgAAgL4AAOA+U5E5vgAAwL4AAOA+AADgvgAAwL5TkTk+U5E5vgAAgL4AAOA+U5E5PgAAgL4AAOA+U5E5PgAAwL4AAOA+U5E5vgAAwL4AAOA+SeZuPyJiLj8AAAA/AACAPmxLLT8fNm8/AABAPwAAgD4AAEA/AAAAPgAAAD8AAAA+LmKjPoDshT0AAEA/AACAPmzsLT9w7IU9AACAPwAAgD4AAIA/AAAAPgAAQD8AAAA+oImjPlhobz8AAAAAAACAPqxohD2dMC4/AACAPgAAgD4AAIA+AAAAPgAAAAAAAAA+AACAPgAAgD4AAAA/AACAPgAAAD8AAAA+AACAPgAAAD4AAAA/AACAPqxohD2Q6qM+AABAPwAAgD6giaM+gOyFPQAAQD8AAAA+AAAAPwAAAD4AAEA/AACAPm7sLT9YaG8/AACAPwAAgD4xYqM+WGhvPwAAgD8AAAA+AABAPwAAAD4AAAAAAACAPuqeLj/QYoQ9AACAPgAAgD7qcm8/cE6kPgAAgD4AAAA+AAAAAAAAAD4AAIA+AACAPgAAAD8AAIA+AAAAPwAAAD4AAIA+AAAAPgAAAD8AAIA/AABAPwAAgD8AAEA/AACAPgAAAD8AAIA+AABAPwAAgD8AAIA/AACAPwAAgD8AAIA+AABAPwAAgD4AAAAAAACAPwAAgD4AAIA/AACAPgAAgD4AAAAAAACAPgAAgD4AAIA/AAAAPwAAgD8AAAA/AACAPgAAgD4AAIA+AAAAPwAAgD8AAEA/AACAPwAAQD8AAIA+AAAAPwAAgD4AAEA/AACAPwAAgD8AAIA/AACAPwAAgD4AAEA/AACAPgAAAAAAAIA/AACAPgAAgD8AAIA+AACAPgAAAAAAAIA+AACAPgAAgD8AAAA/AACAPwAAAD8AAIA+AACAPgAAgD4AAAAAYD+WPgAAAD8AAAA+YM6VPgAAYjoAAEA/AAAAPgAAgD/0BDU/AABAPwAAAADzBDU/AACAPwAAAD8AAAAA4DuWPgAEYjoAAEA/AAAAPsILNT8ABGI6AACAPwAAAD4AAIA/GvaVPgAAgD8AAAAAAACAP/QENT8AAEA/AAAAAM8YNT8AAGI6AAAAAAAAAD4AAIA/ZD+WPgAAgD4AAAA+8wQ1PwAAAAAAAIA+AAAAAAAAgD8a9pU+AAAAAAAAAAAAAIA+AAAAPgAAAD8AAAA+AAAAPwAAAAAAAIA+AAAAAAAAAD8AAAA+AACAP4QNNT8AAEA/AAAAPs8YNT+z9H8/AABAPwAAAAAAAAAAGvaVPgAAAD8AAAAAGvaVPgAAAAAAAEA/AAAAPsQLNT+y9H8/AACAPwAAAD7jO5Y+s/R/PwAAgD8AAAAAAAAAAPQENT8AAEA/AAAAAAAAAAAa9pU+AAAAAAAAAD5gzpU+s/R/PwAAgD4AAAA+AAAAAIENNT8AAIA+AAAAABr2lT4AAIA/AAAAAAAAAAAAAAAA9AQ1PwAAgD4AAAA+AAAAPwAAAD4AAAA/AAAAAAAAgD4AAAAALhKWPk0LgD8AAAA/AACAPwCaBzpqLzU/AABAPwAAgD8Y9pU+AACAPwAAQD8AAGA/AAAAAPMENT8AAAA/AABgPwCeBzqq+DQ/AABAPwAAgD8AoAc6sBWWPgAAgD8AAIA/8wQ1PwAAgD8AAIA/AABgPxj2lT4AAIA/AABAPwAAYD8AnAc6lvuVPgAAAIAAAIA/MBKWPgDQtDkAAIA+AACAPwAAgD/zBDU/AACAPgAAYD/zBDU/AACAPwAAAIAAAGA/AACAPgAAgD8AAAA/AACAPwAAAD8AAGA/AACAPgAAYD8AAAA/AACAP+r2ND8A0LQ5AABAPwAAgD8a3n8/lPuVPgAAQD8AAGA/8wQ1PwAAAAAAAAA/AABgPwAAgD8a9pU+AABAPwAAgD8Z3n8/qhWWPgAAgD8AAIA/Gt5/P6j4ND8AAIA/AABgPxr2lT4AAAAAAABAPwAAYD/zBDU/AAAAAAAAAAAAAIA/Gt5/P2kvNT8AAIA+AACAP+j2ND9NC4A/AACAPgAAYD8AAAAAGvaVPgAAAAAAAGA/GvaVPgAAAAAAAIA+AACAPwAAAD8AAIA/AAAAPwAAYD8AAIA+AABgPwAAAD8AAEA/SeZuPyJiLj8AAEA/AABAP2xLLT8fNm8/AABAPwAAYD8AAAA/AABgPwAAQD8AAEA/LmKjPoDshT0AAIA/AABAP2zsLT9w7IU9AACAPwAAYD8AAEA/AABgPwAAAAAAAEA/oImjPlhobz8AAIA+AABAP6xohD2dMC4/AACAPgAAYD8AAAAAAABgPwAAgD4AAEA/AAAAPwAAQD8AAAA/AABgPwAAgD4AAGA/rGiEPZDqoz4AAAA/AABAP6CJoz6A7IU9AABAPwAAQD8AAEA/AABgPwAAAD8AAGA/buwtP1hobz8AAEA/AABAPzFioz5YaG8/AACAPwAAQD8AAIA/AABgPwAAQD8AAGA/6p4uP9BihD0AAAAAAABAP+pybz9wTqQ+AACAPgAAQD8AAIA+AABgPwAAAAAAAGA/AACAPgAAQD8AAAA/AABAPwAAAD8AAGA/AACAPgAAYD8AAAAAAACAvwAAAICBBDU/AAAAAIEENT8AAAAAAACAvwAAAICBBDU/AAAAAIEENT+BBDU/AAAAAIEENT+BBDU/AAAAAIEENT8AAAAAAACAvwAAAIAAAIA/AAAAAAAAAIAAAAAAAACAvwAAAIAAAIA/AAAAAAAAAIAAAIA/AAAAAAAAAIAAAIA/AAAAAAAAAIAAAAAAAACAvwAAAICBBDU/AAAAAIEENb8AAAAAAACAvwAAAICBBDU/AAAAAIEENb+BBDU/AAAAAIEENb+BBDU/AAAAAIEENb8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL+BBDW/AAAAAIEENb8AAAAAAACAvwAAAICBBDW/AAAAAIEENb8AAAAAAACAvwAAAICBBDW/AAAAAIEENb+BBDW/AAAAAIEENb8AAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAIC/AAAAAAAAAIAAAIC/AAAAAAAAAICBBDW/AAAAAIEENT8AAAAAAACAvwAAAICBBDW/AAAAAIEENT8AAAAAAACAvwAAAICBBDW/AAAAAIEENT+BBDW/AAAAAIEENT8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD+BBDU/AAAAAIEENT+BBDU/AAAAAIEENT+BBDU/AAAAAIEENT+BBDU/AAAAAIEENT8AAIA/AAAAAAAAAIAAAIA/AAAAAAAAAIAAAIA/AAAAAAAAAIAAAIA/AAAAAAAAAICBBDU/AAAAAIEENb+BBDU/AAAAAIEENb+BBDU/AAAAAIEENb+BBDU/AAAAAIEENb8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL+BBDW/AAAAAIEENb+BBDW/AAAAAIEENb+BBDW/AAAAAIEENb+BBDW/AAAAAIEENb8AAIC/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAIC/AAAAAAAAAICBBDW/AAAAAIEENT+BBDW/AAAAAIEENT+BBDW/AAAAAIEENT+BBDW/AAAAAIEENT8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAACAvwAAAICBBDU/AAAAAIEENT8AAAAAAACAvwAAAICBBDU/AAAAAIEENT8AAAAAAACAPwAAAICBBDU/AAAAAIEENT8AAAAAAACAPwAAAICBBDU/AAAAAIEENT8AAAAAAACAvwAAAIAAAIA/AAAAAAAAAIAAAAAAAACAvwAAAIAAAIA/AAAAAAAAAIAAAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAAAAAACAvwAAAICBBDU/AAAAAIEENb8AAAAAAACAvwAAAICBBDU/AAAAAIEENb8AAAAAAACAPwAAAICBBDU/AAAAAIEENb8AAAAAAACAPwAAAICBBDU/AAAAAIEENb8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL+BBDW/AAAAAIEENb8AAAAAAACAvwAAAICBBDW/AAAAAIEENb8AAAAAAACAvwAAAICBBDW/AAAAAIEENb8AAAAAAACAPwAAAICBBDW/AAAAAIEENb8AAAAAAACAPwAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAIC/AAAAAAAAAIAAAAAAAACAPwAAAIAAAIC/AAAAAAAAAIAAAAAAAACAPwAAAICBBDW/AAAAAIEENT8AAAAAAACAvwAAAICBBDW/AAAAAIEENT8AAAAAAACAvwAAAICBBDW/AAAAAIEENT8AAAAAAACAPwAAAICBBDW/AAAAAIEENT8AAAAAAACAPwAAAIAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAACAvwAAAICBBDU/AAAAAIEENT8AAAAAAACAvwAAAICBBDU/AAAAAIEENT8AAAAAAACAPwAAAICBBDU/AAAAAIEENT8AAAAAAACAPwAAAICBBDU/AAAAAIEENT8AAAAAAACAvwAAAIAAAIA/AAAAAAAAAIAAAAAAAACAvwAAAIAAAIA/AAAAAAAAAIAAAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAAAAAACAvwAAAICBBDU/AAAAAIEENb8AAAAAAACAvwAAAICBBDU/AAAAAIEENb8AAAAAAACAPwAAAICBBDU/AAAAAIEENb8AAAAAAACAPwAAAICBBDU/AAAAAIEENb8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL+BBDW/AAAAAIEENb8AAAAAAACAvwAAAICBBDW/AAAAAIEENb8AAAAAAACAvwAAAICBBDW/AAAAAIEENb8AAAAAAACAPwAAAICBBDW/AAAAAIEENb8AAAAAAACAPwAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAIC/AAAAAAAAAIAAAAAAAACAvwAAAIAAAIC/AAAAAAAAAIAAAAAAAACAPwAAAIAAAIC/AAAAAAAAAIAAAAAAAACAPwAAAICBBDW/AAAAAIEENT8AAAAAAACAvwAAAICBBDW/AAAAAIEENT8AAAAAAACAvwAAAICBBDW/AAAAAIEENT8AAAAAAACAPwAAAICBBDW/AAAAAIEENT8AAAAAAACAPwAAAIAAAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD+BBDU/AAAAAIEENT8AAAAAAACAPwAAAICBBDU/AAAAAIEENT8AAAAAAACAPwAAAICBBDU/AAAAAIEENT+BBDU/AAAAAIEENT8AAIA/AAAAAAAAAIAAAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAAAAAACAPwAAAIAAAIA/AAAAAAAAAIAAAIA/AAAAAAAAAICBBDU/AAAAAIEENb8AAAAAAACAPwAAAICBBDU/AAAAAIEENb8AAAAAAACAPwAAAICBBDU/AAAAAIEENb+BBDU/AAAAAIEENb8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAAAAAAAAgL8AAAAAAACAPwAAAICBBDW/AAAAAIEENb8AAAAAAACAPwAAAICBBDW/AAAAAIEENb+BBDW/AAAAAIEENb+BBDW/AAAAAIEENb8AAAAAAACAPwAAAIAAAIC/AAAAAAAAAIAAAAAAAACAPwAAAIAAAIC/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAIC/AAAAAAAAAIAAAAAAAACAPwAAAICBBDW/AAAAAIEENT8AAAAAAACAPwAAAICBBDW/AAAAAIEENT+BBDW/AAAAAIEENT+BBDW/AAAAAIEENT8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8HAAkACgAHAAoACwANAA8AEAANABAAEQASABMAFAASABQAFQAWABgAGgAWABoAGwAcAB4AIAAcACAAIQAiACQAJgAiACYAJwABAAMABAABAAQABQAoACkAKgAoACoAKwAAACUAIwAAACMAAgAMABkAFwAMABcADgAGAB8AHQAGAB0ACAAwADEAMgAwADIAMwA0ADUANgA0ADYANwA4ADkAOgA4ADoAOwA8AD0APgA8AD4APwBAAEEAQgBAAEIAQwBEAEUARgBEAEYARwAsAC0ALgAsAC4ALwBIAEkASgBIAEoASwBVAFcAWQBVAFkAWwBdAF8AYQBdAGEAYwBkAGUAZgBkAGYAZwBoAGoAbABoAGwAbgBwAHIAdABwAHQAdgB4AHoAfAB4AHwAfgBNAE8AUQBNAFEAUwCAAIEAggCAAIIAgwBcAGsAaQBcAGkAXgBUAHMAcQBUAHEAVgBMAHsAeQBMAHkATgBQAH8AfQBQAH0AUgBYAHcAdQBYAHUAWgBgAG8AbQBgAG0AYgCNAI8AkQCNAJEAkwCVAJcAmQCVAJkAmwCcAJ0AngCcAJ4AnwCgAKIApACgAKQApgCoAKoArACoAKwArgCwALIAtACwALQAtgCFAIcAiQCFAIkAiwC4ALkAugC4ALoAuwCUAKMAoQCUAKEAlgCMAKsAqQCMAKkAjgCEALMAsQCEALEAhgCIALcAtQCIALUAigCQAK8ArQCQAK0AkgCYAKcApQCYAKUAmgDCAMYAxADCAMcAxgDIAMwAygDIAM0AzADOANAAzwDOANEA0ADTANYA1QDTANcA1gDZANwA2wDZAN0A3ADfAOIA4QDfAOMA4gC8AMAAvgC8AMEAwADkAOYA5QDkAOcA5gC9AN4A4AC9AL8A3gDJANIA1ADJAMsA0gDDANgA2gDDAMUA2AA="
-		}
-	]
-}
diff --git a/src/main/resources/assets/architecture_extensions/models/block/peculiar/debuggy_block.json b/src/main/resources/assets/architecture_extensions/models/block/peculiar/debuggy_block.json
deleted file mode 100644
index e5ebf6c..0000000
--- a/src/main/resources/assets/architecture_extensions/models/block/peculiar/debuggy_block.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-	"parent": "minecraft:block/cube_all",
-	"textures": {
-		"all": "minecraft:block/debug"
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/models/block/peculiar/end_rod_nubless.json b/src/main/resources/assets/architecture_extensions/models/block/peculiar/end_rod_nubless.json
deleted file mode 100644
index d5b6116..0000000
--- a/src/main/resources/assets/architecture_extensions/models/block/peculiar/end_rod_nubless.json
+++ /dev/null
@@ -1,52 +0,0 @@
-{
-	"credit": "Made with Blockbench",
-	"textures": {
-		"texture": "architecture_extensions:block/end_rod_nubless",
-		"particle": "#texture"
-	},
-	"elements": [
-		{
-			"from": [7, 0, 7],
-			"to": [9, 16, 9],
-			"faces": {
-				"north": {"uv": [7, 0, 9, 16], "texture": "#texture"},
-				"east": {"uv": [7, 0, 9, 16], "texture": "#texture"},
-				"south": {"uv": [7, 0, 9, 16], "texture": "#texture"},
-				"west": {"uv": [7, 0, 9, 16], "texture": "#texture"},
-				"up": {"uv": [7, 7, 9, 9], "texture": "#texture", "cullface": "up"},
-				"down": {"uv": [7, 7, 9, 9], "texture": "#texture", "cullface": "down"}
-			}
-		}
-	],
-	"display": {
-		"thirdperson_righthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"thirdperson_lefthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"firstperson_righthand": {
-			"rotation": [0, 45, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"firstperson_lefthand": {
-			"rotation": [0, 225, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"ground": {
-			"translation": [0, 3, 0],
-			"scale": [0.25, 0.25, 0.25]
-		},
-		"gui": {
-			"rotation": [30, 225, 0],
-			"scale": [0.625, 0.625, 0.625]
-		},
-		"fixed": {
-			"scale": [0.5, 0.5, 0.5]
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/models/block/peculiar/fake_end_portal_block.json b/src/main/resources/assets/architecture_extensions/models/block/peculiar/fake_end_portal_block.json
deleted file mode 100644
index 8da8838..0000000
--- a/src/main/resources/assets/architecture_extensions/models/block/peculiar/fake_end_portal_block.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-	"parent": "minecraft:block/cube_all",
-	"textures": {
-		"all": "minecraft:entity/end_portal"
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/models/block/round_arch.gltf b/src/main/resources/assets/architecture_extensions/models/block/round_arch.gltf
deleted file mode 100644
index d382a6d..0000000
--- a/src/main/resources/assets/architecture_extensions/models/block/round_arch.gltf
+++ /dev/null
@@ -1,143 +0,0 @@
-{
-	"asset":{
-		"generator":"Khronos glTF Blender I/O v3.5.30",
-		"version":"2.0"
-	},
-	"scene":0,
-	"scenes":[
-		{
-			"name":"Scene",
-			"nodes":[
-				0
-			]
-		}
-	],
-	"nodes":[
-		{
-			"mesh":0,
-			"name":"Cylinder.002"
-		}
-	],
-	"materials":[
-		{
-			"doubleSided":true,
-			"name":"Material",
-			"pbrMetallicRoughness":{
-				"baseColorTexture":{
-					"index":0
-				},
-				"metallicFactor":0,
-				"roughnessFactor":0.4000000059604645
-			}
-		}
-	],
-	"meshes":[
-		{
-			"name":"Cylinder.004",
-			"primitives":[
-				{
-					"attributes":{
-						"POSITION":0,
-						"TEXCOORD_0":1,
-						"NORMAL":2
-					},
-					"indices":3,
-					"material":0
-				}
-			]
-		}
-	],
-	"textures":[
-		{
-			"sampler":0,
-			"source":0
-		}
-	],
-	"images":[
-		{
-			"bufferView":4,
-			"mimeType":"image/png",
-			"name":"round_arch",
-			"uri": "#all"
-		}
-	],
-	"accessors":[
-		{
-			"bufferView":0,
-			"componentType":5126,
-			"count":48,
-			"max":[
-				0.5000001192092896,
-				0.5000000596046448,
-				0.5000000596046448
-			],
-			"min":[
-				-0.5000000596046448,
-				-0.5,
-				-0.5000000596046448
-			],
-			"type":"VEC3"
-		},
-		{
-			"bufferView":1,
-			"componentType":5126,
-			"count":48,
-			"type":"VEC2"
-		},
-		{
-			"bufferView":2,
-			"componentType":5126,
-			"count":48,
-			"type":"VEC3"
-		},
-		{
-			"bufferView":3,
-			"componentType":5123,
-			"count":84,
-			"type":"SCALAR"
-		}
-	],
-	"bufferViews":[
-		{
-			"buffer":0,
-			"byteLength":576,
-			"byteOffset":0,
-			"target":34962
-		},
-		{
-			"buffer":0,
-			"byteLength":384,
-			"byteOffset":576,
-			"target":34962
-		},
-		{
-			"buffer":0,
-			"byteLength":576,
-			"byteOffset":960,
-			"target":34962
-		},
-		{
-			"buffer":0,
-			"byteLength":168,
-			"byteOffset":1536,
-			"target":34963
-		},
-		{
-			"buffer":0,
-			"byteLength":242,
-			"byteOffset":1704
-		}
-	],
-	"samplers":[
-		{
-			"magFilter":9728,
-			"minFilter":9984
-		}
-	],
-	"buffers":[
-		{
-			"byteLength":1948,
-			"uri":"data:application/octet-stream;base64,/f//vgAAAL////8+/v//vtSN7r4m+HY+/v//vtSN7r4m+HY+/v//vtSN7r4m+HY+////vq5nu77izcwz////vq5nu77izcwz////vq5nu77izcwzAAAAv9ATVL7EE1S+AAAAv9ATVL7EE1S+AAAAv9ATVL7EE1S+AQAAvwAAgDOuZ7u+AQAAvwAAgDOuZ7u+AQAAvwAAgDOuZ7u+AQAAvyb4dj7Uje6+AQAAvyb4dj7Uje6+AQAAvyb4dj7Uje6+AAAAPwAAAL8BAAC/AAAAPwAAAL8BAAC/AAAAPwAAAL8BAAC/AQAAvwAAAL/+//++AQAAvwAAAL/+//++AQAAvwAAAL/+//++/v//PgAAAD8BAAC/AQAAv////z7+//++AgAAPwAAAL/+//8+AgAAPwAAAL/+//8+/f//vgAAAL8BAAA//f//vgAAAL8BAAA/AQAAvwAAAD/+//++AQAAvwAAAD/+//++AgAAPwAAAL/7//8+AQAAP9SN7r4e+HY+AQAAP9SN7r4e+HY+AQAAP9SN7r4e+HY+AQAAP65nu77GmxmzAQAAP65nu77GmxmzAQAAP65nu77GmxmzAQAAP9ATVL7ME1S+AQAAP9ATVL7ME1S+AQAAP9ATVL7ME1S+/v//PgAAADSyZ7u+/v//PgAAADSyZ7u+/v//PgAAADSyZ7u+/v//Pir4dj7Yje6+/v//Pir4dj7Yje6+/v//Pir4dj7Yje6+/v//PgEAAD8BAAC//v//PgEAAD8BAAC/ANrUOwAAgD8A2tQ7TJxVPwDa1DtMnFU/CL49P+pGdz8A2tQ7ljgrPwDa1DuWOCs/AAAAP9ezXT8A2tQ72tQAPwDa1Dva1AA/HPaVPvQENT8A2tQ7TOKsPgDa1DtM4qw+oDAJPvz//z4A2tQ7xDUwPgDa1DvENTA+UJELPeyDhD4AAAA0AJiaOQAAADRMVn4///9/PwAAgD8AAAAAAACAPwAAgD8AmJo5AACAP0xWfj8AAAA0AAAAAAAAgD8AAAAAAAAAAAAAgD8AAAA0AACAPwAAgD8AAIA/AACAPwAAgD8AAAAAAAAAAADa1DsA2tQ7AACAPwAAgD/ug4Q+6kZ3PwAAgD9MnFU/AACAP0ycVT/+//8+17NdPwAAgD+OOCs/AACAP444Kz/xBDU/9AQ1PwAAgD/a1AA/AACAP9rUAD/Xs10//P//PgAAgD9M4qw+AACAP0zirD7qRnc/7IOEPgAAgD/ENTA+AACAP8Q1MD7//38/AAAAAAAAgD8A2tQ7AAAAAGTMfT/LoQU+AAAAALaEbD9B8cM+AAAAAGTMfT/LoQU+AACAvwAAAAAAAAAAAAAAAEMcSz9R2hs/AAAAALaEbD9B8cM+AACAvwAAAAAAAACAAAAAAFHaGz9DHEs/AAAAAEMcSz9R2hs/AACAvwAAAIAAAAAAAAAAAEHxwz62hGw/AAAAAFHaGz9DHEs/AACAvwAAAAAAAACAAAAAAMuhBT5kzH0/AAAAAEHxwz62hGw/AACAvwAAAAAAAACAAAAAAAAAgL8AAACAAAAAgAAAAIAAAIC/AACAPwAAAAAAAACAAACAvwAAAIAAAAAAAAAAAAAAgL8AAACAAAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AAAAgAAAAIAAAIC/AACAPwAAAAAAAACAAAAAAAAAgL8AAACAAACAvwAAAAAAAAAAAAAAAAAAgL8AAACAAACAvwAAAAAAAACAAAAAAMuhBT5kzH0/AAAAAGTMfT/LoQU+AACAPwAAAIAAAACAAAAAALaEbD9B8cM+AAAAAGTMfT/LoQU+AACAPwAAAIAAAACAAAAAAEMcSz9R2hs/AAAAALaEbD9B8cM+AACAPwAAAAAAAACAAAAAAFHaGz9DHEs/AAAAAEMcSz9R2hs/AACAPwAAAAAAAACAAAAAAEHxwz62hGw/AAAAAFHaGz9DHEs/AACAPwAAAAAAAACAAAAAAMuhBT5kzH0/AAAAAEHxwz62hGw/AACAPwAAAAAAAACAAAAAAMuhBT5kzH0/BwAmACoABwAqAAsAIAAkAAUAIAAFAAEADQAsAC8ADQAvAB0AIwAnAAgAIwAIAAQAHgAhAAIAHgACAAAAEQAVABcAEQAXABYAGQAbABQAGQAUABAAHwASACIAIgASACUAHwAYABIAEgArACgAEgAuACsAJQASACgADwAcABMAAwATABoABgATAAMAEwAMAA8ADAATAAkACQATAAYACgApAC0ACgAtAA4AiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAuUlEQVQ4y51SQQqEMBCbb67X3oS9ireeF1+w4F8rETLEUO2yh1AnzsSxSWyfre3f/Wegn5heUwuQtdaT4OkA77gI6HCvWYXXZU3usgFf6FeV0xonkAIo5vecL3wb5dmbG3AtkjrggtqXG4D4F6dAKaUBKACvleshnvzG8CgngX+58x0CbrP3hQ74zVOANS9S+8K9V6sooBZ6uMITp828g14+yAUfGCRapAK9QLGOkc+jLMSdv5qDpywcWbpt2r8russAAAAASUVORK5CYIIAAA=="
-		}
-	]
-}
diff --git a/src/main/resources/assets/architecture_extensions/models/block/round_fence_post.gltf b/src/main/resources/assets/architecture_extensions/models/block/round_fence_post.gltf
deleted file mode 100644
index c13d844..0000000
--- a/src/main/resources/assets/architecture_extensions/models/block/round_fence_post.gltf
+++ /dev/null
@@ -1,148 +0,0 @@
-{
-	"asset":{
-		"generator":"Khronos glTF Blender I/O v3.5.30",
-		"version":"2.0"
-	},
-	"scene":0,
-	"scenes":[
-		{
-			"name":"Scene",
-			"nodes":[
-				1
-			]
-		}
-	],
-	"nodes":[
-		{
-			"mesh":0,
-			"name":"cylinder"
-		},
-		{
-			"children":[
-				0
-			],
-			"name":"Node_1"
-		}
-	],
-	"materials":[
-		{
-			"doubleSided":true,
-			"name":"Material",
-			"pbrMetallicRoughness":{
-				"baseColorTexture":{
-					"index":0
-				},
-				"metallicFactor":0,
-				"roughnessFactor":0.5
-			}
-		}
-	],
-	"meshes":[
-		{
-			"name":"Mesh_0",
-			"primitives":[
-				{
-					"attributes":{
-						"POSITION":0,
-						"TEXCOORD_0":1,
-						"NORMAL":2
-					},
-					"indices":3,
-					"material":0
-				}
-			]
-		}
-	],
-	"textures":[
-		{
-			"sampler":0,
-			"source":0
-		}
-	],
-	"images":[
-		{
-			"bufferView":4,
-			"mimeType":"image/png",
-			"name":"stone_bricks"
-		}
-	],
-	"accessors":[
-		{
-			"bufferView":0,
-			"componentType":5126,
-			"count":56,
-			"max":[
-				0.1875,
-				0.5,
-				0.1875
-			],
-			"min":[
-				-0.1875,
-				-0.5,
-				-0.1875
-			],
-			"type":"VEC3"
-		},
-		{
-			"bufferView":1,
-			"componentType":5126,
-			"count":56,
-			"type":"VEC2"
-		},
-		{
-			"bufferView":2,
-			"componentType":5126,
-			"count":56,
-			"type":"VEC3"
-		},
-		{
-			"bufferView":3,
-			"componentType":5123,
-			"count":84,
-			"type":"SCALAR"
-		}
-	],
-	"bufferViews":[
-		{
-			"buffer":0,
-			"byteLength":672,
-			"byteOffset":0,
-			"target":34962
-		},
-		{
-			"buffer":0,
-			"byteLength":448,
-			"byteOffset":672,
-			"target":34962
-		},
-		{
-			"buffer":0,
-			"byteLength":672,
-			"byteOffset":1120,
-			"target":34962
-		},
-		{
-			"buffer":0,
-			"byteLength":168,
-			"byteOffset":1792,
-			"target":34963
-		},
-		{
-			"buffer":0,
-			"byteLength":242,
-			"byteOffset":1960
-		}
-	],
-	"samplers":[
-		{
-			"magFilter":9728,
-			"minFilter":9984
-		}
-	],
-	"buffers":[
-		{
-			"byteLength":2204,
-			"uri":"data:application/octet-stream;base64,2g6fPQAAAL8AAEA+2g6fPQAAAL8AAEA+AABAPgAAAL/aDp89AABAPgAAAL/aDp89AABAPgAAAD/aDp89AABAPgAAAD/aDp892g6fPQAAAD8AAEA+2g6fPQAAAD8AAEA+AABAPgAAAL/aDp89AABAPgAAAL/aDp+9AABAPgAAAD/aDp+9AABAPgAAAD/aDp89AABAPgAAAL/aDp+9AABAPgAAAL/aDp+92g6fPQAAAL8AAEC+2g6fPQAAAL8AAEC+2g6fPQAAAD8AAEC+2g6fPQAAAD8AAEC+AABAPgAAAD/aDp+9AABAPgAAAD/aDp+92g6fPQAAAL8AAEC+2g6fPQAAAL8AAEC+2g6fvQAAAL8AAEC+2g6fvQAAAL8AAEC+2g6fvQAAAD8AAEC+2g6fvQAAAD8AAEC+2g6fPQAAAD8AAEC+2g6fPQAAAD8AAEC+2g6fvQAAAL8AAEC+2g6fvQAAAL8AAEC+AABAvgAAAL/aDp+9AABAvgAAAL/aDp+9AABAvgAAAD/aDp+9AABAvgAAAD/aDp+92g6fvQAAAD8AAEC+2g6fvQAAAD8AAEC+AABAvgAAAL/aDp+9AABAvgAAAL/aDp89AABAvgAAAD/aDp89AABAvgAAAD/aDp+9AABAvgAAAL/aDp89AABAvgAAAL/aDp892g6fvQAAAL8AAEA+2g6fvQAAAL8AAEA+2g6fvQAAAD8AAEA+2g6fvQAAAD8AAEA+AABAvgAAAD/aDp89AABAvgAAAD/aDp892g6fvQAAAL8AAEA+2g6fvQAAAL8AAEA+2g6fPQAAAL8AAEA+2g6fPQAAAL8AAEA+2g6fPQAAAD8AAEA+2g6fPQAAAD8AAEA+2g6fvQAAAD8AAEA+2g6fvQAAAD8AAEA+AAAAPwAAgD9aOBU/svQ/PwAAID8AAIA/Qa86P8t9Gj8AACA/AAAAAGGYOj/LfRo/AAAAPwAAAAB7IRU/svQ/PwAAID8AAIA/AABAPwAAgD8AAEA/AAAAAAAAID8AAAAAQa86P2oEyz4AAEA/AACAP1o4FT+cFoA+AABgPwAAgD97IRU/nBaAPgAAYD8AAAAAYZg6P2wEyz4AAEA/AAAAAHFHwD6cFoA+AABgPwAAgD9OHxU/mhaAPgAAgD8AAIA/mxbAPpwWgD4AAIA/AAAAAOQGFT+aFoA+AABgPwAAAAAAAAAAAACAP6QiwD6cFoA+AAAAPgAAgD+saWo+bATLPgAAAD4AAAAABQlpPmwEyz4AAAAAAAAAAE5yvz6cFoA+AAAAPgAAgD8AAIA+AACAPwAAgD4AAAAAAAAAPgAAAACsaWo+y30aPwAAgD4AAIA/AADAPgAAgD+oIsA+svQ/P05yvz6y9D8/AADAPgAAAAD7CGk+y30aPwAAgD4AAAAAAADAPgAAgD9QHxU/svQ/P3NHwD6y9D8/AAAAPwAAgD8AAAA/AAAAAOUGFT+y9D8/AADAPgAAAACdFsA+svQ/P4EENT8AAAAAgQQ1PwAAAIAAAIC/AAAAgIEENT8AAAAAgQQ1PwAAAIAAAIC/AAAAgIEENT8AAAAAgQQ1PwAAAIAAAIA/AAAAgIEENT8AAAAAgQQ1PwAAAIAAAIA/AAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAgD8AAAAAAAAAgAAAAIAAAIC/AAAAgIEENT8AAAAAgQQ1vwAAAIAAAIC/AAAAgIEENT8AAAAAgQQ1vwAAAIAAAIA/AAAAgIEENT8AAAAAgQQ1vwAAAIAAAIA/AAAAgIEENT8AAAAAgQQ1vwAAAAAAAIC/AAAAgAAAAAAAAAAAAACAvwAAAAAAAIC/AAAAgAAAAAAAAAAAAACAvwAAAAAAAIA/AAAAgAAAAAAAAAAAAACAvwAAAAAAAIA/AAAAgAAAAAAAAAAAAACAv4EENb8AAAAAgQQ1vwAAAAAAAIC/AAAAgIEENb8AAAAAgQQ1vwAAAAAAAIC/AAAAgIEENb8AAAAAgQQ1vwAAAAAAAIA/AAAAgIEENb8AAAAAgQQ1vwAAAAAAAIA/AAAAgAAAgL8AAAAAAAAAgAAAgL8AAAAAAAAAgAAAgL8AAAAAAAAAgAAAgL8AAAAAAAAAgAAAAAAAAIC/AAAAgIEENb8AAAAAgQQ1P4EENb8AAAAAgQQ1PwAAAAAAAIC/AAAAgAAAAAAAAIA/AAAAgIEENb8AAAAAgQQ1PwAAAAAAAIA/AAAAgIEENb8AAAAAgQQ1PwAAAAAAAAAAAACAPwAAAAAAAIC/AAAAgAAAAAAAAIC/AAAAgAAAAAAAAAAAAACAPwAAAAAAAAAAAACAPwAAAAAAAIA/AAAAgAAAAAAAAAAAAACAPwAAAAAAAIA/AAAAgAgACQAKAAgACgALAA0ADwARAA0AEQATABUAFwAZABUAGQAbABwAHgAgABwAIAAiAAEADgAMAAEADAADACQAJQAmACQAJgAnABQAMgAxABQAMQAWACkAKgAtACkALQAvACgAHwAdACgAHQArAAAAAgAEAAAABAAGADAAMwA0ADAANAA2ABAABwAFABAABQASACwAIwAhACwAIQAuADUAGgAYADUAGAA3AIlQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgGAAAAH/P/YQAAALlJREFUOMudUkEKhDAQm2+u196EvYq3nhdfsOBfKxEyxFDtsodQJ87EsUlsn63t3/1noJ+YXlMLkLXWk+DpAO+4COhwr1mF12VN7rIBX+hXldMaJ5ACKOb3nC98G+XZmxtwLZI64ILalxuA+BenQCmlASgAr5XrIZ78xvAoJ4F/ufMdAm6z94UO+M1TgDUvUvvCvVerKKAWerjCE6fNvINePsgFHxgkWqQCvUCxjpHPoyzEnb+ag6csHFm6bdq/K7rLAAAAAElFTkSuQmCCAAA="
-		}
-	]
-}
diff --git a/src/main/resources/assets/architecture_extensions/models/item/debuggy_block.json b/src/main/resources/assets/architecture_extensions/models/item/debuggy_block.json
deleted file mode 100644
index 1745463..0000000
--- a/src/main/resources/assets/architecture_extensions/models/item/debuggy_block.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-	"parent": "architecture_extensions:block/peculiar/debuggy_block"
-}
diff --git a/src/main/resources/assets/architecture_extensions/models/item/end_rod_nubless.json b/src/main/resources/assets/architecture_extensions/models/item/end_rod_nubless.json
deleted file mode 100644
index 71c7ed1..0000000
--- a/src/main/resources/assets/architecture_extensions/models/item/end_rod_nubless.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-	"parent": "architecture_extensions:block/peculiar/end_rod_nubless"
-}
diff --git a/src/main/resources/assets/architecture_extensions/models/item/fake_end_portal_block.json b/src/main/resources/assets/architecture_extensions/models/item/fake_end_portal_block.json
deleted file mode 100644
index 0203021..0000000
--- a/src/main/resources/assets/architecture_extensions/models/item/fake_end_portal_block.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-	"parent": "architecture_extensions:block/peculiar/fake_end_portal_block"
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_arch.json b/src/main/resources/assets/architecture_extensions/templates/blockstate/template_arch.json
deleted file mode 100644
index bf9f93b..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_arch.json
+++ /dev/null
@@ -1,209 +0,0 @@
-{
-	"variants": {
-		"facing=east,half=bottom,shape=inner_left": {
-			"model": "{model}_inner",
-			"y": 270,
-			"uvlock": true
-		},
-		"facing=east,half=bottom,shape=inner_right": {
-			"model": "{model}_inner"
-		},
-		"facing=east,half=bottom,shape=outer_left": {
-			"model": "{model}_outer",
-			"y": 270,
-			"uvlock": true
-		},
-		"facing=east,half=bottom,shape=outer_right": {
-			"model": "{model}_outer"
-		},
-		"facing=east,half=bottom,shape=straight": {
-			"model": "{model}"
-		},
-		"facing=east,half=top,shape=inner_left": {
-			"model": "{model}_inner",
-			"x": 180,
-			"uvlock": true
-		},
-		"facing=east,half=top,shape=inner_right": {
-			"model": "{model}_inner",
-			"x": 180,
-			"y": 90,
-			"uvlock": true
-		},
-		"facing=east,half=top,shape=outer_left": {
-			"model": "{model}_outer",
-			"x": 180,
-			"uvlock": true
-		},
-		"facing=east,half=top,shape=outer_right": {
-			"model": "{model}_outer",
-			"x": 180,
-			"y": 90,
-			"uvlock": true
-		},
-		"facing=east,half=top,shape=straight": {
-			"model": "{model}",
-			"x": 180,
-			"uvlock": true
-		},
-		"facing=north,half=bottom,shape=inner_left": {
-			"model": "{model}_inner",
-			"y": 180,
-			"uvlock": true
-		},
-		"facing=north,half=bottom,shape=inner_right": {
-			"model": "{model}_inner",
-			"y": 270,
-			"uvlock": true
-		},
-		"facing=north,half=bottom,shape=outer_left": {
-			"model": "{model}_outer",
-			"y": 180,
-			"uvlock": true
-		},
-		"facing=north,half=bottom,shape=outer_right": {
-			"model": "{model}_outer",
-			"y": 270,
-			"uvlock": true
-		},
-		"facing=north,half=bottom,shape=straight": {
-			"model": "{model}",
-			"y": 270,
-			"uvlock": true
-		},
-		"facing=north,half=top,shape=inner_left": {
-			"model": "{model}_inner",
-			"x": 180,
-			"y": 270,
-			"uvlock": true
-		},
-		"facing=north,half=top,shape=inner_right": {
-			"model": "{model}_inner",
-			"x": 180,
-			"uvlock": true
-		},
-		"facing=north,half=top,shape=outer_left": {
-			"model": "{model}_outer",
-			"x": 180,
-			"y": 270,
-			"uvlock": true
-		},
-		"facing=north,half=top,shape=outer_right": {
-			"model": "{model}_outer",
-			"x": 180,
-			"uvlock": true
-		},
-		"facing=north,half=top,shape=straight": {
-			"model": "{model}",
-			"x": 180,
-			"y": 270,
-			"uvlock": true
-		},
-		"facing=south,half=bottom,shape=inner_left": {
-			"model": "{model}_inner"
-		},
-		"facing=south,half=bottom,shape=inner_right": {
-			"model": "{model}_inner",
-			"y": 90,
-			"uvlock": true
-		},
-		"facing=south,half=bottom,shape=outer_left": {
-			"model": "{model}_outer"
-		},
-		"facing=south,half=bottom,shape=outer_right": {
-			"model": "{model}_outer",
-			"y": 90,
-			"uvlock": true
-		},
-		"facing=south,half=bottom,shape=straight": {
-			"model": "{model}",
-			"y": 90,
-			"uvlock": true
-		},
-		"facing=south,half=top,shape=inner_left": {
-			"model": "{model}_inner",
-			"x": 180,
-			"y": 90,
-			"uvlock": true
-		},
-		"facing=south,half=top,shape=inner_right": {
-			"model": "{model}_inner",
-			"x": 180,
-			"y": 180,
-			"uvlock": true
-		},
-		"facing=south,half=top,shape=outer_left": {
-			"model": "{model}_outer",
-			"x": 180,
-			"y": 90,
-			"uvlock": true
-		},
-		"facing=south,half=top,shape=outer_right": {
-			"model": "{model}_outer",
-			"x": 180,
-			"y": 180,
-			"uvlock": true
-		},
-		"facing=south,half=top,shape=straight": {
-			"model": "{model}",
-			"x": 180,
-			"y": 90,
-			"uvlock": true
-		},
-		"facing=west,half=bottom,shape=inner_left": {
-			"model": "{model}_inner",
-			"y": 90,
-			"uvlock": true
-		},
-		"facing=west,half=bottom,shape=inner_right": {
-			"model": "{model}_inner",
-			"y": 180,
-			"uvlock": true
-		},
-		"facing=west,half=bottom,shape=outer_left": {
-			"model": "{model}_outer",
-			"y": 90,
-			"uvlock": true
-		},
-		"facing=west,half=bottom,shape=outer_right": {
-			"model": "{model}_outer",
-			"y": 180,
-			"uvlock": true
-		},
-		"facing=west,half=bottom,shape=straight": {
-			"model": "{model}",
-			"y": 180,
-			"uvlock": true
-		},
-		"facing=west,half=top,shape=inner_left": {
-			"model": "{model}_inner",
-			"x": 180,
-			"y": 180,
-			"uvlock": true
-		},
-		"facing=west,half=top,shape=inner_right": {
-			"model": "{model}_inner",
-			"x": 180,
-			"y": 270,
-			"uvlock": true
-		},
-		"facing=west,half=top,shape=outer_left": {
-			"model": "{model}_outer",
-			"x": 180,
-			"y": 180,
-			"uvlock": true
-		},
-		"facing=west,half=top,shape=outer_right": {
-			"model": "{model}_outer",
-			"x": 180,
-			"y": 270,
-			"uvlock": true
-		},
-		"facing=west,half=top,shape=straight": {
-			"model": "{model}",
-			"x": 180,
-			"y": 180,
-			"uvlock": true
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_beam.json b/src/main/resources/assets/architecture_extensions/templates/blockstate/template_beam.json
deleted file mode 100644
index 3545cb8..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_beam.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-	"variants": {
-		"axis=x": {
-			"model": "{model}",
-			"x": 90,
-			"y": 90
-		},
-		"axis=y": {
-			"model": "{model}"
-		},
-		"axis=z": {
-			"model": "{model}",
-			"x": 90
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_crown_molding.json b/src/main/resources/assets/architecture_extensions/templates/blockstate/template_crown_molding.json
deleted file mode 100644
index bf9f93b..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_crown_molding.json
+++ /dev/null
@@ -1,209 +0,0 @@
-{
-	"variants": {
-		"facing=east,half=bottom,shape=inner_left": {
-			"model": "{model}_inner",
-			"y": 270,
-			"uvlock": true
-		},
-		"facing=east,half=bottom,shape=inner_right": {
-			"model": "{model}_inner"
-		},
-		"facing=east,half=bottom,shape=outer_left": {
-			"model": "{model}_outer",
-			"y": 270,
-			"uvlock": true
-		},
-		"facing=east,half=bottom,shape=outer_right": {
-			"model": "{model}_outer"
-		},
-		"facing=east,half=bottom,shape=straight": {
-			"model": "{model}"
-		},
-		"facing=east,half=top,shape=inner_left": {
-			"model": "{model}_inner",
-			"x": 180,
-			"uvlock": true
-		},
-		"facing=east,half=top,shape=inner_right": {
-			"model": "{model}_inner",
-			"x": 180,
-			"y": 90,
-			"uvlock": true
-		},
-		"facing=east,half=top,shape=outer_left": {
-			"model": "{model}_outer",
-			"x": 180,
-			"uvlock": true
-		},
-		"facing=east,half=top,shape=outer_right": {
-			"model": "{model}_outer",
-			"x": 180,
-			"y": 90,
-			"uvlock": true
-		},
-		"facing=east,half=top,shape=straight": {
-			"model": "{model}",
-			"x": 180,
-			"uvlock": true
-		},
-		"facing=north,half=bottom,shape=inner_left": {
-			"model": "{model}_inner",
-			"y": 180,
-			"uvlock": true
-		},
-		"facing=north,half=bottom,shape=inner_right": {
-			"model": "{model}_inner",
-			"y": 270,
-			"uvlock": true
-		},
-		"facing=north,half=bottom,shape=outer_left": {
-			"model": "{model}_outer",
-			"y": 180,
-			"uvlock": true
-		},
-		"facing=north,half=bottom,shape=outer_right": {
-			"model": "{model}_outer",
-			"y": 270,
-			"uvlock": true
-		},
-		"facing=north,half=bottom,shape=straight": {
-			"model": "{model}",
-			"y": 270,
-			"uvlock": true
-		},
-		"facing=north,half=top,shape=inner_left": {
-			"model": "{model}_inner",
-			"x": 180,
-			"y": 270,
-			"uvlock": true
-		},
-		"facing=north,half=top,shape=inner_right": {
-			"model": "{model}_inner",
-			"x": 180,
-			"uvlock": true
-		},
-		"facing=north,half=top,shape=outer_left": {
-			"model": "{model}_outer",
-			"x": 180,
-			"y": 270,
-			"uvlock": true
-		},
-		"facing=north,half=top,shape=outer_right": {
-			"model": "{model}_outer",
-			"x": 180,
-			"uvlock": true
-		},
-		"facing=north,half=top,shape=straight": {
-			"model": "{model}",
-			"x": 180,
-			"y": 270,
-			"uvlock": true
-		},
-		"facing=south,half=bottom,shape=inner_left": {
-			"model": "{model}_inner"
-		},
-		"facing=south,half=bottom,shape=inner_right": {
-			"model": "{model}_inner",
-			"y": 90,
-			"uvlock": true
-		},
-		"facing=south,half=bottom,shape=outer_left": {
-			"model": "{model}_outer"
-		},
-		"facing=south,half=bottom,shape=outer_right": {
-			"model": "{model}_outer",
-			"y": 90,
-			"uvlock": true
-		},
-		"facing=south,half=bottom,shape=straight": {
-			"model": "{model}",
-			"y": 90,
-			"uvlock": true
-		},
-		"facing=south,half=top,shape=inner_left": {
-			"model": "{model}_inner",
-			"x": 180,
-			"y": 90,
-			"uvlock": true
-		},
-		"facing=south,half=top,shape=inner_right": {
-			"model": "{model}_inner",
-			"x": 180,
-			"y": 180,
-			"uvlock": true
-		},
-		"facing=south,half=top,shape=outer_left": {
-			"model": "{model}_outer",
-			"x": 180,
-			"y": 90,
-			"uvlock": true
-		},
-		"facing=south,half=top,shape=outer_right": {
-			"model": "{model}_outer",
-			"x": 180,
-			"y": 180,
-			"uvlock": true
-		},
-		"facing=south,half=top,shape=straight": {
-			"model": "{model}",
-			"x": 180,
-			"y": 90,
-			"uvlock": true
-		},
-		"facing=west,half=bottom,shape=inner_left": {
-			"model": "{model}_inner",
-			"y": 90,
-			"uvlock": true
-		},
-		"facing=west,half=bottom,shape=inner_right": {
-			"model": "{model}_inner",
-			"y": 180,
-			"uvlock": true
-		},
-		"facing=west,half=bottom,shape=outer_left": {
-			"model": "{model}_outer",
-			"y": 90,
-			"uvlock": true
-		},
-		"facing=west,half=bottom,shape=outer_right": {
-			"model": "{model}_outer",
-			"y": 180,
-			"uvlock": true
-		},
-		"facing=west,half=bottom,shape=straight": {
-			"model": "{model}",
-			"y": 180,
-			"uvlock": true
-		},
-		"facing=west,half=top,shape=inner_left": {
-			"model": "{model}_inner",
-			"x": 180,
-			"y": 180,
-			"uvlock": true
-		},
-		"facing=west,half=top,shape=inner_right": {
-			"model": "{model}_inner",
-			"x": 180,
-			"y": 270,
-			"uvlock": true
-		},
-		"facing=west,half=top,shape=outer_left": {
-			"model": "{model}_outer",
-			"x": 180,
-			"y": 180,
-			"uvlock": true
-		},
-		"facing=west,half=top,shape=outer_right": {
-			"model": "{model}_outer",
-			"x": 180,
-			"y": 270,
-			"uvlock": true
-		},
-		"facing=west,half=top,shape=straight": {
-			"model": "{model}",
-			"x": 180,
-			"y": 180,
-			"uvlock": true
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_curve.json b/src/main/resources/assets/architecture_extensions/templates/blockstate/template_curve.json
deleted file mode 100644
index 446949d..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_curve.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
-	"variants": {
-		"facing=east,half=bottom": {
-			"model": "{model}",
-			"y": 90
-		},
-		"facing=east,half=top": {
-			"model": "{model}",
-			"x": 180,
-			"y": 270,
-			"uvlock": true
-		},
-		"facing=north,half=bottom": {
-			"model": "{model}",
-			"y": 0,
-			"uvlock": true
-		},
-		"facing=north,half=top": {
-			"model": "{model}",
-			"x": 180,
-			"y": 180,
-			"uvlock": true
-		},
-		"facing=south,half=bottom": {
-			"model": "{model}",
-			"y": 180,
-			"uvlock": true
-		},
-		"facing=south,half=top": {
-			"model": "{model}",
-			"x": 180,
-			"y": 360,
-			"uvlock": true
-		},
-		"facing=west,half=bottom": {
-			"model": "{model}",
-			"y": 270,
-			"uvlock": true
-		},
-		"facing=west,half=top": {
-			"model": "{model}",
-			"x": 180,
-			"y": 90,
-			"uvlock": true
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_facade.json b/src/main/resources/assets/architecture_extensions/templates/blockstate/template_facade.json
deleted file mode 100644
index d553e76..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_facade.json
+++ /dev/null
@@ -1,76 +0,0 @@
-{
-	"multipart": [
-		{
-			"apply": {
-				"model": "{model}"
-			},
-			"when": {
-				"north": "true"
-			}
-		},
-		{
-			"apply": {
-				"model": "{model}",
-				"uvlock": true,
-				"y": 90
-			},
-			"when": {
-				"east": "true"
-			}
-		},
-		{
-			"apply": {
-				"model": "{model}",
-				"uvlock": true,
-				"y": 180
-			},
-			"when": {
-				"south": "true"
-			}
-		},
-		{
-			"apply": {
-				"model": "{model}",
-				"uvlock": true,
-				"y": 270
-			},
-			"when": {
-				"west": "true"
-			}
-		},
-		{
-			"apply": {
-				"model": "{model}",
-				"uvlock": true,
-				"x": 270
-			},
-			"when": {
-				"up": "true"
-			}
-		},
-		{
-			"apply": {
-				"model": "{model}",
-				"uvlock": true,
-				"x": 90
-			},
-			"when": {
-				"down": "true"
-			}
-		},
-		{
-			"apply": {
-				"model": "{model}",
-				"uvlock": true
-			},
-			"when": {
-				"down": "false",
-				"east": "false",
-				"north": "false",
-				"south": "false",
-				"up": "false",
-				"west": "false"
-			}
-		}
-	]
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_fence_post.json b/src/main/resources/assets/architecture_extensions/templates/blockstate/template_fence_post.json
deleted file mode 100644
index 3545cb8..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_fence_post.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-	"variants": {
-		"axis=x": {
-			"model": "{model}",
-			"x": 90,
-			"y": 90
-		},
-		"axis=y": {
-			"model": "{model}"
-		},
-		"axis=z": {
-			"model": "{model}",
-			"x": 90
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_h_beam.json b/src/main/resources/assets/architecture_extensions/templates/blockstate/template_h_beam.json
deleted file mode 100644
index 3545cb8..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_h_beam.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-	"variants": {
-		"axis=x": {
-			"model": "{model}",
-			"x": 90,
-			"y": 90
-		},
-		"axis=y": {
-			"model": "{model}"
-		},
-		"axis=z": {
-			"model": "{model}",
-			"x": 90
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_i_beam.json b/src/main/resources/assets/architecture_extensions/templates/blockstate/template_i_beam.json
deleted file mode 100644
index 3545cb8..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_i_beam.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-	"variants": {
-		"axis=x": {
-			"model": "{model}",
-			"x": 90,
-			"y": 90
-		},
-		"axis=y": {
-			"model": "{model}"
-		},
-		"axis=z": {
-			"model": "{model}",
-			"x": 90
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_joist.json b/src/main/resources/assets/architecture_extensions/templates/blockstate/template_joist.json
deleted file mode 100644
index 077aecc..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_joist.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
-	"variants": {
-		"facing=north": {
-			"model": "{model}"
-		},
-		"facing=east": {
-			"model": "{model}",
-			"y": 90
-		},
-		"facing=south": {
-			"model": "{model}",
-			"y": 180
-		},
-		"facing=west": {
-			"model": "{model}",
-			"y": 270
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_lattice.json b/src/main/resources/assets/architecture_extensions/templates/blockstate/template_lattice.json
deleted file mode 100644
index 9eaabcc..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_lattice.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
-	"variants": {
-		"facing=east": {
-			"model": "{model}",
-			"y": 270
-		},
-		"facing=north": {
-			"model": "{model}",
-			"y": 180
-		},
-		"facing=south": {
-			"model": "{model}"
-		},
-		"facing=west": {
-			"model": "{model}",
-			"y": 90
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_octagonal_column.json b/src/main/resources/assets/architecture_extensions/templates/blockstate/template_octagonal_column.json
deleted file mode 100644
index 6f4f7a1..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_octagonal_column.json
+++ /dev/null
@@ -1,57 +0,0 @@
-{
-	"variants": {
-		"axis=x,max_cap=false,min_cap=false": {
-			"model": "{model}",
-			"x": 90,
-			"y": 90
-		},
-		"axis=x,max_cap=false,min_cap=true": {
-			"model": "{model}_cap",
-			"x": 90,
-			"y": 270
-		},
-		"axis=x,max_cap=true,min_cap=false": {
-			"model": "{model}_cap",
-			"x": 90,
-			"y": 90
-		},
-		"axis=x,max_cap=true,min_cap=true": {
-			"model": "{model}_double_cap",
-			"x": 90,
-			"y": 90
-		},
-
-		"axis=y,max_cap=false,min_cap=false": {
-			"model": "{model}"
-		},
-		"axis=y,max_cap=false,min_cap=true": {
-			"model": "{model}_cap",
-			"x": 180
-		},
-		"axis=y,max_cap=true,min_cap=false": {
-			"model": "{model}_cap"
-		},
-		"axis=y,max_cap=true,min_cap=true": {
-			"model": "{model}_double_cap"
-		},
-
-		"axis=z,max_cap=false,min_cap=false": {
-			"model": "{model}",
-			"x": 90
-		},
-		"axis=z,max_cap=false,min_cap=true": {
-			"model": "{model}_cap",
-			"x": 90
-		},
-		"axis=z,max_cap=true,min_cap=false": {
-			"model": "{model}_cap",
-			"x": 90,
-			"y": 180
-		},
-		"axis=z,max_cap=true,min_cap=true": {
-			"model": "{model}_double_cap",
-			"x": 90
-		}
-	}
-}
-
diff --git a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_post_cap.json b/src/main/resources/assets/architecture_extensions/templates/blockstate/template_post_cap.json
deleted file mode 100644
index aa31442..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_post_cap.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-	"variants": {
-		"": {
-			"model": "{model}"
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_post_lantern.json b/src/main/resources/assets/architecture_extensions/templates/blockstate/template_post_lantern.json
deleted file mode 100644
index f0aaa93..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_post_lantern.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-	"variants": {
-		"hanging=false,waterlogged=false": {
-			"model": "{model}"
-		},
-		"hanging=false,waterlogged=true": {
-			"model": "{model}"
-		},
-		"hanging=true,waterlogged=false": {
-			"model": "{model}_hanging"
-		},
-		"hanging=true,waterlogged=true": {
-			"model": "{model}_hanging"
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_rod.json b/src/main/resources/assets/architecture_extensions/templates/blockstate/template_rod.json
deleted file mode 100644
index ea9d01a..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_rod.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
-	"variants": {
-		"facing=down": {
-			"model": "{model}",
-			"x": 180
-		},
-		"facing=east": {
-			"model": "{model}",
-			"x": 90,
-			"y": 90
-		},
-		"facing=north": {
-			"model": "{model}",
-			"x": 90
-		},
-		"facing=south": {
-			"model": "{model}",
-			"x": 90,
-			"y": 180
-		},
-		"facing=up": {
-			"model": "{model}"
-		},
-		"facing=west": {
-			"model": "{model}",
-			"x": 90,
-			"y": 270
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_roof.json b/src/main/resources/assets/architecture_extensions/templates/blockstate/template_roof.json
deleted file mode 100644
index ae2f729..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_roof.json
+++ /dev/null
@@ -1,174 +0,0 @@
-{
-	"variants": {
-		"facing=east,half=bottom,shape=inner_left": {
-			"model": "{model}_inner",
-			"y": 270
-		},
-		"facing=east,half=bottom,shape=inner_right": {
-			"model": "{model}_inner"
-		},
-		"facing=east,half=bottom,shape=outer_left": {
-			"model": "{model}_outer",
-			"y": 270
-		},
-		"facing=east,half=bottom,shape=outer_right": {
-			"model": "{model}_outer"
-		},
-		"facing=east,half=bottom,shape=straight": {
-			"model": "{model}"
-		},
-		"facing=east,half=top,shape=inner_left": {
-			"model": "{model}_inner",
-			"x": 180
-		},
-		"facing=east,half=top,shape=inner_right": {
-			"model": "{model}_inner",
-			"x": 180,
-			"y": 90
-		},
-		"facing=east,half=top,shape=outer_left": {
-			"model": "{model}_outer",
-			"x": 180
-		},
-		"facing=east,half=top,shape=outer_right": {
-			"model": "{model}_outer",
-			"x": 180,
-			"y": 90
-		},
-		"facing=east,half=top,shape=straight": {
-			"model": "{model}",
-			"x": 180
-		},
-		"facing=north,half=bottom,shape=inner_left": {
-			"model": "{model}_inner",
-			"y": 180
-		},
-		"facing=north,half=bottom,shape=inner_right": {
-			"model": "{model}_inner",
-			"y": 270
-		},
-		"facing=north,half=bottom,shape=outer_left": {
-			"model": "{model}_outer",
-			"y": 180
-		},
-		"facing=north,half=bottom,shape=outer_right": {
-			"model": "{model}_outer",
-			"y": 270
-		},
-		"facing=north,half=bottom,shape=straight": {
-			"model": "{model}",
-			"y": 270
-		},
-		"facing=north,half=top,shape=inner_left": {
-			"model": "{model}_inner",
-			"x": 180,
-			"y": 270
-		},
-		"facing=north,half=top,shape=inner_right": {
-			"model": "{model}_inner",
-			"x": 180
-		},
-		"facing=north,half=top,shape=outer_left": {
-			"model": "{model}_outer",
-			"x": 180,
-			"y": 270
-		},
-		"facing=north,half=top,shape=outer_right": {
-			"model": "{model}_outer",
-			"x": 180
-		},
-		"facing=north,half=top,shape=straight": {
-			"model": "{model}",
-			"x": 180,
-			"y": 270
-		},
-		"facing=south,half=bottom,shape=inner_left": {
-			"model": "{model}_inner"
-		},
-		"facing=south,half=bottom,shape=inner_right": {
-			"model": "{model}_inner",
-			"y": 90
-		},
-		"facing=south,half=bottom,shape=outer_left": {
-			"model": "{model}_outer"
-		},
-		"facing=south,half=bottom,shape=outer_right": {
-			"model": "{model}_outer",
-			"y": 90
-		},
-		"facing=south,half=bottom,shape=straight": {
-			"model": "{model}",
-			"y": 90
-		},
-		"facing=south,half=top,shape=inner_left": {
-			"model": "{model}_inner",
-			"x": 180,
-			"y": 90
-		},
-		"facing=south,half=top,shape=inner_right": {
-			"model": "{model}_inner",
-			"x": 180,
-			"y": 180
-		},
-		"facing=south,half=top,shape=outer_left": {
-			"model": "{model}_outer",
-			"x": 180,
-			"y": 90
-		},
-		"facing=south,half=top,shape=outer_right": {
-			"model": "{model}_outer",
-			"x": 180,
-			"y": 180
-		},
-		"facing=south,half=top,shape=straight": {
-			"model": "{model}",
-			"x": 180,
-			"y": 90
-		},
-		"facing=west,half=bottom,shape=inner_left": {
-			"model": "{model}_inner",
-			"y": 90
-		},
-		"facing=west,half=bottom,shape=inner_right": {
-			"model": "{model}_inner",
-			"y": 180
-		},
-		"facing=west,half=bottom,shape=outer_left": {
-			"model": "{model}_outer",
-			"y": 90
-		},
-		"facing=west,half=bottom,shape=outer_right": {
-			"model": "{model}_outer",
-			"y": 180
-		},
-		"facing=west,half=bottom,shape=straight": {
-			"model": "{model}",
-			"y": 180
-		},
-		"facing=west,half=top,shape=inner_left": {
-			"model": "{model}_inner",
-			"x": 180,
-			"y": 180
-		},
-		"facing=west,half=top,shape=inner_right": {
-			"model": "{model}_inner",
-			"x": 180,
-			"y": 270
-		},
-		"facing=west,half=top,shape=outer_left": {
-			"model": "{model}_outer",
-			"x": 180,
-			"y": 180
-		},
-		"facing=west,half=top,shape=outer_right": {
-			"model": "{model}_outer",
-			"x": 180,
-			"y": 270
-		},
-		"facing=west,half=top,shape=straight": {
-			"model": "{model}",
-			"x": 180,
-			"y": 180
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_round_arch.json b/src/main/resources/assets/architecture_extensions/templates/blockstate/template_round_arch.json
deleted file mode 100644
index 446949d..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_round_arch.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
-	"variants": {
-		"facing=east,half=bottom": {
-			"model": "{model}",
-			"y": 90
-		},
-		"facing=east,half=top": {
-			"model": "{model}",
-			"x": 180,
-			"y": 270,
-			"uvlock": true
-		},
-		"facing=north,half=bottom": {
-			"model": "{model}",
-			"y": 0,
-			"uvlock": true
-		},
-		"facing=north,half=top": {
-			"model": "{model}",
-			"x": 180,
-			"y": 180,
-			"uvlock": true
-		},
-		"facing=south,half=bottom": {
-			"model": "{model}",
-			"y": 180,
-			"uvlock": true
-		},
-		"facing=south,half=top": {
-			"model": "{model}",
-			"x": 180,
-			"y": 360,
-			"uvlock": true
-		},
-		"facing=west,half=bottom": {
-			"model": "{model}",
-			"y": 270,
-			"uvlock": true
-		},
-		"facing=west,half=top": {
-			"model": "{model}",
-			"x": 180,
-			"y": 90,
-			"uvlock": true
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_round_fence_post.json b/src/main/resources/assets/architecture_extensions/templates/blockstate/template_round_fence_post.json
deleted file mode 100644
index 3545cb8..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_round_fence_post.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-	"variants": {
-		"axis=x": {
-			"model": "{model}",
-			"x": 90,
-			"y": 90
-		},
-		"axis=y": {
-			"model": "{model}"
-		},
-		"axis=z": {
-			"model": "{model}",
-			"x": 90
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_transom.json b/src/main/resources/assets/architecture_extensions/templates/blockstate/template_transom.json
deleted file mode 100644
index 0a64dd8..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_transom.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
-	"variants": {
-		"facing=north": {
-			"model": "{model}",
-			"uvlock": true
-		},
-		"facing=east": {
-			"model": "{model}",
-			"y": 90,
-			"uvlock": true
-		},
-		"facing=south": {
-			"model": "{model}",
-			"y": 180,
-			"uvlock": true
-		},
-		"facing=west": {
-			"model": "{model}",
-			"y": 270,
-			"uvlock": true
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_tube_metal.json b/src/main/resources/assets/architecture_extensions/templates/blockstate/template_tube_metal.json
deleted file mode 100644
index 3545cb8..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_tube_metal.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-	"variants": {
-		"axis=x": {
-			"model": "{model}",
-			"x": 90,
-			"y": 90
-		},
-		"axis=y": {
-			"model": "{model}"
-		},
-		"axis=z": {
-			"model": "{model}",
-			"x": 90
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_wall_column.json b/src/main/resources/assets/architecture_extensions/templates/blockstate/template_wall_column.json
deleted file mode 100644
index 1f4aff1..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_wall_column.json
+++ /dev/null
@@ -1,42 +0,0 @@
-{
-	"variants": {
-		"facing=north,cap=false": {
-			"model": "{model}",
-			"uvlock": true
-		},
-		"facing=north,cap=true": {
-			"model": "{model}_cap",
-			"uvlock": true
-		},
-		"facing=east,cap=false": {
-			"model": "{model}",
-			"y": 90,
-			"uvlock": true
-		},
-		"facing=east,cap=true": {
-			"model": "{model}_cap",
-			"y": 90,
-			"uvlock": true
-		},
-		"facing=south,cap=false": {
-			"model": "{model}",
-			"y": 180,
-			"uvlock": true
-		},
-		"facing=south,cap=true": {
-			"model": "{model}_cap",
-			"y": 180,
-			"uvlock": true
-		},
-		"facing=west,cap=false": {
-			"model": "{model}",
-			"y": 270,
-			"uvlock": true
-		},
-		"facing=west,cap=true": {
-			"model": "{model}_cap",
-			"y": 270,
-			"uvlock": true
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_wall_post.json b/src/main/resources/assets/architecture_extensions/templates/blockstate/template_wall_post.json
deleted file mode 100644
index 3545cb8..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/blockstate/template_wall_post.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-	"variants": {
-		"axis=x": {
-			"model": "{model}",
-			"x": 90,
-			"y": 90
-		},
-		"axis=y": {
-			"model": "{model}"
-		},
-		"axis=z": {
-			"model": "{model}",
-			"x": 90
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/model/block/template_arch.json b/src/main/resources/assets/architecture_extensions/templates/model/block/template_arch.json
deleted file mode 100644
index 34fbe7c..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/model/block/template_arch.json
+++ /dev/null
@@ -1,99 +0,0 @@
-{
-	"credit": "Made with Blockbench",
-	"textures": {
-		"particle": "#texture"
-	},
-	"elements": [
-		{
-			"from": [0, 0, 0],
-			"to": [16, 4, 16],
-			"faces": {
-				"north": {"uv": [0, 12, 16, 16], "texture": "#texture", "cullface": "north"},
-				"east": {"uv": [0, 12, 16, 16], "texture": "#texture", "cullface": "east"},
-				"south": {"uv": [0, 12, 16, 16], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [0, 12, 16, 16], "texture": "#texture", "cullface": "west"},
-				"up": {"uv": [0, 0, 16, 16], "texture": "#texture"},
-				"down": {"uv": [0, 0, 16, 16], "texture": "#texture", "cullface": "down"}
-			}
-		},
-		{
-			"from": [4, 4, 0],
-			"to": [16, 6, 16],
-			"faces": {
-				"north": {"uv": [0, 10, 12, 12], "texture": "#texture", "cullface": "north"},
-				"east": {"uv": [0, 10, 16, 12], "texture": "#texture", "cullface": "east"},
-				"south": {"uv": [4, 10, 16, 12], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [0, 10, 16, 12], "texture": "#texture"},
-				"up": {"uv": [4, 0, 16, 16], "texture": "#texture"}
-			}
-		},
-		{
-			"from": [8, 6, 0],
-			"to": [16, 8, 16],
-			"faces": {
-				"north": {"uv": [0, 8, 8, 10], "texture": "#texture", "cullface": "north"},
-				"east": {"uv": [0, 8, 16, 10], "texture": "#texture", "cullface": "east"},
-				"south": {"uv": [8, 8, 16, 10], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [0, 8, 16, 10], "texture": "#texture"},
-				"up": {"uv": [8, 0, 16, 16], "texture": "#texture"}
-			}
-		},
-		{
-			"from": [10, 8, 0],
-			"to": [16, 12, 16],
-			"faces": {
-				"north": {"uv": [0, 4, 6, 8], "texture": "#texture", "cullface": "north"},
-				"east": {"uv": [0, 4, 16, 8], "texture": "#texture", "cullface": "east"},
-				"south": {"uv": [10, 4, 16, 8], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [0, 4, 16, 8], "texture": "#texture"},
-				"up": {"uv": [10, 0, 16, 16], "texture": "#texture"}
-			}
-		},
-		{
-			"from": [12, 12, 0],
-			"to": [16, 16, 16],
-			"faces": {
-				"north": {"uv": [0, 0, 4, 4], "texture": "#texture", "cullface": "north"},
-				"east": {"uv": [0, 0, 16, 4], "texture": "#texture", "cullface": "east"},
-				"south": {"uv": [12, 0, 16, 4], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [0, 0, 16, 4], "texture": "#texture"},
-				"up": {"uv": [12, 0, 16, 16], "texture": "#texture", "cullface": "up"}
-			}
-		}
-	],
-	"display": {
-		"thirdperson_righthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"thirdperson_lefthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"firstperson_righthand": {
-			"rotation": [0, 45, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"firstperson_lefthand": {
-			"rotation": [0, 225, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"ground": {
-			"translation": [0, 3, 0],
-			"scale": [0.25, 0.25, 0.25]
-		},
-		"gui": {
-			"rotation": [30, 135, 0],
-			"scale": [0.625, 0.625, 0.625]
-		},
-		"head": {
-			"rotation": [0, 180, 0],
-			"translation": [0, 13, 7]
-		},
-		"fixed": {
-			"scale": [0.5, 0.5, 0.5]
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/model/block/template_arch_inner.json b/src/main/resources/assets/architecture_extensions/templates/model/block/template_arch_inner.json
deleted file mode 100644
index d991a14..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/model/block/template_arch_inner.json
+++ /dev/null
@@ -1,116 +0,0 @@
-{
-	"credit": "Made with Blockbench",
-	"textures": {
-		"particle": "#texture"
-	},
-	"elements": [
-		{
-			"from": [0, 0, 0],
-			"to": [16, 4, 16],
-			"faces": {
-				"north": {"uv": [0, 12, 16, 16], "texture": "#texture", "cullface": "north"},
-				"east": {"uv": [0, 12, 16, 16], "texture": "#texture", "cullface": "east"},
-				"south": {"uv": [0, 12, 16, 16], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [0, 12, 16, 16], "texture": "#texture", "cullface": "west"},
-				"up": {"uv": [0, 0, 16, 16], "texture": "#texture"},
-				"down": {"uv": [0, 0, 16, 16], "texture": "#texture", "cullface": "down"}
-			}
-		},
-		{
-			"from": [4, 4, 0],
-			"to": [16, 6, 16],
-			"faces": {
-				"north": {"uv": [0, 10, 12, 12], "texture": "#texture", "cullface": "north"},
-				"east": {"uv": [0, 10, 16, 12], "texture": "#texture", "cullface": "east"},
-				"south": {"uv": [4, 10, 16, 12], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [0, 10, 16, 12], "texture": "#texture"},
-				"up": {"uv": [4, 0, 16, 16], "texture": "#texture"},
-				"down": {"uv": [0, 0, 0, 0], "texture": "#texture"}
-			}
-		},
-		{
-			"from": [8, 6, 0],
-			"to": [16, 8, 16],
-			"faces": {
-				"north": {"uv": [0, 8, 8, 10], "texture": "#texture", "cullface": "north"},
-				"east": {"uv": [0, 8, 16, 10], "texture": "#texture", "cullface": "east"},
-				"south": {"uv": [8, 8, 16, 10], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [0, 8, 16, 10], "texture": "#texture"},
-				"up": {"uv": [8, 0, 16, 16], "texture": "#texture"},
-				"down": {"uv": [0, 0, 0, 0], "texture": "#texture"}
-			}
-		},
-		{
-			"from": [10, 8, 0],
-			"to": [16, 12, 16],
-			"faces": {
-				"north": {"uv": [0, 4, 6, 8], "texture": "#texture", "cullface": "north"},
-				"east": {"uv": [0, 4, 16, 8], "texture": "#texture", "cullface": "east"},
-				"south": {"uv": [10, 4, 16, 8], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [0, 4, 16, 8], "texture": "#texture"},
-				"up": {"uv": [10, 0, 16, 16], "texture": "#texture"},
-				"down": {"uv": [0, 0, 0, 0], "texture": "#texture"}
-			}
-		},
-		{
-			"from": [12, 12, 0],
-			"to": [16, 16, 16],
-			"faces": {
-				"north": {"uv": [0, 0, 4, 4], "texture": "#texture", "cullface": "north"},
-				"east": {"uv": [0, 0, 16, 4], "texture": "#texture", "cullface": "east"},
-				"south": {"uv": [12, 0, 16, 4], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [0, 0, 16, 4], "texture": "#texture"},
-				"up": {"uv": [12, 0, 16, 16], "texture": "#texture", "cullface": "up"},
-				"down": {"uv": [0, 0, 0, 0], "texture": "#texture"}
-			}
-		},
-		{
-			"from": [0, 4, 4],
-			"to": [4, 6, 16],
-			"faces": {
-				"north": {"uv": [12, 10, 16, 12], "texture": "#texture"},
-				"east": {"uv": [0, 0, 0, 0], "texture": "#texture"},
-				"south": {"uv": [0, 10, 4, 12], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [4, 10, 16, 12], "texture": "#texture", "cullface": "west"},
-				"up": {"uv": [0, 4, 4, 16], "texture": "#texture"},
-				"down": {"uv": [0, 0, 0, 0], "texture": "#texture"}
-			}
-		},
-		{
-			"from": [0, 6, 8],
-			"to": [8, 8, 16],
-			"faces": {
-				"north": {"uv": [8, 8, 16, 10], "texture": "#texture"},
-				"east": {"uv": [0, 0, 0, 0], "texture": "#texture"},
-				"south": {"uv": [0, 8, 8, 10], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [8, 8, 16, 10], "texture": "#texture", "cullface": "west"},
-				"up": {"uv": [0, 8, 8, 16], "texture": "#texture"},
-				"down": {"uv": [0, 0, 0, 0], "texture": "#texture"}
-			}
-		},
-		{
-			"from": [0, 8, 10],
-			"to": [10, 12, 16],
-			"faces": {
-				"north": {"uv": [6, 4, 16, 8], "texture": "#texture"},
-				"east": {"uv": [0, 0, 0, 0], "texture": "#texture"},
-				"south": {"uv": [0, 4, 10, 8], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [10, 4, 16, 8], "texture": "#texture", "cullface": "west"},
-				"up": {"uv": [0, 10, 10, 16], "texture": "#texture"},
-				"down": {"uv": [0, 0, 0, 0], "texture": "#texture"}
-			}
-		},
-		{
-			"from": [0, 12, 12],
-			"to": [12, 16, 16],
-			"faces": {
-				"north": {"uv": [4, 0, 16, 4], "texture": "#texture"},
-				"east": {"uv": [0, 0, 0, 0], "texture": "#texture"},
-				"south": {"uv": [0, 0, 12, 4], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [12, 0, 16, 4], "texture": "#texture", "cullface": "west"},
-				"up": {"uv": [0, 12, 12, 16], "texture": "#texture", "cullface": "up"},
-				"down": {"uv": [0, 0, 0, 0], "texture": "#texture"}
-			}
-		}
-	]
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/model/block/template_arch_outer.json b/src/main/resources/assets/architecture_extensions/templates/model/block/template_arch_outer.json
deleted file mode 100644
index 515f8b5..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/model/block/template_arch_outer.json
+++ /dev/null
@@ -1,64 +0,0 @@
-{
-	"credit": "Made with Blockbench",
-	"textures": {
-		"particle": "#texture"
-	},
-	"elements": [
-		{
-			"from": [0, 0, 0],
-			"to": [16, 4, 16],
-			"faces": {
-				"north": {"uv": [0, 12, 16, 16], "texture": "#texture", "cullface": "north"},
-				"east": {"uv": [0, 12, 16, 16], "texture": "#texture", "cullface": "east"},
-				"south": {"uv": [0, 12, 16, 16], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [0, 12, 16, 16], "texture": "#texture", "cullface": "west"},
-				"up": {"uv": [0, 0, 16, 16], "texture": "#texture"},
-				"down": {"uv": [0, 0, 16, 16], "texture": "#texture", "cullface": "down"}
-			}
-		},
-		{
-			"from": [4, 4, 4],
-			"to": [16, 6, 16],
-			"faces": {
-				"north": {"uv": [0, 10, 12, 12], "texture": "#texture"},
-				"east": {"uv": [0, 10, 12, 12], "texture": "#texture", "cullface": "east"},
-				"south": {"uv": [4, 10, 16, 12], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [4, 10, 16, 12], "texture": "#texture"},
-				"up": {"uv": [4, 4, 16, 16], "texture": "#texture"}
-			}
-		},
-		{
-			"from": [8, 6, 8],
-			"to": [16, 8, 16],
-			"faces": {
-				"north": {"uv": [0, 8, 8, 10], "texture": "#texture"},
-				"east": {"uv": [0, 8, 8, 10], "texture": "#texture", "cullface": "east"},
-				"south": {"uv": [8, 8, 16, 10], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [8, 8, 16, 10], "texture": "#texture"},
-				"up": {"uv": [8, 8, 16, 16], "texture": "#texture"}
-			}
-		},
-		{
-			"from": [10, 8, 10],
-			"to": [16, 12, 16],
-			"faces": {
-				"north": {"uv": [0, 4, 6, 8], "texture": "#texture"},
-				"east": {"uv": [0, 4, 6, 8], "texture": "#texture", "cullface": "east"},
-				"south": {"uv": [10, 4, 16, 8], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [10, 4, 16, 8], "texture": "#texture"},
-				"up": {"uv": [10, 10, 16, 16], "texture": "#texture"}
-			}
-		},
-		{
-			"from": [12, 12, 12],
-			"to": [16, 16, 16],
-			"faces": {
-				"north": {"uv": [0, 0, 4, 4], "texture": "#texture"},
-				"east": {"uv": [0, 0, 4, 4], "texture": "#texture", "cullface": "east"},
-				"south": {"uv": [12, 0, 16, 4], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [12, 0, 16, 4], "texture": "#texture"},
-				"up": {"uv": [12, 12, 16, 16], "texture": "#texture", "cullface": "up"}
-			}
-		}
-	]
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/model/block/template_beam.json b/src/main/resources/assets/architecture_extensions/templates/model/block/template_beam.json
deleted file mode 100644
index 15fb043..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/model/block/template_beam.json
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-	"credit": "Made with Blockbench",
-	"textures": {
-		"particle": "#texture_side"
-	},
-	"elements": [
-		{
-			"from": [2, 0, 2],
-			"to": [14, 16, 14],
-			"faces": {
-				"north": {"uv": [2, 0, 14, 16], "texture": "#texture_side"},
-				"east": {"uv": [2, 0, 14, 16], "texture": "#texture_side"},
-				"south": {"uv": [2, 0, 14, 16], "texture": "#texture_side"},
-				"west": {"uv": [2, 0, 14, 16], "texture": "#texture_side"},
-				"up": {"uv": [2, 2, 14, 14], "texture": "#texture_up", "cullface": "up"},
-				"down": {"uv": [2, 2, 14, 14], "texture": "#texture_up", "cullface": "down"}
-			}
-		}
-	],
-	"display": {
-		"thirdperson_righthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"thirdperson_lefthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"firstperson_righthand": {
-			"rotation": [0, 45, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"firstperson_lefthand": {
-			"rotation": [0, 225, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"ground": {
-			"translation": [0, 3, 0],
-			"scale": [0.25, 0.25, 0.25]
-		},
-		"gui": {
-			"rotation": [30, 225, 0],
-			"scale": [0.625, 0.625, 0.625]
-		},
-		"fixed": {
-			"scale": [0.5, 0.5, 0.5]
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/model/block/template_circle_corner.json b/src/main/resources/assets/architecture_extensions/templates/model/block/template_circle_corner.json
deleted file mode 100644
index 7ad3f3b..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/model/block/template_circle_corner.json
+++ /dev/null
@@ -1,96 +0,0 @@
-{
-	"credit": "Made with Blockbench",
-	"textures": {
-		"particle": "minecraft:block/stone_bricks"
-	},
-	"elements": [
-		{
-			"from": [0, 0, 0],
-			"to": [16, 16, 4],
-			"faces": {
-				"north": {"uv": [0, 0, 16, 16], "texture": "#texture_side", "cullface": "north"},
-				"east": {"uv": [12, 0, 16, 16], "texture": "#texture_side", "cullface": "east"},
-				"south": {"uv": [0, 0, 16, 16], "texture": "#texture_side"},
-				"west": {"uv": [0, 0, 4, 16], "texture": "#texture_side", "cullface": "west"},
-				"up": {"uv": [0, 0, 16, 4], "texture": "#texture_up", "cullface": "up"},
-				"down": {"uv": [0, 12, 16, 16], "texture": "#texture_down", "cullface": "down"}
-			}
-		},
-		{
-			"from": [2, 0, 4],
-			"to": [16, 16, 8],
-			"faces": {
-				"east": {"uv": [8, 0, 12, 16], "texture": "#texture_side", "cullface": "east"},
-				"south": {"uv": [2, 0, 16, 16], "texture": "#texture_side"},
-				"west": {"uv": [4, 0, 8, 16], "texture": "#texture_side"},
-				"up": {"uv": [2, 4, 16, 8], "texture": "#texture_up", "cullface": "up"},
-				"down": {"uv": [2, 8, 16, 12], "texture": "#texture_down", "cullface": "down"}
-			}
-		},
-		{
-			"from": [4, 0, 8],
-			"to": [16, 16, 12],
-			"faces": {
-				"east": {"uv": [4, 0, 8, 16], "texture": "#texture_side", "cullface": "east"},
-				"south": {"uv": [4, 0, 16, 16], "texture": "#texture_side"},
-				"west": {"uv": [8, 0, 12, 16], "texture": "#texture_side"},
-				"up": {"uv": [4, 8, 16, 12], "texture": "#texture_up", "cullface": "up"},
-				"down": {"uv": [4, 4, 16, 8], "texture": "#texture_down", "cullface": "down"}
-			}
-		},
-		{
-			"from": [8, 0, 12],
-			"to": [16, 16, 14],
-			"faces": {
-				"east": {"uv": [2, 0, 4, 16], "texture": "#texture_side", "cullface": "east"},
-				"south": {"uv": [8, 0, 16, 16], "texture": "#texture_side"},
-				"west": {"uv": [12, 0, 14, 16], "texture": "#texture_side"},
-				"up": {"uv": [8, 12, 16, 14], "texture": "#texture_up", "cullface": "up"},
-				"down": {"uv": [8, 2, 16, 4], "texture": "#texture_down", "cullface": "down"}
-			}
-		},
-		{
-			"from": [12, 0, 14],
-			"to": [16, 16, 16],
-			"faces": {
-				"east": {"uv": [0, 0, 2, 16], "texture": "#texture_side", "cullface": "east"},
-				"south": {"uv": [12, 0, 16, 16], "texture": "#texture_side", "cullface": "south"},
-				"west": {"uv": [14, 0, 16, 16], "texture": "#texture_side"},
-				"up": {"uv": [12, 14, 16, 16], "texture": "#texture_up", "cullface": "up"},
-				"down": {"uv": [12, 0, 16, 2], "texture": "#texture_down", "cullface": "down"}
-			}
-		}
-	],
-	"display": {
-		"thirdperson_righthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"thirdperson_lefthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"firstperson_righthand": {
-			"rotation": [0, 45, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"firstperson_lefthand": {
-			"rotation": [0, 225, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"ground": {
-			"translation": [0, 3, 0],
-			"scale": [0.25, 0.25, 0.25]
-		},
-		"gui": {
-			"rotation": [30, 45, -90],
-			"scale": [0.625, 0.625, 0.625]
-		},
-		"fixed": {
-			"rotation": [-90, 0, 0],
-			"scale": [0.5, 0.5, 0.5]
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/model/block/template_crown_molding.json b/src/main/resources/assets/architecture_extensions/templates/model/block/template_crown_molding.json
deleted file mode 100644
index 29daea4..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/model/block/template_crown_molding.json
+++ /dev/null
@@ -1,63 +0,0 @@
-{
-	"credit": "Made with Blockbench",
-	"textures": {
-		"particle": "#texture"
-	},
-	"elements": [
-		{
-			"from": [8, 0, 0],
-			"to": [16, 4, 16],
-			"faces": {
-				"north": {"uv": [0, 12, 8, 16], "texture": "#texture", "cullface": "north"},
-				"east": {"uv": [0, 12, 16, 16], "texture": "#texture", "cullface": "east"},
-				"south": {"uv": [8, 12, 16, 16], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [0, 12, 16, 16], "texture": "#texture"},
-				"up": {"uv": [8, 0, 16, 16], "texture": "#texture"},
-				"down": {"uv": [0, 0, 8, 16], "texture": "#texture", "cullface": "down"}
-			}
-		},
-		{
-			"from": [12, 4, 0],
-			"to": [16, 8, 16],
-			"faces": {
-				"north": {"uv": [0, 8, 4, 12], "texture": "#texture", "cullface": "north"},
-				"east": {"uv": [0, 8, 16, 12], "texture": "#texture", "cullface": "east"},
-				"south": {"uv": [12, 8, 16, 12], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [0, 8, 16, 12], "texture": "#texture"},
-				"up": {"uv": [12, 0, 16, 16], "texture": "#texture"}
-			}
-		}
-	],
-	"display": {
-		"thirdperson_righthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"thirdperson_lefthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"firstperson_righthand": {
-			"rotation": [0, 45, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"firstperson_lefthand": {
-			"rotation": [0, 225, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"ground": {
-			"translation": [0, 3, 0],
-			"scale": [0.25, 0.25, 0.25]
-		},
-		"gui": {
-			"rotation": [30, 135, 0],
-			"translation": [2, 0.75, 0],
-			"scale": [0.625, 0.625, 0.625]
-		},
-		"fixed": {
-			"scale": [0.5, 0.5, 0.5]
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/model/block/template_crown_molding_inner.json b/src/main/resources/assets/architecture_extensions/templates/model/block/template_crown_molding_inner.json
deleted file mode 100644
index a8b2817..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/model/block/template_crown_molding_inner.json
+++ /dev/null
@@ -1,52 +0,0 @@
-{
-	"credit": "Made with Blockbench",
-	"textures": {
-		"particle": "#texture"
-	},
-	"elements": [
-		{
-			"from": [8, 0, 0],
-			"to": [16, 4, 16],
-			"faces": {
-				"north": {"uv": [0, 0, 8, 4], "texture": "#texture", "cullface": "north"},
-				"east": {"uv": [0, 12, 16, 16], "texture": "#texture", "cullface": "east"},
-				"south": {"uv": [8, 12, 16, 16], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [0, 12, 16, 16], "texture": "#texture"},
-				"up": {"uv": [8, 0, 16, 16], "texture": "#texture"},
-				"down": {"uv": [0, 0, 8, 16], "texture": "#texture", "cullface": "down"}
-			}
-		},
-		{
-			"from": [0, 0, 8],
-			"to": [8, 4, 16],
-			"faces": {
-				"north": {"uv": [8, 12, 16, 16], "texture": "#texture"},
-				"south": {"uv": [0, 12, 8, 16], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [8, 12, 16, 16], "texture": "#texture", "cullface": "west"},
-				"up": {"uv": [8, 8, 16, 16], "texture": "#texture"},
-				"down": {"uv": [0, 0, 8, 8], "texture": "#texture", "cullface": "down"}
-			}
-		},
-		{
-			"from": [12, 4, 0],
-			"to": [16, 8, 16],
-			"faces": {
-				"north": {"uv": [0, 0, 4, 4], "texture": "#texture", "cullface": "north"},
-				"east": {"uv": [0, 8, 16, 12], "texture": "#texture", "cullface": "east"},
-				"south": {"uv": [12, 8, 16, 12], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [0, 8, 16, 12], "texture": "#texture"},
-				"up": {"uv": [12, 0, 16, 16], "texture": "#texture"}
-			}
-		},
-		{
-			"from": [0, 4, 12],
-			"to": [12, 8, 16],
-			"faces": {
-				"north": {"uv": [4, 8, 16, 12], "texture": "#texture"},
-				"south": {"uv": [0, 8, 12, 12], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [12, 8, 16, 12], "texture": "#texture", "cullface": "west"},
-				"up": {"uv": [0, 12, 12, 16], "texture": "#texture"}
-			}
-		}
-	]
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/model/block/template_crown_molding_outer.json b/src/main/resources/assets/architecture_extensions/templates/model/block/template_crown_molding_outer.json
deleted file mode 100644
index 44ba9b5..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/model/block/template_crown_molding_outer.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
-	"credit": "Made with Blockbench",
-	"textures": {
-		"particle": "#texture"
-	},
-	"elements": [
-		{
-			"from": [8, 0, 8],
-			"to": [16, 4, 16],
-			"faces": {
-				"north": {"uv": [0, 12, 8, 16], "texture": "#texture"},
-				"east": {"uv": [0, 12, 8, 16], "texture": "#texture", "cullface": "east"},
-				"south": {"uv": [8, 12, 16, 16], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [8, 12, 16, 16], "texture": "#texture"},
-				"up": {"uv": [8, 8, 16, 16], "texture": "#texture"},
-				"down": {"uv": [8, 0, 16, 8], "texture": "#texture", "cullface": "down"}
-			}
-		},
-		{
-			"from": [12, 4, 12],
-			"to": [16, 8, 16],
-			"faces": {
-				"north": {"uv": [0, 8, 4, 12], "texture": "#texture"},
-				"east": {"uv": [0, 8, 4, 12], "texture": "#texture", "cullface": "east"},
-				"south": {"uv": [12, 8, 16, 12], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [12, 8, 16, 12], "texture": "#texture"},
-				"up": {"uv": [12, 12, 16, 16], "texture": "#texture"}
-			}
-		}
-	]
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/model/block/template_curve.json b/src/main/resources/assets/architecture_extensions/templates/model/block/template_curve.json
deleted file mode 100644
index 286a19a..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/model/block/template_curve.json
+++ /dev/null
@@ -1,44 +0,0 @@
-{
-	"parent": "architecture_extensions:block/curve.gltf",
-	"loader": "suspicious_shapes:gltf",
-	"textures": {
-		"particle": "#texture",
-		"all": "#texture"
-	},
-	"uvlock": true,
-	"display": {
-		"thirdperson_righthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"thirdperson_lefthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"firstperson_righthand": {
-			"rotation": [0, 315, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"firstperson_lefthand": {
-			"rotation": [0, 315, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"ground": {
-			"translation": [0, 3, 0],
-			"scale": [0.25, 0.25, 0.25]
-		},
-		"gui": {
-			"rotation": [30, 45, 0],
-			"scale": [0.625, 0.625, 0.625]
-		},
-		"head": {
-			"rotation": [0, 180, 0],
-			"translation": [0, 13, 7]
-		},
-		"fixed": {
-			"scale": [0.5, 0.5, 0.5]
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/model/block/template_facade.json b/src/main/resources/assets/architecture_extensions/templates/model/block/template_facade.json
deleted file mode 100644
index a33fdb6..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/model/block/template_facade.json
+++ /dev/null
@@ -1,58 +0,0 @@
-{
-	"credit": "Made with Blockbench",
-	"textures": {
-		"particle": "#texture"
-	},
-	"elements": [
-		{
-			"from": [0, 0, 0],
-			"to": [16, 16, 0.01],
-			"faces": {
-				"north": {"uv": [0, 0, 16, 16], "texture": "#texture"},
-				"east": {"uv": [15.99, 0, 16, 16], "texture": "#texture"},
-				"south": {"uv": [0, 0, 16, 16], "texture": "#texture"},
-				"west": {"uv": [0, 0, 0.01, 16], "texture": "#texture"},
-				"up": {"uv": [0, 0, 16, 0.01], "texture": "#texture"},
-				"down": {"uv": [0, 15.99, 16, 16], "texture": "#texture"}
-			}
-		}
-	],
-	"gui_light": "front",
-	"display": {
-		"thirdperson_righthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"thirdperson_lefthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"firstperson_righthand": {
-			"rotation": [0, 45, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"firstperson_lefthand": {
-			"rotation": [0, 225, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"ground": {
-			"translation": [0, 3, 2],
-			"scale": [0.25, 0.25, 0.25]
-		},
-		"gui": {
-			"rotation": [30, 225, 0],
-			"translation": [-3.5, 1.5, 0],
-			"scale": [0.625, 0.625, 0.625]
-		},
-		"head": {
-			"rotation": [0, 180, 0],
-			"translation": [0, 13, 7]
-		},
-		"fixed": {
-			"translation": [0, 0, 4.75],
-			"scale": [0.5, 0.5, 0.5]
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/model/block/template_fence_post.json b/src/main/resources/assets/architecture_extensions/templates/model/block/template_fence_post.json
deleted file mode 100644
index 5b26aa3..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/model/block/template_fence_post.json
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-	"parent": "minecraft:block/fence_post",
-	"textures": {
-		"particle": "#texture"
-	},
-	"display": {
-		"thirdperson_righthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"thirdperson_lefthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"firstperson_righthand": {
-			"rotation": [0, 45, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"firstperson_lefthand": {
-			"rotation": [0, 225, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"ground": {
-			"translation": [0, 3, 0],
-			"scale": [0.25, 0.25, 0.25]
-		},
-		"gui": {
-			"rotation": [30, 225, 0],
-			"scale": [0.625, 0.625, 0.625]
-		},
-		"fixed": {
-			"scale": [0.5, 0.5, 0.5]
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/model/block/template_h_beam.json b/src/main/resources/assets/architecture_extensions/templates/model/block/template_h_beam.json
deleted file mode 100644
index 722ffc7..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/model/block/template_h_beam.json
+++ /dev/null
@@ -1,73 +0,0 @@
-{
-	"credit": "Made with Blockbench",
-	"textures": {
-		"particle": "#texture"
-	},
-	"elements": [
-		{
-			"from": [1, 0, 0],
-			"to": [15, 16, 4],
-			"faces": {
-				"north": {"uv": [1, 0, 15, 16], "texture": "#texture", "cullface": "north"},
-				"east": {"uv": [0, 0, 4, 16], "texture": "#texture"},
-				"south": {"uv": [1, 0, 15, 16], "texture": "#texture"},
-				"west": {"uv": [0, 0, 4, 16], "texture": "#texture"},
-				"up": {"uv": [4, 0, 8, 14], "rotation": 90, "texture": "#texture", "cullface": "up"},
-				"down": {"uv": [4, 0, 8, 14], "rotation": 90, "texture": "#texture", "cullface": "down"}
-			}
-		},
-		{
-			"from": [1, 0, 12],
-			"to": [15, 16, 16],
-			"faces": {
-				"north": {"uv": [1, 0, 15, 16], "texture": "#texture"},
-				"east": {"uv": [0, 0, 4, 16], "texture": "#texture"},
-				"south": {"uv": [1, 0, 15, 16], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [0, 0, 4, 16], "texture": "#texture"},
-				"up": {"uv": [4, 0, 8, 14], "rotation": 90, "texture": "#texture", "cullface": "up"},
-				"down": {"uv": [4, 0, 8, 14], "rotation": 90, "texture": "#texture", "cullface": "down"}
-			}
-		},
-		{
-			"from": [6, 0, 4],
-			"to": [10, 16, 12],
-			"faces": {
-				"east": {"uv": [8, 0, 16, 16], "texture": "#texture"},
-				"west": {"uv": [8, 0, 16, 16], "texture": "#texture"},
-				"up": {"uv": [0, 4, 4, 12], "texture": "#texture", "cullface": "up"},
-				"down": {"uv": [0, 4, 4, 12], "texture": "#texture", "cullface": "down"}
-			}
-		}
-	],
-	"display": {
-		"thirdperson_righthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"thirdperson_lefthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"firstperson_righthand": {
-			"rotation": [0, 45, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"firstperson_lefthand": {
-			"rotation": [0, 225, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"ground": {
-			"translation": [0, 3, 0],
-			"scale": [0.25, 0.25, 0.25]
-		},
-		"gui": {
-			"rotation": [30, 225, 0],
-			"scale": [0.625, 0.625, 0.625]
-		},
-		"fixed": {
-			"scale": [0.5, 0.5, 0.5]
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/model/block/template_i_beam.json b/src/main/resources/assets/architecture_extensions/templates/model/block/template_i_beam.json
deleted file mode 100644
index 9700bac..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/model/block/template_i_beam.json
+++ /dev/null
@@ -1,73 +0,0 @@
-{
-	"credit": "Made with Blockbench",
-	"textures": {
-		"particle": "#texture"
-	},
-	"elements": [
-		{
-			"from": [4, 0, 0],
-			"to": [12, 16, 2],
-			"faces": {
-				"north": {"uv": [4, 0, 12, 16], "texture": "#texture", "cullface": "north"},
-				"east": {"uv": [0, 0, 2, 16], "texture": "#texture"},
-				"south": {"uv": [4, 0, 12, 16], "texture": "#texture"},
-				"west": {"uv": [0, 0, 2, 16], "texture": "#texture"},
-				"up": {"uv": [4, 0, 12, 2], "texture": "#texture", "cullface": "up"},
-				"down": {"uv": [4, 0, 12, 2], "texture": "#texture", "cullface": "down"}
-			}
-		},
-		{
-			"from": [4, 0, 14],
-			"to": [12, 16, 16],
-			"faces": {
-				"north": {"uv": [4, 0, 12, 16], "texture": "#texture"},
-				"east": {"uv": [14, 0, 16, 16], "texture": "#texture"},
-				"south": {"uv": [4, 0, 12, 16], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [14, 0, 16, 16], "texture": "#texture"},
-				"up": {"uv": [4, 14, 12, 16], "texture": "#texture", "cullface": "up"},
-				"down": {"uv": [4, 14, 12, 16], "texture": "#texture", "cullface": "down"}
-			}
-		},
-		{
-			"from": [7, 0, 2],
-			"to": [9, 16, 14],
-			"faces": {
-				"east": {"uv": [2, 0, 14, 16], "texture": "#texture"},
-				"west": {"uv": [2, 0, 14, 16], "texture": "#texture"},
-				"up": {"uv": [0, 2, 2, 14], "texture": "#texture", "cullface": "up"},
-				"down": {"uv": [0, 2, 2, 14], "texture": "#texture", "cullface": "down"}
-			}
-		}
-	],
-	"display": {
-		"thirdperson_righthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"thirdperson_lefthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"firstperson_righthand": {
-			"rotation": [0, 45, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"firstperson_lefthand": {
-			"rotation": [0, 225, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"ground": {
-			"translation": [0, 3, 0],
-			"scale": [0.25, 0.25, 0.25]
-		},
-		"gui": {
-			"rotation": [30, 225, 0],
-			"scale": [0.625, 0.625, 0.625]
-		},
-		"fixed": {
-			"scale": [0.5, 0.5, 0.5]
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/model/block/template_joist.json b/src/main/resources/assets/architecture_extensions/templates/model/block/template_joist.json
deleted file mode 100644
index 3f97a77..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/model/block/template_joist.json
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-	"credit": "Made with Blockbench",
-	"textures": {
-		"particle": "#texture"
-	},
-	"elements": [
-		{
-			"from": [4, 4, 0],
-			"to": [12, 16, 16],
-			"faces": {
-				"north": {"uv": [4, 2, 12, 14], "texture": "#texture", "cullface": "north"},
-				"east": {"uv": [0, 0, 12, 16], "rotation": 90, "texture": "#texture"},
-				"south": {"uv": [4, 2, 12, 14], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [0, 0, 12, 16], "rotation": 90, "texture": "#texture"},
-				"up": {"uv": [4, 0, 12, 16], "texture": "#texture", "cullface": "up"},
-				"down": {"uv": [4, 0, 12, 16], "texture": "#texture"}
-			}
-		}
-	],
-	"display": {
-		"thirdperson_righthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"thirdperson_lefthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"firstperson_righthand": {
-			"rotation": [0, 45, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"firstperson_lefthand": {
-			"rotation": [0, 225, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"ground": {
-			"translation": [0, 3, 0],
-			"scale": [0.25, 0.25, 0.25]
-		},
-		"gui": {
-			"rotation": [30, 225, 0],
-			"scale": [0.625, 0.625, 0.625]
-		},
-		"fixed": {
-			"scale": [0.5, 0.5, 0.5]
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/model/block/template_lattice.json b/src/main/resources/assets/architecture_extensions/templates/model/block/template_lattice.json
deleted file mode 100644
index 4d9c8d9..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/model/block/template_lattice.json
+++ /dev/null
@@ -1,198 +0,0 @@
-{
-	"credit": "Made by Cart3r with Blockbench.",
-	"textures": {
-		"particle": "#texture"
-	},
-	"elements": [
-		{
-			"from": [0.025, 0, 6.975],
-			"to": [16.025, 1, 8.975],
-			"rotation": {"angle": 0, "axis": "y", "origin": [8.025, 8, 8]},
-			"faces": {
-				"north": {"uv": [0, 15, 16, 16], "texture": "#texture", "cullface": "north"},
-				"east": {"uv": [14, 15, 16, 16], "texture": "#texture", "cullface": "east"},
-				"south": {"uv": [0, 15, 16, 16], "texture": "#texture"},
-				"west": {"uv": [0, 15, 2, 16], "texture": "#texture"},
-				"up": {"uv": [0, 14, 16, 16], "texture": "#texture"},
-				"down": {"uv": [0, 14, 16, 16], "texture": "#texture", "cullface": "down"}
-			}
-		},
-		{
-			"from": [0.025, 15, 6.975],
-			"to": [16.025, 16, 8.975],
-			"rotation": {"angle": 0, "axis": "y", "origin": [8.025, 8, 8]},
-			"faces": {
-				"north": {"uv": [0, 0, 16, 1], "texture": "#texture", "cullface": "north"},
-				"east": {"uv": [0, 0, 2, 1], "texture": "#texture", "cullface": "east"},
-				"south": {"uv": [0, 0, 16, 1], "texture": "#texture"},
-				"west": {"uv": [0, 0, 2, 1], "texture": "#texture"},
-				"up": {"uv": [0, 14, 16, 16], "texture": "#texture", "cullface": "up"},
-				"down": {"uv": [0, 14, 16, 16], "texture": "#texture"}
-			}
-		},
-		{
-			"from": [15.025, 1, 6.975],
-			"to": [16.025, 15, 8.975],
-			"rotation": {"angle": 0, "axis": "y", "origin": [8.025, 8, 8]},
-			"faces": {
-				"north": {"uv": [0, 1, 1, 15], "texture": "#texture", "cullface": "north"},
-				"east": {"uv": [14, 1, 16, 15], "texture": "#texture", "cullface": "east"},
-				"south": {"uv": [15, 1, 16, 15], "texture": "#texture"},
-				"west": {"uv": [0, 0, 2, 14], "texture": "#texture"}
-			}
-		},
-		{
-			"from": [0.025, 1, 6.975],
-			"to": [1.025, 15, 8.975],
-			"rotation": {"angle": 0, "axis": "y", "origin": [8.025, 8, 8]},
-			"faces": {
-				"north": {"uv": [15, 1, 16, 15], "texture": "#texture", "cullface": "north"},
-				"east": {"uv": [0, 0, 2, 14], "texture": "#texture"},
-				"south": {"uv": [0, 1, 1, 15], "texture": "#texture"},
-				"west": {"uv": [0, 1, 2, 15], "texture": "#texture"}
-			}
-		},
-		{
-			"from": [10.70698, 0.88909, 7.475],
-			"to": [11.70698, 15.63909, 8.475],
-			"rotation": {"angle": 45, "axis": "z", "origin": [8.025, 8, 8]},
-			"faces": {
-				"north": {"uv": [0, 3, 14.75, 4], "rotation": 90, "texture": "#texture"},
-				"east": {"uv": [0, 3, 14.75, 4], "rotation": 90, "texture": "#texture"},
-				"south": {"uv": [0, 3, 14.75, 4], "rotation": 90, "texture": "#texture"},
-				"west": {"uv": [0, 3, 14.75, 4], "rotation": 90, "texture": "#texture"}
-			}
-		},
-		{
-			"from": [14.94962, 4.71751, 7.475],
-			"to": [15.94962, 11.21751, 8.475],
-			"rotation": {"angle": 45, "axis": "z", "origin": [8.025, 8, 8]},
-			"faces": {
-				"north": {"uv": [9.5, 7, 16, 8], "rotation": 90, "texture": "#texture"},
-				"east": {"uv": [9.5, 7, 16, 8], "rotation": 90, "texture": "#texture"},
-				"south": {"uv": [9.5, 7, 16, 8], "rotation": 90, "texture": "#texture"},
-				"west": {"uv": [9.5, 7, 16, 8], "rotation": 90, "texture": "#texture"}
-			}
-		},
-		{
-			"from": [0.10038, 4.93198, 7.475],
-			"to": [1.10038, 11.18198, 8.475],
-			"rotation": {"angle": 45, "axis": "z", "origin": [8.025, 8, 8]},
-			"faces": {
-				"north": {"uv": [0, 11, 6.25, 12], "rotation": 90, "texture": "#texture"},
-				"east": {"uv": [0, 11, 6.25, 12], "rotation": 90, "texture": "#texture"},
-				"south": {"uv": [0, 11, 6.25, 12], "rotation": 90, "texture": "#texture"},
-				"west": {"uv": [0, 11, 6.25, 12], "rotation": 90, "texture": "#texture"}
-			}
-		},
-		{
-			"from": [7.17145, -2.48223, 7.475],
-			"to": [8.17145, 18.26777, 8.475],
-			"rotation": {"angle": 45, "axis": "z", "origin": [8.025, 8, 8]},
-			"faces": {
-				"north": {"uv": [0, 7, 16, 8], "rotation": 90, "texture": "#texture"},
-				"east": {"uv": [0, 7, 16, 8], "rotation": 90, "texture": "#texture"},
-				"south": {"uv": [0, 7, 16, 8], "rotation": 90, "texture": "#texture"},
-				"west": {"uv": [0, 7, 16, 8], "rotation": 90, "texture": "#texture"}
-			}
-		},
-		{
-			"from": [3.63591, 1.39645, 7.475],
-			"to": [4.63591, 14.64645, 8.475],
-			"rotation": {"angle": 45, "axis": "z", "origin": [8.025, 8, 8]},
-			"faces": {
-				"north": {"uv": [0, 15, 13.25, 16], "rotation": 90, "texture": "#texture"},
-				"east": {"uv": [0, 15, 13.25, 16], "rotation": 90, "texture": "#texture"},
-				"south": {"uv": [0, 15, 13.25, 16], "rotation": 90, "texture": "#texture"},
-				"west": {"uv": [0, 15, 13.25, 16], "rotation": 90, "texture": "#texture"}
-			}
-		},
-		{
-			"from": [14.94962, 4.93198, 7.525],
-			"to": [15.94962, 11.18198, 8.525],
-			"rotation": {"angle": -45, "axis": "z", "origin": [8.025, 8, 8]},
-			"faces": {
-				"north": {"uv": [0, 3, 6.25, 4], "rotation": 90, "texture": "#texture"},
-				"east": {"uv": [0, 3, 6.25, 4], "rotation": 90, "texture": "#texture"},
-				"south": {"uv": [0, 3, 6.25, 4], "rotation": 90, "texture": "#texture"},
-				"west": {"uv": [0, 3, 6.25, 4], "rotation": 90, "texture": "#texture"}
-			}
-		},
-		{
-			"from": [11.41409, 1.39645, 7.525],
-			"to": [12.41409, 14.64645, 8.525],
-			"rotation": {"angle": -45, "axis": "z", "origin": [8.025, 8, 8]},
-			"faces": {
-				"north": {"uv": [0, 3, 13.25, 4], "rotation": 90, "texture": "#texture"},
-				"east": {"uv": [0, 3, 13.25, 4], "rotation": 90, "texture": "#texture"},
-				"south": {"uv": [0, 3, 13.25, 4], "rotation": 90, "texture": "#texture"},
-				"west": {"uv": [0, 3, 13.25, 4], "rotation": 90, "texture": "#texture"}
-			}
-		},
-		{
-			"from": [7.87855, -2.48223, 7.525],
-			"to": [8.87855, 18.26777, 8.525],
-			"rotation": {"angle": -45, "axis": "z", "origin": [8.025, 8, 8]},
-			"faces": {
-				"north": {"uv": [0, 3, 16, 4], "rotation": 90, "texture": "#texture"},
-				"east": {"uv": [0, 3, 16, 4], "rotation": 90, "texture": "#texture"},
-				"south": {"uv": [0, 3, 16, 4], "rotation": 90, "texture": "#texture"},
-				"west": {"uv": [0, 3, 16, 4], "rotation": 90, "texture": "#texture"}
-			}
-		},
-		{
-			"from": [4.34302, 0.88909, 7.525],
-			"to": [5.34302, 15.63909, 8.525],
-			"rotation": {"angle": -45, "axis": "z", "origin": [8.025, 8, 8]},
-			"faces": {
-				"north": {"uv": [0, 3, 14.75, 4], "rotation": 90, "texture": "#texture"},
-				"east": {"uv": [0, 3, 14.75, 4], "rotation": 90, "texture": "#texture"},
-				"south": {"uv": [0, 3, 14.75, 4], "rotation": 90, "texture": "#texture"},
-				"west": {"uv": [0, 3, 14.75, 4], "rotation": 90, "texture": "#texture"}
-			}
-		},
-		{
-			"from": [0.60038, 4.71751, 7.525],
-			"to": [1.60038, 11.21751, 8.525],
-			"rotation": {"angle": -45, "axis": "z", "origin": [8.025, 8, 8]},
-			"faces": {
-				"north": {"uv": [0, 3, 6.5, 4], "rotation": 90, "texture": "#texture"},
-				"east": {"uv": [0, 3, 6.5, 4], "rotation": 90, "texture": "#texture"},
-				"south": {"uv": [0, 3, 6.5, 4], "rotation": 90, "texture": "#texture"},
-				"west": {"uv": [0, 3, 6.5, 4], "rotation": 90, "texture": "#texture"}
-			}
-		}
-	],
-	"gui_light": "front",
-	"display": {
-		"thirdperson_righthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"thirdperson_lefthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"firstperson_righthand": {
-			"rotation": [0, 45, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"firstperson_lefthand": {
-			"rotation": [0, 225, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"ground": {
-			"translation": [0, 3, 0],
-			"scale": [0.25, 0.25, 0.25]
-		},
-		"gui": {
-			"rotation": [30, 225, 0],
-			"scale": [0.625, 0.625, 0.625]
-		},
-		"fixed": {
-			"scale": [0.5, 0.5, 0.5]
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/model/block/template_octagonal_column.json b/src/main/resources/assets/architecture_extensions/templates/model/block/template_octagonal_column.json
deleted file mode 100644
index 7763313..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/model/block/template_octagonal_column.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
-	"parent": "architecture_extensions:block/octagonal_column.gltf",
-	"loader": "suspicious_shapes:gltf",
-	"textures": {
-		"particle": "#texture",
-		"all": "#texture"
-	},
-	"display": {
-		"thirdperson_righthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"thirdperson_lefthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"firstperson_righthand": {
-			"rotation": [0, 45, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"firstperson_lefthand": {
-			"rotation": [0, 225, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"ground": {
-			"translation": [0, 3, 0],
-			"scale": [0.25, 0.25, 0.25]
-		},
-		"gui": {
-			"rotation": [30, 225, 0],
-			"scale": [0.625, 0.625, 0.625]
-		},
-		"fixed": {
-			"scale": [0.5, 0.5, 0.5]
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/model/block/template_octagonal_column_cap.json b/src/main/resources/assets/architecture_extensions/templates/model/block/template_octagonal_column_cap.json
deleted file mode 100644
index 1592c81..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/model/block/template_octagonal_column_cap.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
-	"parent": "architecture_extensions:block/octagonal_column_cap.gltf",
-	"loader": "suspicious_shapes:gltf",
-	"textures": {
-		"particle": "#texture",
-		"all": "#texture"
-	},
-	"display": {
-		"thirdperson_righthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"thirdperson_lefthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"firstperson_righthand": {
-			"rotation": [0, 45, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"firstperson_lefthand": {
-			"rotation": [0, 225, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"ground": {
-			"translation": [0, 3, 0],
-			"scale": [0.25, 0.25, 0.25]
-		},
-		"gui": {
-			"rotation": [30, 225, 0],
-			"scale": [0.625, 0.625, 0.625]
-		},
-		"fixed": {
-			"scale": [0.5, 0.5, 0.5]
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/model/block/template_octagonal_column_double_cap.json b/src/main/resources/assets/architecture_extensions/templates/model/block/template_octagonal_column_double_cap.json
deleted file mode 100644
index b53389c..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/model/block/template_octagonal_column_double_cap.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
-	"parent": "architecture_extensions:block/octagonal_column_double_cap.gltf",
-	"loader": "suspicious_shapes:gltf",
-	"textures": {
-		"particle": "#texture",
-		"all": "#texture"
-	},
-	"display": {
-		"thirdperson_righthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"thirdperson_lefthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"firstperson_righthand": {
-			"rotation": [0, 45, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"firstperson_lefthand": {
-			"rotation": [0, 225, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"ground": {
-			"translation": [0, 3, 0],
-			"scale": [0.25, 0.25, 0.25]
-		},
-		"gui": {
-			"rotation": [30, 225, 0],
-			"scale": [0.625, 0.625, 0.625]
-		},
-		"fixed": {
-			"scale": [0.5, 0.5, 0.5]
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/model/block/template_post_cap.json b/src/main/resources/assets/architecture_extensions/templates/model/block/template_post_cap.json
deleted file mode 100644
index c0a0d8c..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/model/block/template_post_cap.json
+++ /dev/null
@@ -1,59 +0,0 @@
-{
-	"credit": "Made with Blockbench",
-	"textures": {
-		"particle": "#texture"
-	},
-	"elements": [
-		{
-			"from": [5, 0, 5],
-			"to": [11, 3, 11],
-			"faces": {
-				"north": {"uv": [5, 13, 11, 16], "texture": "#texture"},
-				"east": {"uv": [5, 13, 11, 16], "texture": "#texture"},
-				"south": {"uv": [5, 13, 11, 16], "texture": "#texture"},
-				"west": {"uv": [5, 13, 11, 16], "texture": "#texture"},
-				"up": {"uv": [5, 5, 11, 11], "texture": "#texture"},
-				"down": {"uv": [5, 5, 11, 11], "texture": "#texture", "cullface": "down"}
-			}
-		}
-	],
-	"display": {
-		"thirdperson_righthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 1.25],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"thirdperson_lefthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"firstperson_righthand": {
-			"rotation": [0, 45, 0],
-			"translation": [1.5, 4.25, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"firstperson_lefthand": {
-			"rotation": [0, 45, 0],
-			"translation": [1.5, 4.25, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"ground": {
-			"translation": [0, 3, 0],
-			"scale": [0.38672, 0.38672, 0.38672]
-		},
-		"gui": {
-			"rotation": [30, 225, 0],
-			"translation": [0, 2.25, 0],
-			"scale": [0.79102, 0.79102, 0.79102]
-		},
-		"head": {
-			"translation": [0, 14.25, 0],
-			"scale": [2.60547, 2.60547, 2.60547]
-		},
-		"fixed": {
-			"translation": [0, 2.5, 0],
-			"scale": [0.5, 0.5, 0.5]
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/model/block/template_post_lantern.json b/src/main/resources/assets/architecture_extensions/templates/model/block/template_post_lantern.json
deleted file mode 100644
index 39127db..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/model/block/template_post_lantern.json
+++ /dev/null
@@ -1,139 +0,0 @@
-{
-	"credit": "Made with Blockbench by Cart3r, edited by Falkreon.",
-	"textures": {
-		"lantern_texture": "block/lantern",
-		"particle": "#texture"
-	},
-	"elements": [
-		{
-			"from": [5, 0, 5],
-			"to": [11, 1, 11],
-			"rotation": {"angle": 0, "axis": "y", "origin": [8, 17, 8]},
-			"faces": {
-				"north": {"uv": [5, 14, 11, 15], "texture": "#texture"},
-				"east": {"uv": [5, 14, 11, 15], "texture": "#texture"},
-				"south": {"uv": [5, 14, 11, 15], "texture": "#texture"},
-				"west": {"uv": [5, 14, 11, 15], "texture": "#texture"},
-				"down": {"uv": [0, 10, 6, 16], "texture": "#texture"}
-			}
-		},
-		{
-			"from": [4, 5, 4],
-			"to": [12, 6, 12],
-			"rotation": {"angle": 0, "axis": "y", "origin": [8, 17, 8]},
-			"faces": {
-				"north": {"uv": [4, 10, 12, 11], "texture": "#texture"},
-				"east": {"uv": [4, 10, 12, 11], "texture": "#texture"},
-				"south": {"uv": [4, 10, 12, 11], "texture": "#texture"},
-				"west": {"uv": [4, 10, 12, 11], "texture": "#texture"},
-				"up": {"uv": [4, 4, 12, 12], "rotation": 90, "texture": "#texture"},
-				"down": {"uv": [4, 4, 12, 12], "rotation": 270, "texture": "#texture"}
-			}
-		},
-		{
-			"from": [6, 6, 6],
-			"to": [10, 7, 10],
-			"rotation": {"angle": 0, "axis": "y", "origin": [8, 17, 8]},
-			"faces": {
-				"north": {"uv": [6, 9, 10, 10], "texture": "#texture"},
-				"east": {"uv": [6, 9, 10, 10], "texture": "#texture"},
-				"south": {"uv": [6, 9, 10, 10], "texture": "#texture"},
-				"west": {"uv": [6, 9, 10, 10], "texture": "#texture"},
-				"up": {"uv": [6, 6, 10, 10], "rotation": 90, "texture": "#texture"}
-			}
-		},
-		{
-			"from": [5, 1, 6],
-			"to": [11, 5, 10],
-			"rotation": {"angle": 0, "axis": "y", "origin": [8, 17, 8]},
-			"faces": {
-				"east": {"uv": [1, 4, 5, 8], "texture": "#lantern_texture"},
-				"west": {"uv": [1, 4, 5, 8], "texture": "#lantern_texture"}
-			}
-		},
-		{
-			"from": [6, 1, 5],
-			"to": [10, 5, 11],
-			"rotation": {"angle": 0, "axis": "y", "origin": [8, 17, 8]},
-			"faces": {
-				"north": {"uv": [1, 4, 5, 8], "texture": "#lantern_texture"},
-				"south": {"uv": [1, 4, 5, 8], "texture": "#lantern_texture"}
-			}
-		},
-		{
-			"from": [5, 1, 5],
-			"to": [6, 5, 6],
-			"rotation": {"angle": 0, "axis": "y", "origin": [8, 17, 8]},
-			"faces": {
-				"north": {"uv": [1, 1, 2, 5], "texture": "#texture"},
-				"west": {"uv": [1, 1, 2, 5], "texture": "#texture"}
-			}
-		},
-		{
-			"from": [5, 1, 10],
-			"to": [6, 5, 11],
-			"rotation": {"angle": 0, "axis": "y", "origin": [8, 17, 8]},
-			"faces": {
-				"south": {"uv": [1, 1, 2, 5], "texture": "#texture"},
-				"west": {"uv": [1, 1, 2, 5], "texture": "#texture"}
-			}
-		},
-		{
-			"from": [10, 1, 10],
-			"to": [11, 5, 11],
-			"rotation": {"angle": 0, "axis": "y", "origin": [8, 17, 8]},
-			"faces": {
-				"east": {"uv": [1, 1, 2, 5], "texture": "#texture"},
-				"south": {"uv": [1, 1, 2, 5], "texture": "#texture"}
-			}
-		},
-		{
-			"from": [10, 1, 5],
-			"to": [11, 5, 6],
-			"rotation": {"angle": 0, "axis": "y", "origin": [8, 17, 8]},
-			"faces": {
-				"north": {"uv": [1, 1, 2, 5], "texture": "#texture"},
-				"east": {"uv": [1, 1, 2, 5], "texture": "#texture"}
-			}
-		}
-	],
-	"display": {
-		"thirdperson_righthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 1.25],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"thirdperson_lefthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"firstperson_righthand": {
-			"rotation": [0, 45, 0],
-			"translation": [1.5, 4.25, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"firstperson_lefthand": {
-			"rotation": [0, 45, 0],
-			"translation": [1.5, 4.25, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"ground": {
-			"translation": [0, 3, 0],
-			"scale": [0.38672, 0.38672, 0.38672]
-		},
-		"gui": {
-			"rotation": [30, 225, 0],
-			"translation": [0, 2.25, 0],
-			"scale": [0.79102, 0.79102, 0.79102]
-		},
-		"head": {
-			"translation": [0, 14.25, 0],
-			"scale": [2.60547, 2.60547, 2.60547]
-		},
-		"fixed": {
-			"translation": [0, 2.5, 0],
-			"scale": [0.5, 0.5, 0.5]
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/model/block/template_post_lantern_hanging.json b/src/main/resources/assets/architecture_extensions/templates/model/block/template_post_lantern_hanging.json
deleted file mode 100644
index 6599788..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/model/block/template_post_lantern_hanging.json
+++ /dev/null
@@ -1,139 +0,0 @@
-{
-	"credit": "Made with Blockbench by Cart3r, edited by Falkreon.",
-	"textures": {
-		"lantern_texture": "block/lantern",
-		"particle": "#texture"
-	},
-	"elements": [
-		{
-			"from": [5, 9, 5],
-			"to": [11, 10, 11],
-			"rotation": {"angle": 0, "axis": "y", "origin": [8, 17, 8]},
-			"faces": {
-				"north": {"uv": [5, 14, 11, 15], "texture": "#texture"},
-				"east": {"uv": [5, 14, 11, 15], "texture": "#texture"},
-				"south": {"uv": [5, 14, 11, 15], "texture": "#texture"},
-				"west": {"uv": [5, 14, 11, 15], "texture": "#texture"},
-				"down": {"uv": [0, 10, 6, 16], "texture": "#texture"}
-			}
-		},
-		{
-			"from": [4, 14, 4],
-			"to": [12, 15, 12],
-			"rotation": {"angle": 0, "axis": "y", "origin": [8, 17, 8]},
-			"faces": {
-				"north": {"uv": [4, 10, 12, 11], "texture": "#texture"},
-				"east": {"uv": [4, 10, 12, 11], "texture": "#texture"},
-				"south": {"uv": [4, 10, 12, 11], "texture": "#texture"},
-				"west": {"uv": [4, 10, 12, 11], "texture": "#texture"},
-				"up": {"uv": [4, 4, 12, 12], "rotation": 90, "texture": "#texture"},
-				"down": {"uv": [4, 4, 12, 12], "rotation": 270, "texture": "#texture"}
-			}
-		},
-		{
-			"from": [6, 15, 6],
-			"to": [10, 16, 10],
-			"rotation": {"angle": 0, "axis": "y", "origin": [8, 17, 8]},
-			"faces": {
-				"north": {"uv": [6, 9, 10, 10], "texture": "#texture"},
-				"east": {"uv": [6, 9, 10, 10], "texture": "#texture"},
-				"south": {"uv": [6, 9, 10, 10], "texture": "#texture"},
-				"west": {"uv": [6, 9, 10, 10], "texture": "#texture"},
-				"up": {"uv": [6, 6, 10, 10], "rotation": 90, "texture": "#texture"}
-			}
-		},
-		{
-			"from": [5, 10, 6],
-			"to": [11, 14, 10],
-			"rotation": {"angle": 0, "axis": "y", "origin": [8, 17, 8]},
-			"faces": {
-				"east": {"uv": [1, 4, 5, 8], "texture": "#lantern_texture"},
-				"west": {"uv": [1, 4, 5, 8], "texture": "#lantern_texture"}
-			}
-		},
-		{
-			"from": [6, 10, 5],
-			"to": [10, 14, 11],
-			"rotation": {"angle": 0, "axis": "y", "origin": [8, 17, 8]},
-			"faces": {
-				"north": {"uv": [1, 4, 5, 8], "texture": "#lantern_texture"},
-				"south": {"uv": [1, 4, 5, 8], "texture": "#lantern_texture"}
-			}
-		},
-		{
-			"from": [5, 10, 5],
-			"to": [6, 14, 6],
-			"rotation": {"angle": 0, "axis": "y", "origin": [8, 17, 8]},
-			"faces": {
-				"north": {"uv": [1, 1, 2, 5], "texture": "#texture"},
-				"west": {"uv": [1, 1, 2, 5], "texture": "#texture"}
-			}
-		},
-		{
-			"from": [5, 10, 10],
-			"to": [6, 14, 11],
-			"rotation": {"angle": 0, "axis": "y", "origin": [8, 17, 8]},
-			"faces": {
-				"south": {"uv": [1, 1, 2, 5], "texture": "#texture"},
-				"west": {"uv": [1, 1, 2, 5], "texture": "#texture"}
-			}
-		},
-		{
-			"from": [10, 10, 10],
-			"to": [11, 14, 11],
-			"rotation": {"angle": 0, "axis": "y", "origin": [8, 17, 8]},
-			"faces": {
-				"east": {"uv": [1, 1, 2, 5], "texture": "#texture"},
-				"south": {"uv": [1, 1, 2, 5], "texture": "#texture"}
-			}
-		},
-		{
-			"from": [10, 10, 5],
-			"to": [11, 14, 6],
-			"rotation": {"angle": 0, "axis": "y", "origin": [8, 17, 8]},
-			"faces": {
-				"north": {"uv": [1, 1, 2, 5], "texture": "#texture"},
-				"east": {"uv": [1, 1, 2, 5], "texture": "#texture"}
-			}
-		}
-	],
-	"display": {
-		"thirdperson_righthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 1.25],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"thirdperson_lefthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"firstperson_righthand": {
-			"rotation": [0, 45, 0],
-			"translation": [1.5, 4.25, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"firstperson_lefthand": {
-			"rotation": [0, 45, 0],
-			"translation": [1.5, 4.25, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"ground": {
-			"translation": [0, 3, 0],
-			"scale": [0.38672, 0.38672, 0.38672]
-		},
-		"gui": {
-			"rotation": [30, 225, 0],
-			"translation": [0, 2.25, 0],
-			"scale": [0.79102, 0.79102, 0.79102]
-		},
-		"head": {
-			"translation": [0, 14.25, 0],
-			"scale": [2.60547, 2.60547, 2.60547]
-		},
-		"fixed": {
-			"translation": [0, 2.5, 0],
-			"scale": [0.5, 0.5, 0.5]
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/model/block/template_rod.json b/src/main/resources/assets/architecture_extensions/templates/model/block/template_rod.json
deleted file mode 100644
index 15795f3..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/model/block/template_rod.json
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-	"credit": "Made with Blockbench",
-	"textures": {
-		"particle": "#texture"
-	},
-	"elements": [
-		{
-			"from": [7, 0, 7],
-			"to": [9, 16, 9],
-			"faces": {
-				"north": {"uv": [7, 0, 9, 16], "texture": "#texture"},
-				"east": {"uv": [7, 0, 9, 16], "texture": "#texture"},
-				"south": {"uv": [7, 0, 9, 16], "texture": "#texture"},
-				"west": {"uv": [7, 0, 9, 16], "texture": "#texture"},
-				"up": {"uv": [7, 7, 9, 9], "texture": "#texture", "cullface": "up"},
-				"down": {"uv": [7, 7, 9, 9], "texture": "#texture", "cullface": "down"}
-			}
-		}
-	],
-	"display": {
-		"thirdperson_righthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"thirdperson_lefthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"firstperson_righthand": {
-			"rotation": [0, 45, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"firstperson_lefthand": {
-			"rotation": [0, 225, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"ground": {
-			"translation": [0, 3, 0],
-			"scale": [0.25, 0.25, 0.25]
-		},
-		"gui": {
-			"rotation": [30, 225, 0],
-			"scale": [0.625, 0.625, 0.625]
-		},
-		"fixed": {
-			"scale": [0.5, 0.5, 0.5]
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/model/block/template_roof.json b/src/main/resources/assets/architecture_extensions/templates/model/block/template_roof.json
deleted file mode 100644
index e9acc22..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/model/block/template_roof.json
+++ /dev/null
@@ -1,175 +0,0 @@
-{
-	"credit": "Made with Blockbench. Fixed by Carter.",
-	"parent": "minecraft:block/cube",
-	"textures": {
-		"particle": "#texture"
-	},
-	"elements": [
-		{
-			"from": [0, 0, 0],
-			"to": [8, 6, 16],
-			"rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]},
-			"faces": {
-				"north": {"uv": [8, 10, 16, 16], "texture": "#texture_side", "cullface": "north"},
-				"south": {"uv": [0, 10, 8, 16], "texture": "#texture_side", "cullface": "south"},
-				"west": {"uv": [0, 10, 16, 16], "texture": "#texture_side", "cullface": "west"},
-				"down": {"uv": [0, 8, 16, 16], "rotation": 90, "texture": "#texture_side", "cullface": "down"}
-			}
-		},
-		{
-			"from": [8, 0, 0],
-			"to": [16, 13, 16],
-			"rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]},
-			"faces": {
-				"north": {"uv": [0, 3, 8, 16], "texture": "#texture_side", "cullface": "north"},
-				"east": {"uv": [0, 3, 16, 16], "texture": "#texture_side", "cullface": "east"},
-				"south": {"uv": [8, 3, 16, 16], "texture": "#texture_side", "cullface": "south"},
-				"down": {"uv": [0, 0, 16, 8], "rotation": 90, "texture": "#texture_side", "cullface": "down"}
-			}
-		},
-		{
-			"name": "upper_slope",
-			"from": [6.74, 9.49, -0.01],
-			"to": [17.76, 13.51, 16.01],
-			"rotation": {"angle": 22.5, "axis": "z", "origin": [8, 10.5, 8]},
-			"faces": {
-				"north": {"uv": [5, 0, 16, 4], "texture": "#texture"},
-				"east": {"uv": [0, 0, 16, 4], "texture": "#texture"},
-				"south": {"uv": [0, 0, 11, 4], "texture": "#texture"},
-				"west": {"uv": [0, 0, 16, 4], "texture": "#texture"},
-				"up": {"uv": [0, 0, 16, 11], "rotation": 90, "texture": "#texture"},
-				"down": {"uv": [0, 0, 16, 11], "rotation": 90, "texture": "#texture"}
-			}
-		},
-		{
-			"name": "upper_slope_right",
-			"from": [6.75, 9.5, 16],
-			"to": [17.75, 13.5, 20],
-			"rotation": {"angle": 22.5, "axis": "z", "origin": [8, 10.5, 8]},
-			"faces": {
-				"east": {"uv": [12, 0, 16, 4], "texture": "#texture", "cullface": "south"},
-				"south": {"uv": [0, 0, 11, 4], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [0, 0, 4, 4], "texture": "#texture", "cullface": "south"},
-				"up": {"uv": [0, 0, 4, 11], "rotation": 90, "texture": "#texture", "cullface": "south"},
-				"down": {"uv": [12, 0, 16, 11], "rotation": 90, "texture": "#texture", "cullface": "south"}
-			}
-		},
-		{
-			"name": "upper_slope_left",
-			"from": [6.75, 9.5, -4],
-			"to": [17.75, 13.5, 0],
-			"rotation": {"angle": 22.5, "axis": "z", "origin": [8, 10.5, 8]},
-			"faces": {
-				"north": {"uv": [5, 0, 16, 4], "texture": "#texture", "cullface": "north"},
-				"east": {"uv": [0, 0, 4, 4], "texture": "#texture", "cullface": "north"},
-				"west": {"uv": [12, 0, 16, 4], "texture": "#texture", "cullface": "north"},
-				"up": {"uv": [12, 0, 16, 11], "rotation": 90, "texture": "#texture", "cullface": "north"},
-				"down": {"uv": [0, 0, 4, 11], "rotation": 90, "texture": "#texture", "cullface": "north"}
-			}
-		},
-		{
-			"name": "lower_slope",
-			"from": [-0.89194, 1.58496, -0.01],
-			"to": [10.12806, 5.60496, 16.01],
-			"rotation": {"angle": 22.5, "axis": "z", "origin": [-0.63194, 2.59496, 8]},
-			"faces": {
-				"north": {"uv": [5, 0, 16, 4], "texture": "#texture"},
-				"south": {"uv": [0, 0, 11, 4], "texture": "#texture"},
-				"west": {"uv": [0, 0, 16, 4], "texture": "#texture"},
-				"up": {"uv": [0, 0, 16, 11], "rotation": 90, "texture": "#texture"},
-				"down": {"uv": [0, 0, 16, 11], "rotation": 90, "texture": "#texture"}
-			}
-		},
-		{
-			"name": "lower_slope_right",
-			"from": [-0.88194, 1.59496, 16],
-			"to": [10.11806, 5.59496, 20],
-			"rotation": {"angle": 22.5, "axis": "z", "origin": [-0.63194, 2.59496, 8]},
-			"faces": {
-				"east": {"uv": [12, 0, 16, 4], "texture": "#texture", "cullface": "south"},
-				"south": {"uv": [0, 0, 11, 4], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [0, 0, 4, 4], "texture": "#texture", "cullface": "south"},
-				"up": {"uv": [0, 0, 4, 11], "rotation": 90, "texture": "#texture", "cullface": "south"},
-				"down": {"uv": [12, 0, 16, 11], "rotation": 90, "texture": "#texture", "cullface": "south"}
-			}
-		},
-		{
-			"name": "lower_slope_left",
-			"from": [-0.88194, 1.59496, -4],
-			"to": [10.11806, 5.59496, 0],
-			"rotation": {"angle": 22.5, "axis": "z", "origin": [-0.63194, 2.59496, 8]},
-			"faces": {
-				"north": {"uv": [5, 0, 16, 4], "texture": "#texture", "cullface": "north"},
-				"east": {"uv": [0, 0, 4, 4], "texture": "#texture", "cullface": "north"},
-				"west": {"uv": [12, 0, 16, 4], "texture": "#texture", "cullface": "north"},
-				"up": {"uv": [12, 0, 16, 11], "rotation": 90, "texture": "#texture", "cullface": "north"},
-				"down": {"uv": [0, 0, 4, 11], "rotation": 90, "texture": "#texture", "cullface": "north"}
-			}
-		}
-	],
-	"display": {
-		"thirdperson_righthand": {
-			"rotation": [75, -45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"thirdperson_lefthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"firstperson_righthand": {
-			"rotation": [0, 45, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"firstperson_lefthand": {
-			"rotation": [0, 225, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"ground": {
-			"translation": [0, 3, 0],
-			"scale": [0.25, 0.25, 0.25]
-		},
-		"gui": {
-			"rotation": [30, 135, 0],
-			"scale": [0.5, 0.5, 0.5]
-		},
-		"head": {
-			"translation": [0, 14.25, 0]
-		},
-		"fixed": {
-			"scale": [0.5, 0.5, 0.5]
-		}
-	},
-	"groups": [
-		{
-			"name": "roof",
-			"origin": [0, 11, 7],
-			"color": 0,
-			"nbt": "{}",
-			"children": [
-				{
-					"name": "main_block",
-					"origin": [0, 6, 1],
-					"color": 0,
-					"nbt": "{}",
-					"children": [0, 1]
-				},
-				{
-					"name": "upper_slope",
-					"origin": [1, 10.5, 8],
-					"color": 0,
-					"nbt": "{}",
-					"children": [2, 3, 4]
-				},
-				{
-					"name": "lower_slope",
-					"origin": [1, 10.5, 8],
-					"color": 0,
-					"nbt": "{}",
-					"children": [5, 6, 7]
-				}
-			]
-		}
-	]
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/model/block/template_roof_inner.json b/src/main/resources/assets/architecture_extensions/templates/model/block/template_roof_inner.json
deleted file mode 100644
index c735881..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/model/block/template_roof_inner.json
+++ /dev/null
@@ -1,186 +0,0 @@
-{
-	"credit": "Made with Blockbench. Fixed by Carter.",
-	"parent": "minecraft:block/cube",
-	"textures": {
-		"particle": "#texture"
-	},
-	"elements": [
-		{
-			"from": [0, 0, 0],
-			"to": [8, 6, 8],
-			"rotation": {"angle": 0, "axis": "x", "origin": [8, 0, 8]},
-			"faces": {
-				"north": {"uv": [8, 10, 16, 16], "texture": "#texture_side", "cullface": "north"},
-				"west": {"uv": [0, 10, 8, 16], "texture": "#texture_side", "cullface": "west"},
-				"down": {"uv": [0, 8, 8, 16], "texture": "#texture_side", "cullface": "down"}
-			}
-		},
-		{
-			"from": [8, 0, 0],
-			"to": [16, 13, 8],
-			"rotation": {"angle": 0, "axis": "y", "origin": [8, 0, 8]},
-			"faces": {
-				"north": {"uv": [0, 3, 8, 16], "texture": "#texture_side", "cullface": "north"},
-				"east": {"uv": [8, 3, 16, 16], "texture": "#texture_side", "cullface": "east"},
-				"down": {"uv": [8, 8, 16, 16], "texture": "#texture_side", "cullface": "down"}
-			}
-		},
-		{
-			"from": [0, 0, 8],
-			"to": [16, 13, 16],
-			"rotation": {"angle": 0, "axis": "x", "origin": [8, 0, 8]},
-			"faces": {
-				"east": {"uv": [0, 3, 8, 16], "texture": "#texture_side", "cullface": "east"},
-				"south": {"uv": [0, 3, 16, 16], "texture": "#texture_side", "cullface": "south"},
-				"west": {"uv": [8, 3, 16, 16], "texture": "#texture_side", "cullface": "west"},
-				"up": {"uv": [0, 8, 16, 16], "texture": "#texture_side"},
-				"down": {"uv": [0, 0, 16, 8], "texture": "#texture_side", "cullface": "down"}
-			}
-		},
-		{
-			"name": "upper_slope",
-			"from": [6.74, 9.49, -0.01],
-			"to": [17.76, 13.51, 15.91],
-			"rotation": {"angle": 22.5, "axis": "z", "origin": [8, 10.5, 8]},
-			"faces": {
-				"north": {"uv": [5, 0, 16, 4], "texture": "#texture"},
-				"east": {"uv": [0, 0, 16, 4], "texture": "#texture"},
-				"south": {"uv": [5, 0, 16, 4], "texture": "#texture"},
-				"west": {"uv": [0, 0, 16, 4], "texture": "#texture"},
-				"up": {"uv": [0, 0, 16, 11], "rotation": 90, "texture": "#texture"},
-				"down": {"uv": [0, 0, 16, 11], "rotation": 90, "texture": "#texture"}
-			}
-		},
-		{
-			"name": "upper_slope_left",
-			"from": [6.75, 9.5, -4],
-			"to": [17.75, 13.5, 0],
-			"rotation": {"angle": 22.5, "axis": "z", "origin": [8, 10.5, 8]},
-			"faces": {
-				"north": {"uv": [5, 0, 16, 4], "texture": "#texture", "cullface": "north"},
-				"east": {"uv": [0, 0, 4, 4], "texture": "#texture", "cullface": "north"},
-				"west": {"uv": [12, 0, 16, 4], "texture": "#texture", "cullface": "north"},
-				"up": {"uv": [12, 0, 16, 11], "rotation": 90, "texture": "#texture", "cullface": "north"},
-				"down": {"uv": [0, 0, 4, 11], "rotation": 90, "texture": "#texture", "cullface": "north"}
-			}
-		},
-		{
-			"name": "upper_slope",
-			"from": [-0.01, 9.49, 6.74],
-			"to": [15.91, 13.51, 17.76],
-			"rotation": {"angle": -22.5, "axis": "x", "origin": [8, 10.5, 8]},
-			"faces": {
-				"north": {"uv": [0, 0, 16, 4], "texture": "#texture"},
-				"east": {"uv": [0, 0, 11, 4], "texture": "#texture"},
-				"south": {"uv": [0, 0, 16, 4], "texture": "#texture"},
-				"west": {"uv": [0, 0, 11, 4], "texture": "#texture"},
-				"up": {"uv": [0, 0, 16, 11], "rotation": 180, "texture": "#texture"},
-				"down": {"uv": [0, 0, 16, 11], "texture": "#texture"}
-			}
-		},
-		{
-			"name": "upper_slope_right",
-			"from": [-4, 9.5, 6.75],
-			"to": [0, 13.5, 17.75],
-			"rotation": {"angle": -22.5, "axis": "x", "origin": [8, 10.5, 8]},
-			"faces": {
-				"north": {"uv": [0, 0, 4, 4], "texture": "#texture", "cullface": "west"},
-				"south": {"uv": [12, 0, 16, 4], "texture": "#texture", "cullface": "west"},
-				"west": {"uv": [0, 0, 11, 4], "texture": "#texture", "cullface": "west"},
-				"up": {"uv": [0, 0, 4, 11], "rotation": 180, "texture": "#texture", "cullface": "west"},
-				"down": {"uv": [12, 0, 16, 11], "texture": "#texture", "cullface": "west"}
-			}
-		},
-		{
-			"name": "lower_slope",
-			"from": [1.10806, 1.58496, -0.01],
-			"to": [10.12806, 5.60496, 8.01],
-			"rotation": {"angle": 22.5, "axis": "z", "origin": [-0.63194, 2.59496, 8]},
-			"faces": {
-				"north": {"uv": [5, 0, 16, 4], "texture": "#texture"},
-				"up": {"uv": [0, 0, 8, 9], "rotation": 90, "texture": "#texture"}
-			}
-		},
-		{
-			"name": "lower_slope_left",
-			"from": [-0.88194, 1.59496, -4],
-			"to": [10.11806, 5.59496, 0],
-			"rotation": {"angle": 22.5, "axis": "z", "origin": [-0.63194, 2.59496, 8]},
-			"faces": {
-				"north": {"uv": [5, 0, 16, 4], "texture": "#texture", "cullface": "north"},
-				"east": {"uv": [0, 0, 4, 4], "texture": "#texture", "cullface": "north"},
-				"west": {"uv": [12, 0, 16, 4], "texture": "#texture", "cullface": "north"},
-				"up": {"uv": [12, 0, 16, 11], "rotation": 90, "texture": "#texture", "cullface": "north"},
-				"down": {"uv": [0, 0, 4, 11], "rotation": 90, "texture": "#texture", "cullface": "north"}
-			}
-		},
-		{
-			"name": "lower_slope",
-			"from": [-0.01, 1.58496, 1.10806],
-			"to": [8.01, 5.60496, 10.12806],
-			"rotation": {"angle": -22.5, "axis": "x", "origin": [8, 2.59496, -0.63194]},
-			"faces": {
-				"west": {"uv": [0, 0, 11, 4], "texture": "#texture"},
-				"up": {"uv": [8, 0, 16, 9], "rotation": 180, "texture": "#texture"}
-			}
-		},
-		{
-			"name": "lower_slope_right",
-			"from": [-4, 1.59496, -0.88194],
-			"to": [0, 5.59496, 10.11806],
-			"rotation": {"angle": -22.5, "axis": "x", "origin": [8, 2.59496, -0.63194]},
-			"faces": {
-				"north": {"uv": [0, 0, 4, 4], "texture": "#texture", "cullface": "west"},
-				"south": {"uv": [12, 0, 16, 4], "texture": "#texture", "cullface": "west"},
-				"west": {"uv": [0, 0, 11, 4], "texture": "#texture", "cullface": "west"},
-				"up": {"uv": [0, 0, 4, 11], "rotation": 180, "texture": "#texture", "cullface": "west"},
-				"down": {"uv": [12, 0, 16, 11], "texture": "#texture", "cullface": "west"}
-			}
-		}
-	],
-	"groups": [
-		{
-			"name": "roof",
-			"origin": [0, 11, 7],
-			"color": 0,
-			"nbt": "{}",
-			"children": [
-				{
-					"name": "main_block",
-					"origin": [0, 6, 1],
-					"color": 0,
-					"nbt": "{}",
-					"children": [0, 1, 2]
-				},
-				{
-					"name": "upper_slope",
-					"origin": [1, 10.5, 8],
-					"color": 0,
-					"nbt": "{}",
-					"children": [3, 4]
-				},
-				{
-					"name": "upper_slope",
-					"origin": [1, 10.5, 8],
-					"color": 0,
-					"nbt": "{}",
-					"children": [5, 6]
-				},
-				{
-					"name": "lower_slope",
-					"origin": [1, 10.5, 8],
-					"color": 0,
-					"nbt": "{}",
-					"children": [7, 8]
-				},
-				{
-					"name": "lower_slope",
-					"origin": [1, 10.5, 8],
-					"color": 0,
-					"nbt": "{}",
-					"children": [9, 10]
-				}
-			]
-		}
-	]
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/model/block/template_roof_outer.json b/src/main/resources/assets/architecture_extensions/templates/model/block/template_roof_outer.json
deleted file mode 100644
index 6a67de1..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/model/block/template_roof_outer.json
+++ /dev/null
@@ -1,361 +0,0 @@
-{
-	"credit": "Made with Blockbench. Fixed by Carter.",
-	"parent": "minecraft:block/cube",
-	"textures": {
-		"particle": "#texture"
-	},
-	"elements": [
-		{
-			"from": [0, 0, 0],
-			"to": [16, 6, 16],
-			"faces": {
-				"north": {"uv": [0, 10, 16, 16], "texture": "#texture_side", "cullface": "north"},
-				"east": {"uv": [0, 10, 16, 16], "texture": "#texture_side", "cullface": "east"},
-				"south": {"uv": [0, 10, 16, 16], "texture": "#texture_side", "cullface": "south"},
-				"west": {"uv": [0, 10, 16, 16], "texture": "#texture_side", "cullface": "west"},
-				"down": {"uv": [0, 0, 16, 16], "texture": "#texture_side", "cullface": "down"}
-			}
-		},
-		{
-			"from": [7, 6, 7],
-			"to": [16, 13, 16],
-			"rotation": {"angle": 0, "axis": "y", "origin": [0, 6, 1]},
-			"faces": {
-				"east": {"uv": [0, 3, 9, 10], "texture": "#texture_side", "cullface": "east"},
-				"south": {"uv": [7, 3, 16, 10], "texture": "#texture_side", "cullface": "south"}
-			}
-		},
-		{
-			"from": [-1.5, 5.5, -1],
-			"to": [1.5, 8.5, 10],
-			"rotation": {"angle": 45, "axis": "y", "origin": [0, 0, 0]},
-			"faces": {
-				"north": {"uv": [6, 0, 9, 3], "texture": "#texture"},
-				"east": {"uv": [0, 0, 11, 3], "texture": "#texture"},
-				"west": {"uv": [5, 0, 16, 3], "texture": "#texture"},
-				"up": {"uv": [6, 0, 9, 11], "texture": "#texture"},
-				"down": {"uv": [6, 0, 9, 11], "texture": "#texture"}
-			}
-		},
-		{
-			"from": [-1.5, 8.5, 5],
-			"to": [1.5, 10.5, 12],
-			"rotation": {"angle": 45, "axis": "y", "origin": [0, 0, 0]},
-			"faces": {
-				"north": {"uv": [6, 0, 9, 2], "texture": "#texture"},
-				"east": {"uv": [9, 0, 16, 2], "texture": "#texture"},
-				"west": {"uv": [0, 0, 7, 2], "texture": "#texture"},
-				"up": {"uv": [6, 0, 9, 7], "texture": "#texture"}
-			}
-		},
-		{
-			"from": [-1.5, 15.5, 16],
-			"to": [1.5, 17.5, 25],
-			"rotation": {"angle": 45, "axis": "y", "origin": [0, 0, 0]},
-			"faces": {
-				"north": {"uv": [6, 0, 9, 2], "texture": "#texture"},
-				"east": {"uv": [7, 0, 16, 2], "texture": "#texture"},
-				"south": {"uv": [6, 0, 9, 2], "texture": "#texture"},
-				"west": {"uv": [0, 0, 9, 2], "texture": "#texture"},
-				"up": {"uv": [6, 0, 9, 7], "texture": "#texture"},
-				"down": {"uv": [6, 0, 9, 7], "texture": "#texture"}
-			}
-		},
-		{
-			"from": [-1.5, 12.5, 10],
-			"to": [1.5, 15.5, 21],
-			"rotation": {"angle": 45, "axis": "y", "origin": [0, 0, 0]},
-			"faces": {
-				"north": {"uv": [6, 0, 9, 3], "texture": "#texture"},
-				"east": {"uv": [0, 0, 11, 3], "texture": "#texture"},
-				"west": {"uv": [5, 0, 16, 3], "texture": "#texture"},
-				"up": {"uv": [6, 0, 9, 11], "texture": "#texture"},
-				"down": {"uv": [6, 0, 9, 11], "texture": "#texture"}
-			}
-		},
-		{
-			"name": "lower_slope",
-			"from": [-0.01, 1.66108, -0.50926],
-			"to": [16.01, 5.68108, 3.51074],
-			"rotation": {"angle": -22.5, "axis": "x", "origin": [0, 1.67108, -0.24926]},
-			"faces": {
-				"north": {"uv": [0, 0, 16, 4], "texture": "#texture"},
-				"east": {"uv": [12, 0, 16, 4], "texture": "#texture"},
-				"west": {"uv": [0, 0, 4, 4], "texture": "#texture"},
-				"up": {"uv": [0, 7, 16, 11], "rotation": 180, "texture": "#texture"},
-				"down": {"uv": [0, 12, 16, 16], "texture": "#texture"}
-			}
-		},
-		{
-			"name": "lower_slope",
-			"from": [1.99, 1.66108, 3.49074],
-			"to": [16.01, 5.68108, 5.51074],
-			"rotation": {"angle": -22.5, "axis": "x", "origin": [0, 1.67108, -0.24926]},
-			"faces": {
-				"east": {"uv": [10, 0, 12, 4], "texture": "#texture"},
-				"up": {"uv": [0, 5, 14, 7], "rotation": 180, "texture": "#texture"}
-			}
-		},
-		{
-			"name": "lower_slope",
-			"from": [3.99, 1.66108, 5.49074],
-			"to": [16.01, 5.68108, 7.51074],
-			"rotation": {"angle": -22.5, "axis": "x", "origin": [0, 1.67108, -0.24926]},
-			"faces": {
-				"east": {"uv": [8, 0, 10, 4], "texture": "#texture"},
-				"up": {"uv": [0, 3, 12, 5], "rotation": 180, "texture": "#texture"}
-			}
-		},
-		{
-			"name": "lower_slope",
-			"from": [5.99, 1.66108, 7.49074],
-			"to": [16.01, 5.68108, 10.51074],
-			"rotation": {"angle": -22.5, "axis": "x", "origin": [0, 1.67108, -0.24926]},
-			"faces": {
-				"east": {"uv": [5, 0, 8, 4], "texture": "#texture"},
-				"up": {"uv": [0, 0, 10, 3], "rotation": 180, "texture": "#texture"}
-			}
-		},
-		{
-			"name": "lower_slope_left",
-			"from": [16, 1.67108, -0.49926],
-			"to": [20, 5.67108, 10.50074],
-			"rotation": {"angle": -22.5, "axis": "x", "origin": [0, 1.67108, -0.24926]},
-			"faces": {
-				"north": {"uv": [12, 0, 16, 4], "texture": "#texture", "cullface": "east"},
-				"east": {"uv": [5, 0, 16, 4], "texture": "#texture", "cullface": "east"},
-				"south": {"uv": [0, 0, 4, 4], "texture": "#texture", "cullface": "east"},
-				"up": {"uv": [12, 0, 16, 11], "rotation": 180, "texture": "#texture", "cullface": "east"},
-				"down": {"uv": [0, 0, 4, 11], "texture": "#texture", "cullface": "east"}
-			}
-		},
-		{
-			"name": "lower_slope",
-			"from": [7.99, 9.56612, 7.12268],
-			"to": [16.01, 13.58612, 10.14268],
-			"rotation": {"angle": -22.5, "axis": "x", "origin": [0, 9.57612, 8.38268]},
-			"faces": {
-				"north": {"uv": [0, 0, 8, 4], "texture": "#texture"},
-				"east": {"uv": [13, 0, 16, 4], "texture": "#texture"},
-				"west": {"uv": [0, 0, 3, 4], "texture": "#texture"},
-				"up": {"uv": [0, 8, 8.02, 11.02], "rotation": 180, "texture": "#texture"}
-			}
-		},
-		{
-			"name": "lower_slope",
-			"from": [8.99, 9.56612, 10.12268],
-			"to": [16.01, 13.58612, 12.14268],
-			"rotation": {"angle": -22.5, "axis": "x", "origin": [0, 9.57612, 8.38268]},
-			"faces": {
-				"north": {"uv": [0, 0, 8, 4], "texture": "#texture"},
-				"east": {"uv": [11, 0, 13, 4], "texture": "#texture"},
-				"up": {"uv": [0, 6, 7, 8], "rotation": 180, "texture": "#texture"}
-			}
-		},
-		{
-			"name": "lower_slope",
-			"from": [10.99, 9.56612, 12.12268],
-			"to": [16.01, 13.58612, 14.14268],
-			"rotation": {"angle": -22.5, "axis": "x", "origin": [0, 9.57612, 8.38268]},
-			"faces": {
-				"north": {"uv": [0, 0, 8, 4], "texture": "#texture"},
-				"east": {"uv": [9, 0, 11, 4], "texture": "#texture"},
-				"up": {"uv": [0, 4, 5, 6], "rotation": 180, "texture": "#texture"}
-			}
-		},
-		{
-			"name": "lower_slope",
-			"from": [12.99, 9.56612, 14.12268],
-			"to": [16.01, 13.58612, 17.14268],
-			"rotation": {"angle": -22.5, "axis": "x", "origin": [0, 9.57612, 8.38268]},
-			"faces": {
-				"north": {"uv": [0, 0, 8, 4], "texture": "#texture"},
-				"east": {"uv": [8, 0, 11, 4], "texture": "#texture"},
-				"south": {"uv": [13, 0, 16, 4], "texture": "#texture"},
-				"up": {"uv": [0, 1, 3, 4], "rotation": 180, "texture": "#texture"}
-			}
-		},
-		{
-			"name": "lower_slope_left",
-			"from": [16, 9.57612, 7.13268],
-			"to": [20, 13.57612, 18.13268],
-			"rotation": {"angle": -22.5, "axis": "x", "origin": [0, 9.57612, 8.38268]},
-			"faces": {
-				"north": {"uv": [12, 0, 16, 4], "texture": "#texture", "cullface": "east"},
-				"east": {"uv": [5, 0, 16, 4], "texture": "#texture", "cullface": "east"},
-				"south": {"uv": [0, 0, 4, 4], "texture": "#texture", "cullface": "east"},
-				"up": {"uv": [12, 0, 16, 11], "rotation": 180, "texture": "#texture", "cullface": "east"},
-				"down": {"uv": [0, 0, 4, 11], "texture": "#texture", "cullface": "east"}
-			}
-		},
-		{
-			"name": "lower_slope",
-			"from": [-0.50926, 1.66108, -0.01],
-			"to": [3.51074, 5.68108, 16.01],
-			"rotation": {"angle": 22.5, "axis": "z", "origin": [-0.24926, 1.67108, 16]},
-			"faces": {
-				"north": {"uv": [12, 0, 16, 4], "texture": "#texture"},
-				"south": {"uv": [0, 0, 4, 4], "texture": "#texture"},
-				"west": {"uv": [0, 0, 16, 4], "texture": "#texture"},
-				"up": {"uv": [0, 7, 16, 11], "rotation": 90, "texture": "#texture"},
-				"down": {"uv": [0, 12, 16, 16], "rotation": 90, "texture": "#texture"}
-			}
-		},
-		{
-			"name": "lower_slope",
-			"from": [3.49074, 1.66108, 1.99],
-			"to": [5.51074, 5.68108, 16.01],
-			"rotation": {"angle": 22.5, "axis": "z", "origin": [-0.24926, 1.67108, 16]},
-			"faces": {
-				"south": {"uv": [4, 0, 6, 4], "texture": "#texture"},
-				"up": {"uv": [2, 5, 16, 7], "rotation": 90, "texture": "#texture"}
-			}
-		},
-		{
-			"name": "lower_slope",
-			"from": [5.49074, 1.66108, 3.99],
-			"to": [7.51074, 5.68108, 16.01],
-			"rotation": {"angle": 22.5, "axis": "z", "origin": [-0.24926, 1.67108, 16]},
-			"faces": {
-				"south": {"uv": [6, 0, 8, 4], "texture": "#texture"},
-				"up": {"uv": [4, 3, 16, 5], "rotation": 90, "texture": "#texture"}
-			}
-		},
-		{
-			"name": "lower_slope",
-			"from": [7.49074, 1.66108, 5.99],
-			"to": [10.51074, 5.68108, 16.01],
-			"rotation": {"angle": 22.5, "axis": "z", "origin": [-0.24926, 1.67108, 16]},
-			"faces": {
-				"south": {"uv": [8, 0, 11, 4], "texture": "#texture"},
-				"up": {"uv": [6, 0, 16, 3], "rotation": 90, "texture": "#texture"}
-			}
-		},
-		{
-			"name": "lower_slope_right",
-			"from": [-0.49926, 1.67108, 16],
-			"to": [10.50074, 5.67108, 20],
-			"rotation": {"angle": 22.5, "axis": "z", "origin": [-0.24926, 1.67108, 16]},
-			"faces": {
-				"east": {"uv": [12, 0, 16, 4], "texture": "#texture", "cullface": "south"},
-				"south": {"uv": [0, 0, 11, 4], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [0, 0, 4, 4], "texture": "#texture", "cullface": "south"},
-				"up": {"uv": [0, 0, 4, 11], "rotation": 90, "texture": "#texture", "cullface": "south"},
-				"down": {"uv": [12, 0, 16, 11], "rotation": 90, "texture": "#texture", "cullface": "south"}
-			}
-		},
-		{
-			"name": "lower_slope",
-			"from": [7.12268, 9.56612, 7.99],
-			"to": [10.14268, 13.58612, 16.01],
-			"rotation": {"angle": 22.5, "axis": "z", "origin": [8.38268, 9.57612, 16]},
-			"faces": {
-				"north": {"uv": [13, 0, 16, 4], "texture": "#texture"},
-				"south": {"uv": [0, 0, 3, 4], "texture": "#texture"},
-				"west": {"uv": [8, 0, 16, 4], "texture": "#texture"},
-				"up": {"uv": [7.98, 8, 16, 11.02], "rotation": 90, "texture": "#texture"}
-			}
-		},
-		{
-			"name": "lower_slope",
-			"from": [10.12268, 9.56612, 8.99],
-			"to": [12.14268, 13.58612, 16.01],
-			"rotation": {"angle": 22.5, "axis": "z", "origin": [8.38268, 9.57612, 16]},
-			"faces": {
-				"south": {"uv": [4, 0, 6, 4], "texture": "#texture"},
-				"west": {"uv": [0, 0, 8, 4], "texture": "#texture"},
-				"up": {"uv": [8.98, 6, 16, 8.02], "rotation": 90, "texture": "#texture"}
-			}
-		},
-		{
-			"name": "lower_slope",
-			"from": [12.12268, 9.56612, 10.99],
-			"to": [14.14268, 13.58612, 16.01],
-			"rotation": {"angle": 22.5, "axis": "z", "origin": [8.38268, 9.57612, 16]},
-			"faces": {
-				"south": {"uv": [6, 0, 8, 4], "texture": "#texture"},
-				"west": {"uv": [0, 0, 8, 4], "texture": "#texture"},
-				"up": {"uv": [11, 4, 16, 6], "rotation": 90, "texture": "#texture"}
-			}
-		},
-		{
-			"name": "lower_slope",
-			"from": [14.12268, 9.56612, 12.99],
-			"to": [17.14268, 13.58612, 16.01],
-			"rotation": {"angle": 22.5, "axis": "z", "origin": [8.38268, 9.57612, 16]},
-			"faces": {
-				"east": {"uv": [0, 0, 3, 4], "texture": "#texture"},
-				"south": {"uv": [8, 0, 11, 4], "texture": "#texture"},
-				"west": {"uv": [0, 0, 8, 4], "texture": "#texture"},
-				"up": {"uv": [13, 1, 16, 4], "rotation": 90, "texture": "#texture"}
-			}
-		},
-		{
-			"name": "lower_slope_right",
-			"from": [7.13268, 9.57612, 16],
-			"to": [18.13268, 13.57612, 20],
-			"rotation": {"angle": 22.5, "axis": "z", "origin": [8.38268, 9.57612, 16]},
-			"faces": {
-				"east": {"uv": [12, 0, 16, 4], "texture": "#texture", "cullface": "south"},
-				"south": {"uv": [0, 0, 11, 4], "texture": "#texture", "cullface": "south"},
-				"west": {"uv": [0, 0, 4, 4], "texture": "#texture", "cullface": "south"},
-				"up": {"uv": [0, 0, 4, 11], "rotation": 90, "texture": "#texture", "cullface": "south"},
-				"down": {"uv": [12, 0, 16, 11], "rotation": 90, "texture": "#texture", "cullface": "south"}
-			}
-		}
-	],
-	"groups": [
-		{
-			"name": "roof",
-			"origin": [0, 11, 7],
-			"color": 0,
-			"nbt": "{}",
-			"children": [
-				0,
-				1,
-				{
-					"name": "lower_tip",
-					"origin": [0, 0, 0],
-					"color": 0,
-					"nbt": "{}",
-					"children": [2, 3, 4, 5]
-				},
-				{
-					"name": "upper_tip",
-					"origin": [0, 0, 0],
-					"color": 0,
-					"nbt": "{}",
-					"children": []
-				},
-				{
-					"name": "lower_slope_left",
-					"origin": [1, 10.5, 8],
-					"color": 0,
-					"nbt": "{}",
-					"children": [6, 7, 8, 9, 10]
-				},
-				{
-					"name": "upper_slope_left",
-					"origin": [1, 10.5, 8],
-					"color": 0,
-					"nbt": "{}",
-					"children": [11, 12, 13, 14, 15]
-				},
-				{
-					"name": "lower_slope_right",
-					"origin": [1, 10.5, 8],
-					"color": 0,
-					"nbt": "{}",
-					"children": [16, 17, 18, 19, 20]
-				},
-				{
-					"name": "upper_slope_right",
-					"origin": [1, 10.5, 8],
-					"color": 0,
-					"nbt": "{}",
-					"children": [21, 22, 23, 24, 25]
-				}
-			]
-		}
-	]
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/model/block/template_round_arch.json b/src/main/resources/assets/architecture_extensions/templates/model/block/template_round_arch.json
deleted file mode 100644
index 91b9290..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/model/block/template_round_arch.json
+++ /dev/null
@@ -1,44 +0,0 @@
-{
-	"parent": "architecture_extensions:block/round_arch.gltf",
-	"loader": "suspicious_shapes:gltf",
-	"textures": {
-		"particle": "#texture",
-		"all": "#texture"
-	},
-	"uvlock": true,
-	"display": {
-		"thirdperson_righthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"thirdperson_lefthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"firstperson_righthand": {
-			"rotation": [0, 315, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"firstperson_lefthand": {
-			"rotation": [0, 315, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"ground": {
-			"translation": [0, 3, 0],
-			"scale": [0.25, 0.25, 0.25]
-		},
-		"gui": {
-			"rotation": [30, 45, 0],
-			"scale": [0.625, 0.625, 0.625]
-		},
-		"head": {
-			"rotation": [0, 180, 0],
-			"translation": [0, 13, 7]
-		},
-		"fixed": {
-			"scale": [0.5, 0.5, 0.5]
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/model/block/template_round_fence_post.json b/src/main/resources/assets/architecture_extensions/templates/model/block/template_round_fence_post.json
deleted file mode 100644
index 9e81a70..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/model/block/template_round_fence_post.json
+++ /dev/null
@@ -1,39 +0,0 @@
-{
-	"parent": "architecture_extensions:block/round_fence_post.gltf",
-	"loader": "suspicious_shapes:gltf",
-	"textures": {
-		"particle": "#texture",
-		"all": "#texture"
-	},
-	"display": {
-		"thirdperson_righthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"thirdperson_lefthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"firstperson_righthand": {
-			"rotation": [0, 45, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"firstperson_lefthand": {
-			"rotation": [0, 225, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"ground": {
-			"translation": [0, 3, 0],
-			"scale": [0.25, 0.25, 0.25]
-		},
-		"gui": {
-			"rotation": [30, 225, 0],
-			"scale": [0.625, 0.625, 0.625]
-		},
-		"fixed": {
-			"scale": [0.5, 0.5, 0.5]
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/model/block/template_transom.json b/src/main/resources/assets/architecture_extensions/templates/model/block/template_transom.json
deleted file mode 100644
index 17dfb66..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/model/block/template_transom.json
+++ /dev/null
@@ -1,98 +0,0 @@
-{
-	"credit": "Made with Blockbench",
-	"parent": "block/block",
-	"textures": {
-		"glass": "block/light_blue_stained_glass",
-		"particle": "#texture"
-	},
-	"elements": [
-		{
-			"from": [0, 0, 0],
-			"to": [16, 2, 4],
-			"faces": {
-				"north": {"uv": [0, 0, 16, 2], "texture": "#texture"},
-				"east": {"uv": [6, 0, 10, 2], "texture": "#texture"},
-				"south": {"uv": [0, 0, 16, 2], "texture": "#texture"},
-				"west": {"uv": [6, 0, 10, 2], "texture": "#texture"},
-				"up": {"uv": [0, 0, 16, 4], "texture": "#texture"},
-				"down": {"uv": [0, 0, 16, 4], "texture": "#texture"}
-			}
-		},
-		{
-			"from": [0, 14, 0],
-			"to": [16, 16, 4],
-			"faces": {
-				"north": {"uv": [0, 0, 16, 2], "texture": "#texture"},
-				"east": {"uv": [6, 0, 10, 2], "texture": "#texture"},
-				"south": {"uv": [0, 0, 16, 2], "texture": "#texture"},
-				"west": {"uv": [6, 0, 10, 2], "texture": "#texture"},
-				"up": {"uv": [0, 0, 16, 4], "texture": "#texture"},
-				"down": {"uv": [0, 0, 16, 4], "texture": "#texture"}
-			}
-		},
-		{
-			"from": [0, 2, 0],
-			"to": [2, 14, 4],
-			"faces": {
-				"north": {"uv": [7, 2, 9, 14], "texture": "#texture"},
-				"east": {"uv": [6, 2, 10, 14], "texture": "#texture"},
-				"south": {"uv": [7, 2, 9, 14], "texture": "#texture"},
-				"west": {"uv": [6, 2, 10, 14], "texture": "#texture"},
-				"up": {"uv": [0, 0, 2, 4], "texture": "#texture"},
-				"down": {"uv": [0, 0, 2, 4], "texture": "#texture"}
-			}
-		},
-		{
-			"from": [14, 2, 0],
-			"to": [16, 14, 4],
-			"faces": {
-				"north": {"uv": [7, 2, 9, 14], "texture": "#texture"},
-				"east": {"uv": [6, 2, 10, 14], "texture": "#texture"},
-				"south": {"uv": [7, 2, 9, 14], "texture": "#texture"},
-				"west": {"uv": [6, 2, 10, 14], "texture": "#texture"},
-				"up": {"uv": [0, 0, 2, 4], "texture": "#texture"},
-				"down": {"uv": [0, 0, 2, 4], "texture": "#texture"}
-			}
-		},
-		{
-			"from": [2, 2, 1],
-			"to": [14, 14, 3],
-			"faces": {
-				"north": {"uv": [2, 2, 14, 14], "texture": "#glass"},
-				"south": {"uv": [2, 2, 14, 14], "texture": "#glass"}
-			}
-		}
-	],
-	"display": {
-		"thirdperson_righthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"thirdperson_lefthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"firstperson_righthand": {
-			"rotation": [0, 45, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"firstperson_lefthand": {
-			"rotation": [0, 225, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"ground": {
-			"translation": [0, 3, 1.5],
-			"scale": [0.25, 0.25, 0.25]
-		},
-		"gui": {
-			"rotation": [30, 225, 0],
-			"translation": [-3.5, 1.5, 0],
-			"scale": [0.625, 0.625, 0.625]
-		},
-		"fixed": {
-			"scale": [0.5, 0.5, 0.5]
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/model/block/template_tube_metal.json b/src/main/resources/assets/architecture_extensions/templates/model/block/template_tube_metal.json
deleted file mode 100644
index 1d26ba3..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/model/block/template_tube_metal.json
+++ /dev/null
@@ -1,83 +0,0 @@
-{
-	"credit": "Made with Blockbench",
-	"textures": {
-		"particle": "#texture"
-	},
-	"elements": [
-		{
-			"from": [0, 0, 0],
-			"to": [3, 16, 16],
-			"faces": {
-				"north": {"uv": [13.032, 0.032, 15.968, 15.968], "texture": "#texture"},
-				"east": {"uv": [0.032, 0.032, 15.968, 15.968], "texture": "#texture"},
-				"south": {"uv": [0.032, 0.032, 2.968, 15.968], "texture": "#texture"},
-				"west": {"uv": [0.032, 0.032, 15.968, 15.968], "texture": "#texture"},
-				"up": {"uv": [0.032, 0.032, 2.968, 15.968], "texture": "#texture_up", "cullface": "up"},
-				"down": {"uv": [0.032, 0.032, 2.968, 15.968], "texture": "#texture_up", "cullface": "down"}
-			}
-		},
-		{
-			"from": [13, 0, 0],
-			"to": [16, 16, 16],
-			"faces": {
-				"north": {"uv": [0.032, 0.032, 2.968, 15.968], "texture": "#texture"},
-				"east": {"uv": [0.032, 0.032, 15.968, 15.968], "texture": "#texture"},
-				"south": {"uv": [13.032, 0.032, 15.968, 15.968], "texture": "#texture"},
-				"west": {"uv": [0.032, 0.032, 15.968, 15.968], "texture": "#texture"},
-				"up": {"uv": [13.032, 0.032, 15.968, 15.968], "texture": "#texture_up", "cullface": "up"},
-				"down": {"uv": [13.032, 0.032, 15.968, 15.968], "texture": "#texture_up", "cullface": "down"}
-			}
-		},
-		{
-			"from": [3, 0, 13],
-			"to": [13, 16, 16],
-			"faces": {
-				"north": {"uv": [3.032, 0.032, 12.968, 15.968], "texture": "#texture"},
-				"south": {"uv": [3.032, 0.032, 12.968, 15.968], "texture": "#texture"},
-				"up": {"uv": [3.032, 13.032, 12.968, 15.968], "texture": "#texture_up", "cullface": "up"},
-				"down": {"uv": [3.032, 0.032, 12.968, 2.968], "texture": "#texture_up", "cullface": "down"}
-			}
-		},
-		{
-			"from": [3, 0, 0],
-			"to": [13, 16, 3],
-			"faces": {
-				"north": {"uv": [3.032, 0.032, 12.968, 15.968], "texture": "#texture"},
-				"south": {"uv": [3.032, 0.032, 12.968, 15.968], "texture": "#texture"},
-				"up": {"uv": [3.032, 0.032, 12.968, 2.968], "texture": "#texture_up", "cullface": "up"},
-				"down": {"uv": [3.032, 13.032, 12.968, 15.968], "texture": "#texture_up", "cullface": "down"}
-			}
-		}
-	],
-	"display": {
-		"thirdperson_righthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"thirdperson_lefthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"firstperson_righthand": {
-			"rotation": [0, 45, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"firstperson_lefthand": {
-			"rotation": [0, 225, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"ground": {
-			"translation": [0, 3, 0],
-			"scale": [0.25, 0.25, 0.25]
-		},
-		"gui": {
-			"rotation": [30, 225, 0],
-			"scale": [0.625, 0.625, 0.625]
-		},
-		"fixed": {
-			"scale": [0.5, 0.5, 0.5]
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/model/block/template_wall_column.json b/src/main/resources/assets/architecture_extensions/templates/model/block/template_wall_column.json
deleted file mode 100644
index 0130c50..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/model/block/template_wall_column.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
-	"credit": "Made with Blockbench",
-	"parent": "block/block",
-	"textures": {
-		"particle": "#texture_side"
-	},
-	"elements": [
-		{
-			"from": [2, 0, 0],
-			"to": [14, 16, 4],
-			"faces": {
-				"north": {"uv": [2, 0, 14, 16], "texture": "#texture_side", "cullface": "north"},
-				"east": {"uv": [12, 0, 16, 16], "texture": "#texture_side"},
-				"south": {"uv": [2, 0, 14, 16], "texture": "#texture_side"},
-				"west": {"uv": [0, 0, 4, 16], "texture": "#texture_side"},
-				"up": {"uv": [2, 0, 14, 4], "texture": "#texture_up", "cullface": "up"},
-				"down": {"uv": [2, 0, 14, 4], "texture": "#texture_down", "cullface": "down"}
-			}
-		}
-	],
-	"display": {
-		"gui": {
-			"rotation": [30, 225, 0],
-			"translation": [-2.5, 0, 0],
-			"scale": [0.625, 0.625, 0.625]
-		},
-		"fixed": {
-			"rotation": [0, -180, 0],
-			"translation": [0, 0, -8]
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/model/block/template_wall_column_cap.json b/src/main/resources/assets/architecture_extensions/templates/model/block/template_wall_column_cap.json
deleted file mode 100644
index 295da5a..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/model/block/template_wall_column_cap.json
+++ /dev/null
@@ -1,54 +0,0 @@
-{
-	"credit": "Made with Blockbench",
-	"parent": "block/block",
-	"textures": {
-		"particle": "#texture_side"
-	},
-	"elements": [
-		{
-			"from": [2, 0, 0],
-			"to": [14, 12, 4],
-			"faces": {
-				"north": {"uv": [2, 4, 14, 16], "texture": "#texture_side", "cullface": "north"},
-				"east": {"uv": [12, 4, 16, 16], "texture": "#texture_side"},
-				"south": {"uv": [2, 4, 14, 16], "texture": "#texture_side"},
-				"west": {"uv": [0, 4, 4, 16], "texture": "#texture_side"},
-				"down": {"uv": [2, 0, 14, 4], "texture": "#texture_down", "cullface": "down"}
-			}
-		},
-		{
-			"from": [1, 12, 0],
-			"to": [15, 14, 5],
-			"faces": {
-				"north": {"uv": [1, 2, 15, 4], "texture": "#texture_side", "cullface": "north"},
-				"east": {"uv": [11, 2, 16, 4], "texture": "#texture_side"},
-				"south": {"uv": [1, 2, 15, 4], "texture": "#texture_side"},
-				"west": {"uv": [0, 2, 5, 4], "texture": "#texture_side"},
-				"down": {"uv": [1, 0, 15, 5], "texture": "#texture_down"}
-			}
-		},
-		{
-			"from": [0, 14, 0],
-			"to": [16, 16, 6],
-			"faces": {
-				"north": {"uv": [0, 0, 16, 2], "texture": "#texture_side", "cullface": "north"},
-				"east": {"uv": [10, 0, 16, 2], "texture": "#texture_side", "cullface": "east"},
-				"south": {"uv": [0, 0, 16, 2], "texture": "#texture_side"},
-				"west": {"uv": [0, 0, 6, 2], "texture": "#texture_side", "cullface": "west"},
-				"up": {"uv": [0, 0, 16, 6], "texture": "#texture_up"},
-				"down": {"uv": [0, 0, 16, 6], "texture": "#texture_down"}
-			}
-		}
-	],
-	"display": {
-		"gui": {
-			"rotation": [30, 225, 0],
-			"translation": [-2.5, 0, 0],
-			"scale": [0.625, 0.625, 0.625]
-		},
-		"fixed": {
-			"rotation": [0, -180, 0],
-			"translation": [0, 0, -8]
-		}
-	}
-}
diff --git a/src/main/resources/assets/architecture_extensions/templates/model/block/template_wall_post.json b/src/main/resources/assets/architecture_extensions/templates/model/block/template_wall_post.json
deleted file mode 100644
index ed0f595..0000000
--- a/src/main/resources/assets/architecture_extensions/templates/model/block/template_wall_post.json
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-	"parent": "minecraft:block/template_wall_post",
-	"textures": {
-		"wall": "#texture"
-	},
-	"display": {
-		"thirdperson_righthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"thirdperson_lefthand": {
-			"rotation": [75, 45, 0],
-			"translation": [0, 2.5, 0],
-			"scale": [0.375, 0.375, 0.375]
-		},
-		"firstperson_righthand": {
-			"rotation": [0, 45, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"firstperson_lefthand": {
-			"rotation": [0, 225, 0],
-			"scale": [0.4, 0.4, 0.4]
-		},
-		"ground": {
-			"translation": [0, 3, 0],
-			"scale": [0.25, 0.25, 0.25]
-		},
-		"gui": {
-			"rotation": [30, 225, 0],
-			"scale": [0.625, 0.625, 0.625]
-		},
-		"fixed": {
-			"scale": [0.5, 0.5, 0.5]
-		}
-	}
-}
diff --git a/src/main/resources/assets/minecraft/atlases/blocks.json b/src/main/resources/assets/minecraft/atlases/blocks.json
deleted file mode 100644
index 8ca584b..0000000
--- a/src/main/resources/assets/minecraft/atlases/blocks.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-	"sources": [
-		{
-			"type": "single",
-			"resource": "minecraft:entity/end_portal"
-		}
-	]
-}
diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json
new file mode 100644
index 0000000..f612a4c
--- /dev/null
+++ b/src/main/resources/fabric.mod.json
@@ -0,0 +1,31 @@
+{
+	"schemaVersion": 1,
+	"id": "arch_ex",
+	"version": "${version}",
+	"name": "Architecture Extensions",
+	"description": "Make more detailed builds with all kinds of new building blocks and shapes.",
+	"contributors": [
+		"woodiertexas",
+		"maximum",
+		"Falkreon",
+		"Crackers0106",
+		"Carter",
+		"Azagwen"
+	],
+	"contact": {
+		"homepage": "https://modrinth.com/mod/arch-ex",
+		"issues": "https://github.com/DebuggyTeam/architecture-extensions/issues",
+		"sources": "https://github.com/DebuggyTeam/architecture-extensions"
+	},
+	"license": "MIT",
+	"icon": "assets/architecture_extensions/icon.png",
+	"environment": "*",
+	"entrypoints": {},
+	"mixins": [],
+	"depends": {
+		"fabricloader": ">=0.16.9",
+		"minecraft": ["1.20", "1.20.1"],
+		"java": ">=17",
+		"fabric-api": "*"
+	}
+}
diff --git a/src/main/resources/staticdata/architecture_extensions/debuggy_block.json b/src/main/resources/staticdata/architecture_extensions/debuggy_block.json
deleted file mode 100644
index b371815..0000000
--- a/src/main/resources/staticdata/architecture_extensions/debuggy_block.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-	"name": "debuggy_block",
-	"base_block": "architecture_extensions:debuggy_block",
-	"textures": "minecraft:block/debug",
-	"recipes": "stonecutting",
-	"map_color": "sand",
-	"types_to_generate": [ "#stone" ]
-}