From a7ff78e141919cecb44bd3e2fa28ae39aef1af15 Mon Sep 17 00:00:00 2001
From: Sollace <sollacea@gmail.com>
Date: Mon, 4 Dec 2023 20:46:45 +0000
Subject: [PATCH] Added the stable doors, crystal door, and cloud door

---
 .../unicopia/block/CrystalDoorBlock.java      |  64 +++++++++
 .../unicopia/block/StableDoorBlock.java       |  10 +-
 .../unicopia/block/UBlocks.java               |   6 +
 .../unicopia/block/UWoodTypes.java            |  17 ++-
 .../unicopia/block/cloud/CloudDoorBlock.java  |  87 ++++++++++++
 .../block/cloud/CompactedCloudBlock.java      |   2 +-
 .../{library_door.json => cloud_door.json}    | 128 +++++++++---------
 .../unicopia/blockstates/crystal_door.json    |  68 ++++++++++
 .../blockstates/dark_oak_stable_door.json     |  68 ++++++++++
 .../{bakery_door.json => stable_door.json}    | 128 +++++++++---------
 .../models/block/door/bakery_bottom.json      |   7 -
 .../models/block/door/bakery_bottom_rh.json   |   7 -
 .../models/block/door/bakery_top.json         |   7 -
 .../models/block/door/bakery_top_rh.json      |   7 -
 .../models/block/door/cloud_bottom.json       |   7 +
 .../models/block/door/cloud_bottom_rh.json    |   7 +
 .../unicopia/models/block/door/cloud_top.json |   7 +
 .../models/block/door/cloud_top_rh.json       |   7 +
 .../models/block/door/crystal_bottom.json     |   7 +
 .../models/block/door/crystal_bottom_rh.json  |   7 +
 .../models/block/door/crystal_top.json        |   7 +
 .../models/block/door/crystal_top_rh.json     |   7 +
 .../block/door/dark_oak_stable_bottom.json    |   7 +
 .../block/door/dark_oak_stable_bottom_rh.json |   7 +
 .../block/door/dark_oak_stable_top.json       |   7 +
 .../block/door/dark_oak_stable_top_rh.json    |   7 +
 .../models/block/door/diamond_bottom.json     |   7 -
 .../models/block/door/diamond_bottom_rh.json  |   7 -
 .../models/block/door/diamond_top.json        |   7 -
 .../models/block/door/diamond_top_rh.json     |   7 -
 .../models/block/door/library_bottom.json     |   7 -
 .../models/block/door/library_bottom_rh.json  |   7 -
 .../models/block/door/library_top.json        |   7 -
 .../models/block/door/library_top_rh.json     |   7 -
 .../models/block/door/mist_bottom.json        |   7 -
 .../models/block/door/mist_bottom_rh.json     |   7 -
 .../unicopia/models/block/door/mist_top.json  |   7 -
 .../models/block/door/mist_top_rh.json        |   7 -
 .../models/block/door/stable_bottom.json      |   7 +
 .../models/block/door/stable_bottom_rh.json   |   7 +
 .../models/block/door/stable_top.json         |   7 +
 .../models/block/door/stable_top_rh.json      |   7 +
 .../unicopia/models/item/cloud_door.json      |   6 +
 .../unicopia/models/item/crystal_door.json    |   6 +
 .../models/item/dark_oak_stable_door.json     |   6 +
 .../unicopia/models/item/stable_door.json     |   6 +
 .../textures/block/cloud_door_lower.png       | Bin 0 -> 6616 bytes
 .../textures/block/cloud_door_upper.png       | Bin 0 -> 6743 bytes
 .../textures/block/crystal_door_lower.png     | Bin 0 -> 537 bytes
 .../textures/block/crystal_door_upper.png     | Bin 0 -> 886 bytes
 .../block/crystal_door_upper.png.mcmeta       |  11 ++
 .../block/dark_oak_stable_door_lower.png      | Bin 0 -> 610 bytes
 .../block/dark_oak_stable_door_upper.png      | Bin 0 -> 631 bytes
 .../textures/block/stable_door_lower.png      | Bin 0 -> 590 bytes
 .../textures/block/stable_door_upper.png      | Bin 0 -> 502 bytes
 .../unicopia/textures/item/cloud_door.png     | Bin 0 -> 245 bytes
 .../unicopia/textures/item/crystal_door.png   | Bin 0 -> 219 bytes
 .../textures/item/dark_oak_stable_door.png    | Bin 0 -> 218 bytes
 .../unicopia/textures/item/stable_door.png    | Bin 0 -> 185 bytes
 .../loot_tables/blocks/cloud_door.json        |  29 ++++
 .../blocks/compacted_cloud_planks.json        |  20 ---
 .../loot_tables/blocks/crystal_door.json      |  29 ++++
 .../blocks/darK_oak_stable_door.json          |  29 ++++
 ...compacted_cloud.json => etched_cloud.json} |   2 +-
 .../loot_tables/blocks/etched_cloud_slab.json |  41 ++++++
 ...d_bricks.json => etched_cloud_stairs.json} |   9 +-
 .../loot_tables/blocks/stable_door.json       |  29 ++++
 .../data/unicopia/recipes/crystal_door.json   |  16 +++
 .../recipes/dark_oak_stable_door.json         |  19 +++
 .../data/unicopia/recipes/stable_door.json    |  19 +++
 .../data/unicopia/tags/items/cloud_slabs.json |   2 +-
 .../data/unicopia/tags/items/clouds.json      |   3 +-
 .../tags/items/groups/changeling.json         |   1 +
 .../tags/items/groups/earth_pony.json         |   2 +
 .../unicopia/tags/items/groups/pegasus.json   |   1 +
 .../unicopia/tags/items/groups/unicorn.json   |  11 +-
 76 files changed, 823 insertions(+), 276 deletions(-)
 create mode 100644 src/main/java/com/minelittlepony/unicopia/block/CrystalDoorBlock.java
 create mode 100644 src/main/java/com/minelittlepony/unicopia/block/cloud/CloudDoorBlock.java
 rename src/main/resources/assets/unicopia/blockstates/{library_door.json => cloud_door.json} (50%)
 create mode 100644 src/main/resources/assets/unicopia/blockstates/crystal_door.json
 create mode 100644 src/main/resources/assets/unicopia/blockstates/dark_oak_stable_door.json
 rename src/main/resources/assets/unicopia/blockstates/{bakery_door.json => stable_door.json} (50%)
 delete mode 100644 src/main/resources/assets/unicopia/models/block/door/bakery_bottom.json
 delete mode 100644 src/main/resources/assets/unicopia/models/block/door/bakery_bottom_rh.json
 delete mode 100644 src/main/resources/assets/unicopia/models/block/door/bakery_top.json
 delete mode 100644 src/main/resources/assets/unicopia/models/block/door/bakery_top_rh.json
 create mode 100644 src/main/resources/assets/unicopia/models/block/door/cloud_bottom.json
 create mode 100644 src/main/resources/assets/unicopia/models/block/door/cloud_bottom_rh.json
 create mode 100644 src/main/resources/assets/unicopia/models/block/door/cloud_top.json
 create mode 100644 src/main/resources/assets/unicopia/models/block/door/cloud_top_rh.json
 create mode 100644 src/main/resources/assets/unicopia/models/block/door/crystal_bottom.json
 create mode 100644 src/main/resources/assets/unicopia/models/block/door/crystal_bottom_rh.json
 create mode 100644 src/main/resources/assets/unicopia/models/block/door/crystal_top.json
 create mode 100644 src/main/resources/assets/unicopia/models/block/door/crystal_top_rh.json
 create mode 100644 src/main/resources/assets/unicopia/models/block/door/dark_oak_stable_bottom.json
 create mode 100644 src/main/resources/assets/unicopia/models/block/door/dark_oak_stable_bottom_rh.json
 create mode 100644 src/main/resources/assets/unicopia/models/block/door/dark_oak_stable_top.json
 create mode 100644 src/main/resources/assets/unicopia/models/block/door/dark_oak_stable_top_rh.json
 delete mode 100644 src/main/resources/assets/unicopia/models/block/door/diamond_bottom.json
 delete mode 100644 src/main/resources/assets/unicopia/models/block/door/diamond_bottom_rh.json
 delete mode 100644 src/main/resources/assets/unicopia/models/block/door/diamond_top.json
 delete mode 100644 src/main/resources/assets/unicopia/models/block/door/diamond_top_rh.json
 delete mode 100644 src/main/resources/assets/unicopia/models/block/door/library_bottom.json
 delete mode 100644 src/main/resources/assets/unicopia/models/block/door/library_bottom_rh.json
 delete mode 100644 src/main/resources/assets/unicopia/models/block/door/library_top.json
 delete mode 100644 src/main/resources/assets/unicopia/models/block/door/library_top_rh.json
 delete mode 100644 src/main/resources/assets/unicopia/models/block/door/mist_bottom.json
 delete mode 100644 src/main/resources/assets/unicopia/models/block/door/mist_bottom_rh.json
 delete mode 100644 src/main/resources/assets/unicopia/models/block/door/mist_top.json
 delete mode 100644 src/main/resources/assets/unicopia/models/block/door/mist_top_rh.json
 create mode 100644 src/main/resources/assets/unicopia/models/block/door/stable_bottom.json
 create mode 100644 src/main/resources/assets/unicopia/models/block/door/stable_bottom_rh.json
 create mode 100644 src/main/resources/assets/unicopia/models/block/door/stable_top.json
 create mode 100644 src/main/resources/assets/unicopia/models/block/door/stable_top_rh.json
 create mode 100644 src/main/resources/assets/unicopia/models/item/cloud_door.json
 create mode 100644 src/main/resources/assets/unicopia/models/item/crystal_door.json
 create mode 100644 src/main/resources/assets/unicopia/models/item/dark_oak_stable_door.json
 create mode 100644 src/main/resources/assets/unicopia/models/item/stable_door.json
 create mode 100644 src/main/resources/assets/unicopia/textures/block/cloud_door_lower.png
 create mode 100644 src/main/resources/assets/unicopia/textures/block/cloud_door_upper.png
 create mode 100644 src/main/resources/assets/unicopia/textures/block/crystal_door_lower.png
 create mode 100644 src/main/resources/assets/unicopia/textures/block/crystal_door_upper.png
 create mode 100644 src/main/resources/assets/unicopia/textures/block/crystal_door_upper.png.mcmeta
 create mode 100644 src/main/resources/assets/unicopia/textures/block/dark_oak_stable_door_lower.png
 create mode 100644 src/main/resources/assets/unicopia/textures/block/dark_oak_stable_door_upper.png
 create mode 100644 src/main/resources/assets/unicopia/textures/block/stable_door_lower.png
 create mode 100644 src/main/resources/assets/unicopia/textures/block/stable_door_upper.png
 create mode 100644 src/main/resources/assets/unicopia/textures/item/cloud_door.png
 create mode 100644 src/main/resources/assets/unicopia/textures/item/crystal_door.png
 create mode 100644 src/main/resources/assets/unicopia/textures/item/dark_oak_stable_door.png
 create mode 100644 src/main/resources/assets/unicopia/textures/item/stable_door.png
 create mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/cloud_door.json
 delete mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/compacted_cloud_planks.json
 create mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/crystal_door.json
 create mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/darK_oak_stable_door.json
 rename src/main/resources/data/unicopia/loot_tables/blocks/{compacted_cloud.json => etched_cloud.json} (94%)
 create mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/etched_cloud_slab.json
 rename src/main/resources/data/unicopia/loot_tables/blocks/{compacted_cloud_bricks.json => etched_cloud_stairs.json} (58%)
 create mode 100644 src/main/resources/data/unicopia/loot_tables/blocks/stable_door.json
 create mode 100644 src/main/resources/data/unicopia/recipes/crystal_door.json
 create mode 100644 src/main/resources/data/unicopia/recipes/dark_oak_stable_door.json
 create mode 100644 src/main/resources/data/unicopia/recipes/stable_door.json

diff --git a/src/main/java/com/minelittlepony/unicopia/block/CrystalDoorBlock.java b/src/main/java/com/minelittlepony/unicopia/block/CrystalDoorBlock.java
new file mode 100644
index 00000000..c7690aa1
--- /dev/null
+++ b/src/main/java/com/minelittlepony/unicopia/block/CrystalDoorBlock.java
@@ -0,0 +1,64 @@
+package com.minelittlepony.unicopia.block;
+
+import org.jetbrains.annotations.Nullable;
+
+import com.minelittlepony.unicopia.EquineContext;
+import com.minelittlepony.unicopia.Race;
+import com.minelittlepony.unicopia.USounds;
+import com.minelittlepony.unicopia.item.UItems;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.BlockSetType;
+import net.minecraft.block.BlockState;
+import net.minecraft.block.DoorBlock;
+import net.minecraft.block.enums.DoubleBlockHalf;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.player.PlayerEntity;
+import net.minecraft.sound.SoundCategory;
+import net.minecraft.util.ActionResult;
+import net.minecraft.util.Hand;
+import net.minecraft.util.hit.BlockHitResult;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.util.math.Direction;
+import net.minecraft.world.World;
+import net.minecraft.world.event.GameEvent;
+
+public class CrystalDoorBlock extends DoorBlock {
+
+    public CrystalDoorBlock(Settings settings, BlockSetType blockSet) {
+        super(settings, blockSet);
+    }
+
+    @Override
+    public void neighborUpdate(BlockState state, World world, BlockPos pos, Block sourceBlock, BlockPos sourcePos, boolean notify) {
+        boolean powered = world.isReceivingRedstonePower(pos) || world.isReceivingRedstonePower(pos.offset(state.get(HALF) == DoubleBlockHalf.LOWER ? Direction.UP : Direction.DOWN));
+        if (!getDefaultState().isOf(sourceBlock) && powered != state.get(POWERED)) {
+            if (powered) {
+                state = state.cycle(OPEN);
+                playOpenCloseSound(null, world, pos, state.get(OPEN));
+                world.emitGameEvent(null, state.get(OPEN) ? GameEvent.BLOCK_OPEN : GameEvent.BLOCK_CLOSE, pos);
+            }
+
+            world.setBlockState(pos, state.with(POWERED, powered), Block.NOTIFY_LISTENERS);
+        }
+    }
+
+    @Override
+    public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) {
+        if (!EquineContext.of(player).getCompositeRace().any(Race::canCast)) {
+
+            if (!player.getStackInHand(hand).isOf(UItems.MEADOWBROOKS_STAFF)) {
+                playOpenCloseSound(player, world, pos, false);
+                return ActionResult.FAIL;
+            } else {
+                world.playSound(player, pos, USounds.ENTITY_CRYSTAL_SHARDS_AMBIENT, SoundCategory.BLOCKS, 1, world.getRandom().nextFloat() * 0.1F + 0.9F);
+            }
+        }
+        return super.onUse(state, world, pos, player, hand, hit);
+    }
+
+    private void playOpenCloseSound(@Nullable Entity entity, World world, BlockPos pos, boolean open) {
+        world.playSound(entity, pos, open ? getBlockSetType().doorOpen() : getBlockSetType().doorClose(), SoundCategory.BLOCKS, 1, world.getRandom().nextFloat() * 0.1f + 0.9f);
+    }
+
+}
diff --git a/src/main/java/com/minelittlepony/unicopia/block/StableDoorBlock.java b/src/main/java/com/minelittlepony/unicopia/block/StableDoorBlock.java
index 20a4363c..f170da30 100644
--- a/src/main/java/com/minelittlepony/unicopia/block/StableDoorBlock.java
+++ b/src/main/java/com/minelittlepony/unicopia/block/StableDoorBlock.java
@@ -11,8 +11,8 @@ import net.minecraft.world.WorldAccess;
 
 public class StableDoorBlock extends DoorBlock {
 
-    public StableDoorBlock(Settings settings) {
-        super(settings, BlockSetType.OAK);
+    public StableDoorBlock(Settings settings, BlockSetType blockSet) {
+        super(settings, blockSet);
     }
 
     @Override
@@ -21,6 +21,12 @@ public class StableDoorBlock extends DoorBlock {
 
         if (direction.getAxis() == Direction.Axis.Y && half == DoubleBlockHalf.LOWER == (direction == Direction.UP)) {
             if (neighborState.isOf(this) && neighborState.get(HALF) != half) {
+                state = state
+                        .with(FACING, neighborState.get(FACING))
+                        .with(HINGE, neighborState.get(HINGE));
+                if (half ==  DoubleBlockHalf.UPPER && direction == Direction.DOWN && !state.get(POWERED)) {
+                    state = state.with(OPEN, neighborState.get(OPEN));
+                }
                 return state;
             }
 
diff --git a/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java b/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java
index 3ee4872e..b74d0566 100644
--- a/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java
+++ b/src/main/java/com/minelittlepony/unicopia/block/UBlocks.java
@@ -15,6 +15,7 @@ import com.minelittlepony.unicopia.block.cloud.PoreousCloudStairsBlock;
 import com.minelittlepony.unicopia.block.cloud.ShapingBenchBlock;
 import com.minelittlepony.unicopia.block.cloud.CloudBedBlock;
 import com.minelittlepony.unicopia.block.cloud.CloudChestBlock;
+import com.minelittlepony.unicopia.block.cloud.CloudDoorBlock;
 import com.minelittlepony.unicopia.block.cloud.CloudLike;
 import com.minelittlepony.unicopia.block.cloud.SoggyCloudBlock;
 import com.minelittlepony.unicopia.block.cloud.SoggyCloudSlabBlock;
@@ -200,6 +201,11 @@ public interface UBlocks {
     Block SCALLOP_SHELL = register("scallop_shell", new ShellsBlock(Settings.create().mapColor(MapColor.DULL_PINK).breakInstantly().nonOpaque()));
     Block TURRET_SHELL = register("turret_shell", new ShellsBlock(Settings.create().mapColor(MapColor.DULL_PINK).breakInstantly().nonOpaque()));
 
+    Block STABLE_DOOR = register("stable_door", new StableDoorBlock(Settings.copy(Blocks.OAK_DOOR), BlockSetType.OAK), ItemGroups.FUNCTIONAL);
+    Block DARK_OAK_DOOR = register("dark_oak_stable_door", new StableDoorBlock(Settings.copy(Blocks.OAK_DOOR), BlockSetType.OAK), ItemGroups.FUNCTIONAL);
+    Block CRYSTAL_DOOR = register("crystal_door", new CrystalDoorBlock(Settings.copy(Blocks.IRON_DOOR), UWoodTypes.CRYSTAL), ItemGroups.FUNCTIONAL);
+    Block CLOUD_DOOR = register("cloud_door", new CloudDoorBlock(Settings.copy(CLOUD), CLOUD.getDefaultState(), UWoodTypes.CLOUD), ItemGroups.FUNCTIONAL);
+
     private static <T extends Block> T register(String name, T item) {
         return register(Unicopia.id(name), item);
     }
diff --git a/src/main/java/com/minelittlepony/unicopia/block/UWoodTypes.java b/src/main/java/com/minelittlepony/unicopia/block/UWoodTypes.java
index 5f090ce9..0a44586e 100644
--- a/src/main/java/com/minelittlepony/unicopia/block/UWoodTypes.java
+++ b/src/main/java/com/minelittlepony/unicopia/block/UWoodTypes.java
@@ -1,25 +1,34 @@
 package com.minelittlepony.unicopia.block;
 
+import com.minelittlepony.unicopia.USounds;
 import com.minelittlepony.unicopia.Unicopia;
 import com.terraformersmc.terraform.boat.api.TerraformBoatType;
 import com.terraformersmc.terraform.boat.api.TerraformBoatTypeRegistry;
 
 import net.fabricmc.fabric.api.object.builder.v1.block.type.BlockSetTypeBuilder;
 import net.fabricmc.fabric.api.object.builder.v1.block.type.WoodTypeBuilder;
+import net.minecraft.block.BlockSetType;
 import net.minecraft.block.WoodType;
 import net.minecraft.registry.RegistryKey;
+import net.minecraft.sound.BlockSoundGroup;
 import net.minecraft.util.Identifier;
 
 public interface UWoodTypes {
     WoodType PALM = register("palm");
     RegistryKey<TerraformBoatType> PALM_BOAT_TYPE = TerraformBoatTypeRegistry.createKey(Unicopia.id("palm"));
 
+    BlockSetType CLOUD = new BlockSetTypeBuilder()
+            .soundGroup(BlockSoundGroup.WOOL)
+            .doorCloseSound(USounds.Vanilla.BLOCK_WOOL_HIT)
+            .doorOpenSound(USounds.Vanilla.BLOCK_WOOL_BREAK)
+            .register(Unicopia.id("cloud"));
+    BlockSetType CRYSTAL = BlockSetTypeBuilder.copyOf(BlockSetType.IRON)
+            .soundGroup(BlockSoundGroup.AMETHYST_BLOCK)
+            .openableByHand(true)
+            .register(Unicopia.id("crystal"));
+
     static WoodType register(String name) {
         Identifier id = Unicopia.id(name);
         return new WoodTypeBuilder().register(id, new BlockSetTypeBuilder().register(id));
     }
-
-
-
-
 }
diff --git a/src/main/java/com/minelittlepony/unicopia/block/cloud/CloudDoorBlock.java b/src/main/java/com/minelittlepony/unicopia/block/cloud/CloudDoorBlock.java
new file mode 100644
index 00000000..be730174
--- /dev/null
+++ b/src/main/java/com/minelittlepony/unicopia/block/cloud/CloudDoorBlock.java
@@ -0,0 +1,87 @@
+package com.minelittlepony.unicopia.block.cloud;
+
+import org.jetbrains.annotations.Nullable;
+
+import com.minelittlepony.unicopia.EquineContext;
+import com.minelittlepony.unicopia.Race;
+
+import net.minecraft.block.BlockSetType;
+import net.minecraft.block.BlockState;
+import net.minecraft.block.DoorBlock;
+import net.minecraft.block.ShapeContext;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.player.PlayerEntity;
+import net.minecraft.item.ItemPlacementContext;
+import net.minecraft.util.ActionResult;
+import net.minecraft.util.Hand;
+import net.minecraft.util.hit.BlockHitResult;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.util.shape.VoxelShape;
+import net.minecraft.util.shape.VoxelShapes;
+import net.minecraft.world.BlockView;
+import net.minecraft.world.World;
+
+public class CloudDoorBlock extends DoorBlock implements CloudLike {
+    private final BlockState baseState;
+    private final CloudBlock baseBlock;
+
+    public CloudDoorBlock(Settings settings, BlockState baseState, BlockSetType blockSet) {
+        super(settings, blockSet);
+        this.baseState = baseState;
+        this.baseBlock = (CloudBlock)baseState.getBlock();
+    }
+
+
+    @Override
+    public final VoxelShape getOutlineShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) {
+        if (canPassThrough(state, world, pos, EquineContext.of(context))) {
+            return VoxelShapes.empty();
+        }
+        return super.getOutlineShape(state, world, pos, context);
+    }
+
+    protected boolean canPassThrough(BlockState state, BlockView world, BlockPos pos, EquineContext context) {
+        return context.getCompositeRace().any(Race::canUseEarth);
+    }
+
+    @Override
+    @Deprecated
+    public final VoxelShape getCullingShape(BlockState state, BlockView world, BlockPos pos) {
+        return super.getOutlineShape(state, world, pos, ShapeContext.absent());
+    }
+
+    @Override
+    @Deprecated
+    public VoxelShape getCollisionShape(BlockState state, BlockView world, BlockPos pos, ShapeContext context) {
+        return this.collidable ? state.getOutlineShape(world, pos, context) : VoxelShapes.empty();
+    }
+
+    @Override
+    @Nullable
+    public final BlockState getPlacementState(ItemPlacementContext context) {
+        if (!baseBlock.canInteract(baseState, context.getWorld(), context.getBlockPos(), EquineContext.of(context))) {
+            return null;
+        }
+        return super.getPlacementState(context);
+    }
+
+    @Override
+    public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit) {
+        if (!baseBlock.canInteract(baseState, world, pos, EquineContext.of(player))) {
+            return ActionResult.PASS;
+        }
+        return super.onUse(state, world, pos, player, hand, hit);
+    }
+
+    @Deprecated
+    @Override
+    public void onEntityCollision(BlockState state, World world, BlockPos pos, Entity entity) {
+        baseState.onEntityCollision(world, pos, entity);
+
+        EquineContext context = EquineContext.of(entity);
+
+        if (!baseBlock.canInteract(baseState, world, pos, context)) {
+            entity.setVelocity(entity.getVelocity().multiply(0.5F, 1, 0.5F));
+        }
+    }
+}
diff --git a/src/main/java/com/minelittlepony/unicopia/block/cloud/CompactedCloudBlock.java b/src/main/java/com/minelittlepony/unicopia/block/cloud/CompactedCloudBlock.java
index e27f7ee1..a9e6f727 100644
--- a/src/main/java/com/minelittlepony/unicopia/block/cloud/CompactedCloudBlock.java
+++ b/src/main/java/com/minelittlepony/unicopia/block/cloud/CompactedCloudBlock.java
@@ -48,7 +48,7 @@ public class CompactedCloudBlock extends CloudBlock {
     private final BlockState baseState;
 
     public CompactedCloudBlock(BlockState baseState) {
-        super(Settings.copy(baseState.getBlock()), true);
+        super(Settings.copy(baseState.getBlock()).dropsLike(baseState.getBlock()), true);
         this.baseState = baseState;
         PROPERTIES.forEach(property -> {
             setDefaultState(getDefaultState().with(property, true));
diff --git a/src/main/resources/assets/unicopia/blockstates/library_door.json b/src/main/resources/assets/unicopia/blockstates/cloud_door.json
similarity index 50%
rename from src/main/resources/assets/unicopia/blockstates/library_door.json
rename to src/main/resources/assets/unicopia/blockstates/cloud_door.json
index aec9f468..e837d7f0 100644
--- a/src/main/resources/assets/unicopia/blockstates/library_door.json
+++ b/src/main/resources/assets/unicopia/blockstates/cloud_door.json
@@ -1,68 +1,68 @@
 {
     "variants": {
-        "facing=east,half=lower,hinge=left,open=false,powered=false":  { "model": "unicopia:door/library_bottom" },
-        "facing=south,half=lower,hinge=left,open=false,powered=false": { "model": "unicopia:door/library_bottom", "y": 90 },
-        "facing=west,half=lower,hinge=left,open=false,powered=false":  { "model": "unicopia:door/library_bottom", "y": 180 },
-        "facing=north,half=lower,hinge=left,open=false,powered=false": { "model": "unicopia:door/library_bottom", "y": 270 },
-        "facing=east,half=lower,hinge=right,open=false,powered=false":  { "model": "unicopia:door/library_bottom_rh" },
-        "facing=south,half=lower,hinge=right,open=false,powered=false": { "model": "unicopia:door/library_bottom_rh", "y": 90 },
-        "facing=west,half=lower,hinge=right,open=false,powered=false":  { "model": "unicopia:door/library_bottom_rh", "y": 180 },
-        "facing=north,half=lower,hinge=right,open=false,powered=false": { "model": "unicopia:door/library_bottom_rh", "y": 270 },
-        "facing=east,half=lower,hinge=left,open=true,powered=false":  { "model": "unicopia:door/library_bottom_rh", "y": 90 },
-        "facing=south,half=lower,hinge=left,open=true,powered=false": { "model": "unicopia:door/library_bottom_rh", "y": 180 },
-        "facing=west,half=lower,hinge=left,open=true,powered=false":  { "model": "unicopia:door/library_bottom_rh", "y": 270 },
-        "facing=north,half=lower,hinge=left,open=true,powered=false": { "model": "unicopia:door/library_bottom_rh" },
-        "facing=east,half=lower,hinge=right,open=true,powered=false":  { "model": "unicopia:door/library_bottom", "y": 270 },
-        "facing=south,half=lower,hinge=right,open=true,powered=false": { "model": "unicopia:door/library_bottom" },
-        "facing=west,half=lower,hinge=right,open=true,powered=false":  { "model": "unicopia:door/library_bottom", "y": 90 },
-        "facing=north,half=lower,hinge=right,open=true,powered=false": { "model": "unicopia:door/library_bottom", "y": 180 },
-        "facing=east,half=upper,hinge=left,open=false,powered=false":  { "model": "unicopia:door/library_top" },
-        "facing=south,half=upper,hinge=left,open=false,powered=false": { "model": "unicopia:door/library_top", "y": 90 },
-        "facing=west,half=upper,hinge=left,open=false,powered=false":  { "model": "unicopia:door/library_top", "y": 180 },
-        "facing=north,half=upper,hinge=left,open=false,powered=false": { "model": "unicopia:door/library_top", "y": 270 },
-        "facing=east,half=upper,hinge=right,open=false,powered=false":  { "model": "unicopia:door/library_top_rh" },
-        "facing=south,half=upper,hinge=right,open=false,powered=false": { "model": "unicopia:door/library_top_rh", "y": 90 },
-        "facing=west,half=upper,hinge=right,open=false,powered=false":  { "model": "unicopia:door/library_top_rh", "y": 180 },
-        "facing=north,half=upper,hinge=right,open=false,powered=false": { "model": "unicopia:door/library_top_rh", "y": 270 },
-        "facing=east,half=upper,hinge=left,open=true,powered=false":  { "model": "unicopia:door/library_top_rh", "y": 90 },
-        "facing=south,half=upper,hinge=left,open=true,powered=false": { "model": "unicopia:door/library_top_rh", "y": 180 },
-        "facing=west,half=upper,hinge=left,open=true,powered=false":  { "model": "unicopia:door/library_top_rh", "y": 270 },
-        "facing=north,half=upper,hinge=left,open=true,powered=false": { "model": "unicopia:door/library_top_rh" },
-        "facing=east,half=upper,hinge=right,open=true,powered=false":  { "model": "unicopia:door/library_top", "y": 270 },
-        "facing=south,half=upper,hinge=right,open=true,powered=false": { "model": "unicopia:door/library_top" },
-        "facing=west,half=upper,hinge=right,open=true,powered=false":  { "model": "unicopia:door/library_top", "y": 90 },
-        "facing=north,half=upper,hinge=right,open=true,powered=false": { "model": "unicopia:door/library_top", "y": 180 },
-        "facing=east,half=lower,hinge=left,open=false,powered=true":  { "model": "unicopia:door/library_bottom" },
-        "facing=south,half=lower,hinge=left,open=false,powered=true": { "model": "unicopia:door/library_bottom", "y": 90 },
-        "facing=west,half=lower,hinge=left,open=false,powered=true":  { "model": "unicopia:door/library_bottom", "y": 180 },
-        "facing=north,half=lower,hinge=left,open=false,powered=true": { "model": "unicopia:door/library_bottom", "y": 270 },
-        "facing=east,half=lower,hinge=right,open=false,powered=true":  { "model": "unicopia:door/library_bottom_rh" },
-        "facing=south,half=lower,hinge=right,open=false,powered=true": { "model": "unicopia:door/library_bottom_rh", "y": 90 },
-        "facing=west,half=lower,hinge=right,open=false,powered=true":  { "model": "unicopia:door/library_bottom_rh", "y": 180 },
-        "facing=north,half=lower,hinge=right,open=false,powered=true": { "model": "unicopia:door/library_bottom_rh", "y": 270 },
-        "facing=east,half=lower,hinge=left,open=true,powered=true":  { "model": "unicopia:door/library_bottom_rh", "y": 90 },
-        "facing=south,half=lower,hinge=left,open=true,powered=true": { "model": "unicopia:door/library_bottom_rh", "y": 180 },
-        "facing=west,half=lower,hinge=left,open=true,powered=true":  { "model": "unicopia:door/library_bottom_rh", "y": 270 },
-        "facing=north,half=lower,hinge=left,open=true,powered=true": { "model": "unicopia:door/library_bottom_rh" },
-        "facing=east,half=lower,hinge=right,open=true,powered=true":  { "model": "unicopia:door/library_bottom", "y": 270 },
-        "facing=south,half=lower,hinge=right,open=true,powered=true": { "model": "unicopia:door/library_bottom" },
-        "facing=west,half=lower,hinge=right,open=true,powered=true":  { "model": "unicopia:door/library_bottom", "y": 90 },
-        "facing=north,half=lower,hinge=right,open=true,powered=true": { "model": "unicopia:door/library_bottom", "y": 180 },
-        "facing=east,half=upper,hinge=left,open=false,powered=true":  { "model": "unicopia:door/library_top" },
-        "facing=south,half=upper,hinge=left,open=false,powered=true": { "model": "unicopia:door/library_top", "y": 90 },
-        "facing=west,half=upper,hinge=left,open=false,powered=true":  { "model": "unicopia:door/library_top", "y": 180 },
-        "facing=north,half=upper,hinge=left,open=false,powered=true": { "model": "unicopia:door/library_top", "y": 270 },
-        "facing=east,half=upper,hinge=right,open=false,powered=true":  { "model": "unicopia:door/library_top_rh" },
-        "facing=south,half=upper,hinge=right,open=false,powered=true": { "model": "unicopia:door/library_top_rh", "y": 90 },
-        "facing=west,half=upper,hinge=right,open=false,powered=true":  { "model": "unicopia:door/library_top_rh", "y": 180 },
-        "facing=north,half=upper,hinge=right,open=false,powered=true": { "model": "unicopia:door/library_top_rh", "y": 270 },
-        "facing=east,half=upper,hinge=left,open=true,powered=true":  { "model": "unicopia:door/library_top_rh", "y": 90 },
-        "facing=south,half=upper,hinge=left,open=true,powered=true": { "model": "unicopia:door/library_top_rh", "y": 180 },
-        "facing=west,half=upper,hinge=left,open=true,powered=true":  { "model": "unicopia:door/library_top_rh", "y": 270 },
-        "facing=north,half=upper,hinge=left,open=true,powered=true": { "model": "unicopia:door/library_top_rh" },
-        "facing=east,half=upper,hinge=right,open=true,powered=true":  { "model": "unicopia:door/library_top", "y": 270 },
-        "facing=south,half=upper,hinge=right,open=true,powered=true": { "model": "unicopia:door/library_top" },
-        "facing=west,half=upper,hinge=right,open=true,powered=true":  { "model": "unicopia:door/library_top", "y": 90 },
-        "facing=north,half=upper,hinge=right,open=true,powered=true": { "model": "unicopia:door/library_top", "y": 180 }
+        "facing=east,half=lower,hinge=left,open=false,powered=false":  { "model": "unicopia:block/door/cloud_bottom" },
+        "facing=south,half=lower,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/cloud_bottom", "y": 90 },
+        "facing=west,half=lower,hinge=left,open=false,powered=false":  { "model": "unicopia:block/door/cloud_bottom", "y": 180 },
+        "facing=north,half=lower,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/cloud_bottom", "y": 270 },
+        "facing=east,half=lower,hinge=right,open=false,powered=false":  { "model": "unicopia:block/door/cloud_bottom_rh" },
+        "facing=south,half=lower,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/cloud_bottom_rh", "y": 90 },
+        "facing=west,half=lower,hinge=right,open=false,powered=false":  { "model": "unicopia:block/door/cloud_bottom_rh", "y": 180 },
+        "facing=north,half=lower,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/cloud_bottom_rh", "y": 270 },
+        "facing=east,half=lower,hinge=left,open=true,powered=false":  { "model": "unicopia:block/door/cloud_bottom_rh", "y": 90 },
+        "facing=south,half=lower,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/cloud_bottom_rh", "y": 180 },
+        "facing=west,half=lower,hinge=left,open=true,powered=false":  { "model": "unicopia:block/door/cloud_bottom_rh", "y": 270 },
+        "facing=north,half=lower,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/cloud_bottom_rh" },
+        "facing=east,half=lower,hinge=right,open=true,powered=false":  { "model": "unicopia:block/door/cloud_bottom", "y": 270 },
+        "facing=south,half=lower,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/cloud_bottom" },
+        "facing=west,half=lower,hinge=right,open=true,powered=false":  { "model": "unicopia:block/door/cloud_bottom", "y": 90 },
+        "facing=north,half=lower,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/cloud_bottom", "y": 180 },
+        "facing=east,half=upper,hinge=left,open=false,powered=false":  { "model": "unicopia:block/door/cloud_top" },
+        "facing=south,half=upper,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/cloud_top", "y": 90 },
+        "facing=west,half=upper,hinge=left,open=false,powered=false":  { "model": "unicopia:block/door/cloud_top", "y": 180 },
+        "facing=north,half=upper,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/cloud_top", "y": 270 },
+        "facing=east,half=upper,hinge=right,open=false,powered=false":  { "model": "unicopia:block/door/cloud_top_rh" },
+        "facing=south,half=upper,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/cloud_top_rh", "y": 90 },
+        "facing=west,half=upper,hinge=right,open=false,powered=false":  { "model": "unicopia:block/door/cloud_top_rh", "y": 180 },
+        "facing=north,half=upper,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/cloud_top_rh", "y": 270 },
+        "facing=east,half=upper,hinge=left,open=true,powered=false":  { "model": "unicopia:block/door/cloud_top_rh", "y": 90 },
+        "facing=south,half=upper,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/cloud_top_rh", "y": 180 },
+        "facing=west,half=upper,hinge=left,open=true,powered=false":  { "model": "unicopia:block/door/cloud_top_rh", "y": 270 },
+        "facing=north,half=upper,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/cloud_top_rh" },
+        "facing=east,half=upper,hinge=right,open=true,powered=false":  { "model": "unicopia:block/door/cloud_top", "y": 270 },
+        "facing=south,half=upper,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/cloud_top" },
+        "facing=west,half=upper,hinge=right,open=true,powered=false":  { "model": "unicopia:block/door/cloud_top", "y": 90 },
+        "facing=north,half=upper,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/cloud_top", "y": 180 },
+        "facing=east,half=lower,hinge=left,open=false,powered=true":  { "model": "unicopia:block/door/cloud_bottom" },
+        "facing=south,half=lower,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/cloud_bottom", "y": 90 },
+        "facing=west,half=lower,hinge=left,open=false,powered=true":  { "model": "unicopia:block/door/cloud_bottom", "y": 180 },
+        "facing=north,half=lower,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/cloud_bottom", "y": 270 },
+        "facing=east,half=lower,hinge=right,open=false,powered=true":  { "model": "unicopia:block/door/cloud_bottom_rh" },
+        "facing=south,half=lower,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/cloud_bottom_rh", "y": 90 },
+        "facing=west,half=lower,hinge=right,open=false,powered=true":  { "model": "unicopia:block/door/cloud_bottom_rh", "y": 180 },
+        "facing=north,half=lower,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/cloud_bottom_rh", "y": 270 },
+        "facing=east,half=lower,hinge=left,open=true,powered=true":  { "model": "unicopia:block/door/cloud_bottom_rh", "y": 90 },
+        "facing=south,half=lower,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/cloud_bottom_rh", "y": 180 },
+        "facing=west,half=lower,hinge=left,open=true,powered=true":  { "model": "unicopia:block/door/cloud_bottom_rh", "y": 270 },
+        "facing=north,half=lower,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/cloud_bottom_rh" },
+        "facing=east,half=lower,hinge=right,open=true,powered=true":  { "model": "unicopia:block/door/cloud_bottom", "y": 270 },
+        "facing=south,half=lower,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/cloud_bottom" },
+        "facing=west,half=lower,hinge=right,open=true,powered=true":  { "model": "unicopia:block/door/cloud_bottom", "y": 90 },
+        "facing=north,half=lower,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/cloud_bottom", "y": 180 },
+        "facing=east,half=upper,hinge=left,open=false,powered=true":  { "model": "unicopia:block/door/cloud_top" },
+        "facing=south,half=upper,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/cloud_top", "y": 90 },
+        "facing=west,half=upper,hinge=left,open=false,powered=true":  { "model": "unicopia:block/door/cloud_top", "y": 180 },
+        "facing=north,half=upper,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/cloud_top", "y": 270 },
+        "facing=east,half=upper,hinge=right,open=false,powered=true":  { "model": "unicopia:block/door/cloud_top_rh" },
+        "facing=south,half=upper,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/cloud_top_rh", "y": 90 },
+        "facing=west,half=upper,hinge=right,open=false,powered=true":  { "model": "unicopia:block/door/cloud_top_rh", "y": 180 },
+        "facing=north,half=upper,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/cloud_top_rh", "y": 270 },
+        "facing=east,half=upper,hinge=left,open=true,powered=true":  { "model": "unicopia:block/door/cloud_top_rh", "y": 90 },
+        "facing=south,half=upper,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/cloud_top_rh", "y": 180 },
+        "facing=west,half=upper,hinge=left,open=true,powered=true":  { "model": "unicopia:block/door/cloud_top_rh", "y": 270 },
+        "facing=north,half=upper,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/cloud_top_rh" },
+        "facing=east,half=upper,hinge=right,open=true,powered=true":  { "model": "unicopia:block/door/cloud_top", "y": 270 },
+        "facing=south,half=upper,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/cloud_top" },
+        "facing=west,half=upper,hinge=right,open=true,powered=true":  { "model": "unicopia:block/door/cloud_top", "y": 90 },
+        "facing=north,half=upper,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/cloud_top", "y": 180 }
     }
 }
diff --git a/src/main/resources/assets/unicopia/blockstates/crystal_door.json b/src/main/resources/assets/unicopia/blockstates/crystal_door.json
new file mode 100644
index 00000000..15184fa7
--- /dev/null
+++ b/src/main/resources/assets/unicopia/blockstates/crystal_door.json
@@ -0,0 +1,68 @@
+{
+    "variants": {
+        "facing=east,half=lower,hinge=left,open=false,powered=false":  { "model": "unicopia:block/door/crystal_bottom" },
+        "facing=south,half=lower,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/crystal_bottom", "y": 90 },
+        "facing=west,half=lower,hinge=left,open=false,powered=false":  { "model": "unicopia:block/door/crystal_bottom", "y": 180 },
+        "facing=north,half=lower,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/crystal_bottom", "y": 270 },
+        "facing=east,half=lower,hinge=right,open=false,powered=false":  { "model": "unicopia:block/door/crystal_bottom_rh" },
+        "facing=south,half=lower,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/crystal_bottom_rh", "y": 90 },
+        "facing=west,half=lower,hinge=right,open=false,powered=false":  { "model": "unicopia:block/door/crystal_bottom_rh", "y": 180 },
+        "facing=north,half=lower,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/crystal_bottom_rh", "y": 270 },
+        "facing=east,half=lower,hinge=left,open=true,powered=false":  { "model": "unicopia:block/door/crystal_bottom_rh", "y": 90 },
+        "facing=south,half=lower,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/crystal_bottom_rh", "y": 180 },
+        "facing=west,half=lower,hinge=left,open=true,powered=false":  { "model": "unicopia:block/door/crystal_bottom_rh", "y": 270 },
+        "facing=north,half=lower,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/crystal_bottom_rh" },
+        "facing=east,half=lower,hinge=right,open=true,powered=false":  { "model": "unicopia:block/door/crystal_bottom", "y": 270 },
+        "facing=south,half=lower,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/crystal_bottom" },
+        "facing=west,half=lower,hinge=right,open=true,powered=false":  { "model": "unicopia:block/door/crystal_bottom", "y": 90 },
+        "facing=north,half=lower,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/crystal_bottom", "y": 180 },
+        "facing=east,half=upper,hinge=left,open=false,powered=false":  { "model": "unicopia:block/door/crystal_top" },
+        "facing=south,half=upper,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/crystal_top", "y": 90 },
+        "facing=west,half=upper,hinge=left,open=false,powered=false":  { "model": "unicopia:block/door/crystal_top", "y": 180 },
+        "facing=north,half=upper,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/crystal_top", "y": 270 },
+        "facing=east,half=upper,hinge=right,open=false,powered=false":  { "model": "unicopia:block/door/crystal_top_rh" },
+        "facing=south,half=upper,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/crystal_top_rh", "y": 90 },
+        "facing=west,half=upper,hinge=right,open=false,powered=false":  { "model": "unicopia:block/door/crystal_top_rh", "y": 180 },
+        "facing=north,half=upper,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/crystal_top_rh", "y": 270 },
+        "facing=east,half=upper,hinge=left,open=true,powered=false":  { "model": "unicopia:block/door/crystal_top_rh", "y": 90 },
+        "facing=south,half=upper,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/crystal_top_rh", "y": 180 },
+        "facing=west,half=upper,hinge=left,open=true,powered=false":  { "model": "unicopia:block/door/crystal_top_rh", "y": 270 },
+        "facing=north,half=upper,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/crystal_top_rh" },
+        "facing=east,half=upper,hinge=right,open=true,powered=false":  { "model": "unicopia:block/door/crystal_top", "y": 270 },
+        "facing=south,half=upper,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/crystal_top" },
+        "facing=west,half=upper,hinge=right,open=true,powered=false":  { "model": "unicopia:block/door/crystal_top", "y": 90 },
+        "facing=north,half=upper,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/crystal_top", "y": 180 },
+        "facing=east,half=lower,hinge=left,open=false,powered=true":  { "model": "unicopia:block/door/crystal_bottom" },
+        "facing=south,half=lower,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/crystal_bottom", "y": 90 },
+        "facing=west,half=lower,hinge=left,open=false,powered=true":  { "model": "unicopia:block/door/crystal_bottom", "y": 180 },
+        "facing=north,half=lower,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/crystal_bottom", "y": 270 },
+        "facing=east,half=lower,hinge=right,open=false,powered=true":  { "model": "unicopia:block/door/crystal_bottom_rh" },
+        "facing=south,half=lower,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/crystal_bottom_rh", "y": 90 },
+        "facing=west,half=lower,hinge=right,open=false,powered=true":  { "model": "unicopia:block/door/crystal_bottom_rh", "y": 180 },
+        "facing=north,half=lower,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/crystal_bottom_rh", "y": 270 },
+        "facing=east,half=lower,hinge=left,open=true,powered=true":  { "model": "unicopia:block/door/crystal_bottom_rh", "y": 90 },
+        "facing=south,half=lower,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/crystal_bottom_rh", "y": 180 },
+        "facing=west,half=lower,hinge=left,open=true,powered=true":  { "model": "unicopia:block/door/crystal_bottom_rh", "y": 270 },
+        "facing=north,half=lower,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/crystal_bottom_rh" },
+        "facing=east,half=lower,hinge=right,open=true,powered=true":  { "model": "unicopia:block/door/crystal_bottom", "y": 270 },
+        "facing=south,half=lower,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/crystal_bottom" },
+        "facing=west,half=lower,hinge=right,open=true,powered=true":  { "model": "unicopia:block/door/crystal_bottom", "y": 90 },
+        "facing=north,half=lower,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/crystal_bottom", "y": 180 },
+        "facing=east,half=upper,hinge=left,open=false,powered=true":  { "model": "unicopia:block/door/crystal_top" },
+        "facing=south,half=upper,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/crystal_top", "y": 90 },
+        "facing=west,half=upper,hinge=left,open=false,powered=true":  { "model": "unicopia:block/door/crystal_top", "y": 180 },
+        "facing=north,half=upper,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/crystal_top", "y": 270 },
+        "facing=east,half=upper,hinge=right,open=false,powered=true":  { "model": "unicopia:block/door/crystal_top_rh" },
+        "facing=south,half=upper,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/crystal_top_rh", "y": 90 },
+        "facing=west,half=upper,hinge=right,open=false,powered=true":  { "model": "unicopia:block/door/crystal_top_rh", "y": 180 },
+        "facing=north,half=upper,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/crystal_top_rh", "y": 270 },
+        "facing=east,half=upper,hinge=left,open=true,powered=true":  { "model": "unicopia:block/door/crystal_top_rh", "y": 90 },
+        "facing=south,half=upper,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/crystal_top_rh", "y": 180 },
+        "facing=west,half=upper,hinge=left,open=true,powered=true":  { "model": "unicopia:block/door/crystal_top_rh", "y": 270 },
+        "facing=north,half=upper,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/crystal_top_rh" },
+        "facing=east,half=upper,hinge=right,open=true,powered=true":  { "model": "unicopia:block/door/crystal_top", "y": 270 },
+        "facing=south,half=upper,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/crystal_top" },
+        "facing=west,half=upper,hinge=right,open=true,powered=true":  { "model": "unicopia:block/door/crystal_top", "y": 90 },
+        "facing=north,half=upper,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/crystal_top", "y": 180 }
+    }
+}
diff --git a/src/main/resources/assets/unicopia/blockstates/dark_oak_stable_door.json b/src/main/resources/assets/unicopia/blockstates/dark_oak_stable_door.json
new file mode 100644
index 00000000..7cc92f37
--- /dev/null
+++ b/src/main/resources/assets/unicopia/blockstates/dark_oak_stable_door.json
@@ -0,0 +1,68 @@
+{
+    "variants": {
+        "facing=east,half=lower,hinge=left,open=false,powered=false":  { "model": "unicopia:block/door/dark_oak_stable_bottom" },
+        "facing=south,half=lower,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/dark_oak_stable_bottom", "y": 90 },
+        "facing=west,half=lower,hinge=left,open=false,powered=false":  { "model": "unicopia:block/door/dark_oak_stable_bottom", "y": 180 },
+        "facing=north,half=lower,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/dark_oak_stable_bottom", "y": 270 },
+        "facing=east,half=lower,hinge=right,open=false,powered=false":  { "model": "unicopia:block/door/dark_oak_stable_bottom_rh" },
+        "facing=south,half=lower,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/dark_oak_stable_bottom_rh", "y": 90 },
+        "facing=west,half=lower,hinge=right,open=false,powered=false":  { "model": "unicopia:block/door/dark_oak_stable_bottom_rh", "y": 180 },
+        "facing=north,half=lower,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/dark_oak_stable_bottom_rh", "y": 270 },
+        "facing=east,half=lower,hinge=left,open=true,powered=false":  { "model": "unicopia:block/door/dark_oak_stable_bottom_rh", "y": 90 },
+        "facing=south,half=lower,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/dark_oak_stable_bottom_rh", "y": 180 },
+        "facing=west,half=lower,hinge=left,open=true,powered=false":  { "model": "unicopia:block/door/dark_oak_stable_bottom_rh", "y": 270 },
+        "facing=north,half=lower,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/dark_oak_stable_bottom_rh" },
+        "facing=east,half=lower,hinge=right,open=true,powered=false":  { "model": "unicopia:block/door/dark_oak_stable_bottom", "y": 270 },
+        "facing=south,half=lower,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/dark_oak_stable_bottom" },
+        "facing=west,half=lower,hinge=right,open=true,powered=false":  { "model": "unicopia:block/door/dark_oak_stable_bottom", "y": 90 },
+        "facing=north,half=lower,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/dark_oak_stable_bottom", "y": 180 },
+        "facing=east,half=upper,hinge=left,open=false,powered=false":  { "model": "unicopia:block/door/dark_oak_stable_top" },
+        "facing=south,half=upper,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/dark_oak_stable_top", "y": 90 },
+        "facing=west,half=upper,hinge=left,open=false,powered=false":  { "model": "unicopia:block/door/dark_oak_stable_top", "y": 180 },
+        "facing=north,half=upper,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/dark_oak_stable_top", "y": 270 },
+        "facing=east,half=upper,hinge=right,open=false,powered=false":  { "model": "unicopia:block/door/dark_oak_stable_top_rh" },
+        "facing=south,half=upper,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/dark_oak_stable_top_rh", "y": 90 },
+        "facing=west,half=upper,hinge=right,open=false,powered=false":  { "model": "unicopia:block/door/dark_oak_stable_top_rh", "y": 180 },
+        "facing=north,half=upper,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/dark_oak_stable_top_rh", "y": 270 },
+        "facing=east,half=upper,hinge=left,open=true,powered=false":  { "model": "unicopia:block/door/dark_oak_stable_top_rh", "y": 90 },
+        "facing=south,half=upper,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/dark_oak_stable_top_rh", "y": 180 },
+        "facing=west,half=upper,hinge=left,open=true,powered=false":  { "model": "unicopia:block/door/dark_oak_stable_top_rh", "y": 270 },
+        "facing=north,half=upper,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/dark_oak_stable_top_rh" },
+        "facing=east,half=upper,hinge=right,open=true,powered=false":  { "model": "unicopia:block/door/dark_oak_stable_top", "y": 270 },
+        "facing=south,half=upper,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/dark_oak_stable_top" },
+        "facing=west,half=upper,hinge=right,open=true,powered=false":  { "model": "unicopia:block/door/dark_oak_stable_top", "y": 90 },
+        "facing=north,half=upper,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/dark_oak_stable_top", "y": 180 },
+        "facing=east,half=lower,hinge=left,open=false,powered=true":  { "model": "unicopia:block/door/dark_oak_stable_bottom" },
+        "facing=south,half=lower,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/dark_oak_stable_bottom", "y": 90 },
+        "facing=west,half=lower,hinge=left,open=false,powered=true":  { "model": "unicopia:block/door/dark_oak_stable_bottom", "y": 180 },
+        "facing=north,half=lower,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/dark_oak_stable_bottom", "y": 270 },
+        "facing=east,half=lower,hinge=right,open=false,powered=true":  { "model": "unicopia:block/door/dark_oak_stable_bottom_rh" },
+        "facing=south,half=lower,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/dark_oak_stable_bottom_rh", "y": 90 },
+        "facing=west,half=lower,hinge=right,open=false,powered=true":  { "model": "unicopia:block/door/dark_oak_stable_bottom_rh", "y": 180 },
+        "facing=north,half=lower,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/dark_oak_stable_bottom_rh", "y": 270 },
+        "facing=east,half=lower,hinge=left,open=true,powered=true":  { "model": "unicopia:block/door/dark_oak_stable_bottom_rh", "y": 90 },
+        "facing=south,half=lower,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/dark_oak_stable_bottom_rh", "y": 180 },
+        "facing=west,half=lower,hinge=left,open=true,powered=true":  { "model": "unicopia:block/door/dark_oak_stable_bottom_rh", "y": 270 },
+        "facing=north,half=lower,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/dark_oak_stable_bottom_rh" },
+        "facing=east,half=lower,hinge=right,open=true,powered=true":  { "model": "unicopia:block/door/dark_oak_stable_bottom", "y": 270 },
+        "facing=south,half=lower,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/dark_oak_stable_bottom" },
+        "facing=west,half=lower,hinge=right,open=true,powered=true":  { "model": "unicopia:block/door/dark_oak_stable_bottom", "y": 90 },
+        "facing=north,half=lower,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/dark_oak_stable_bottom", "y": 180 },
+        "facing=east,half=upper,hinge=left,open=false,powered=true":  { "model": "unicopia:block/door/dark_oak_stable_top" },
+        "facing=south,half=upper,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/dark_oak_stable_top", "y": 90 },
+        "facing=west,half=upper,hinge=left,open=false,powered=true":  { "model": "unicopia:block/door/dark_oak_stable_top", "y": 180 },
+        "facing=north,half=upper,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/dark_oak_stable_top", "y": 270 },
+        "facing=east,half=upper,hinge=right,open=false,powered=true":  { "model": "unicopia:block/door/dark_oak_stable_top_rh" },
+        "facing=south,half=upper,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/dark_oak_stable_top_rh", "y": 90 },
+        "facing=west,half=upper,hinge=right,open=false,powered=true":  { "model": "unicopia:block/door/dark_oak_stable_top_rh", "y": 180 },
+        "facing=north,half=upper,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/dark_oak_stable_top_rh", "y": 270 },
+        "facing=east,half=upper,hinge=left,open=true,powered=true":  { "model": "unicopia:block/door/dark_oak_stable_top_rh", "y": 90 },
+        "facing=south,half=upper,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/dark_oak_stable_top_rh", "y": 180 },
+        "facing=west,half=upper,hinge=left,open=true,powered=true":  { "model": "unicopia:block/door/dark_oak_stable_top_rh", "y": 270 },
+        "facing=north,half=upper,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/dark_oak_stable_top_rh" },
+        "facing=east,half=upper,hinge=right,open=true,powered=true":  { "model": "unicopia:block/door/dark_oak_stable_top", "y": 270 },
+        "facing=south,half=upper,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/dark_oak_stable_top" },
+        "facing=west,half=upper,hinge=right,open=true,powered=true":  { "model": "unicopia:block/door/dark_oak_stable_top", "y": 90 },
+        "facing=north,half=upper,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/dark_oak_stable_top", "y": 180 }
+    }
+}
diff --git a/src/main/resources/assets/unicopia/blockstates/bakery_door.json b/src/main/resources/assets/unicopia/blockstates/stable_door.json
similarity index 50%
rename from src/main/resources/assets/unicopia/blockstates/bakery_door.json
rename to src/main/resources/assets/unicopia/blockstates/stable_door.json
index 72faabed..01d4ec97 100644
--- a/src/main/resources/assets/unicopia/blockstates/bakery_door.json
+++ b/src/main/resources/assets/unicopia/blockstates/stable_door.json
@@ -1,68 +1,68 @@
 {
     "variants": {
-        "facing=east,half=lower,hinge=left,open=false,powered=false":  { "model": "unicopia:door/bakery_bottom" },
-        "facing=south,half=lower,hinge=left,open=false,powered=false": { "model": "unicopia:door/bakery_bottom", "y": 90 },
-        "facing=west,half=lower,hinge=left,open=false,powered=false":  { "model": "unicopia:door/bakery_bottom", "y": 180 },
-        "facing=north,half=lower,hinge=left,open=false,powered=false": { "model": "unicopia:door/bakery_bottom", "y": 270 },
-        "facing=east,half=lower,hinge=right,open=false,powered=false":  { "model": "unicopia:door/bakery_bottom_rh" },
-        "facing=south,half=lower,hinge=right,open=false,powered=false": { "model": "unicopia:door/bakery_bottom_rh", "y": 90 },
-        "facing=west,half=lower,hinge=right,open=false,powered=false":  { "model": "unicopia:door/bakery_bottom_rh", "y": 180 },
-        "facing=north,half=lower,hinge=right,open=false,powered=false": { "model": "unicopia:door/bakery_bottom_rh", "y": 270 },
-        "facing=east,half=lower,hinge=left,open=true,powered=false":  { "model": "unicopia:door/bakery_bottom_rh", "y": 90 },
-        "facing=south,half=lower,hinge=left,open=true,powered=false": { "model": "unicopia:door/bakery_bottom_rh", "y": 180 },
-        "facing=west,half=lower,hinge=left,open=true,powered=false":  { "model": "unicopia:door/bakery_bottom_rh", "y": 270 },
-        "facing=north,half=lower,hinge=left,open=true,powered=false": { "model": "unicopia:door/bakery_bottom_rh" },
-        "facing=east,half=lower,hinge=right,open=true,powered=false":  { "model": "unicopia:door/bakery_bottom", "y": 270 },
-        "facing=south,half=lower,hinge=right,open=true,powered=false": { "model": "unicopia:door/bakery_bottom" },
-        "facing=west,half=lower,hinge=right,open=true,powered=false":  { "model": "unicopia:door/bakery_bottom", "y": 90 },
-        "facing=north,half=lower,hinge=right,open=true,powered=false": { "model": "unicopia:door/bakery_bottom", "y": 180 },
-        "facing=east,half=upper,hinge=left,open=false,powered=false":  { "model": "unicopia:door/bakery_top" },
-        "facing=south,half=upper,hinge=left,open=false,powered=false": { "model": "unicopia:door/bakery_top", "y": 90 },
-        "facing=west,half=upper,hinge=left,open=false,powered=false":  { "model": "unicopia:door/bakery_top", "y": 180 },
-        "facing=north,half=upper,hinge=left,open=false,powered=false": { "model": "unicopia:door/bakery_top", "y": 270 },
-        "facing=east,half=upper,hinge=right,open=false,powered=false":  { "model": "unicopia:door/bakery_top_rh" },
-        "facing=south,half=upper,hinge=right,open=false,powered=false": { "model": "unicopia:door/bakery_top_rh", "y": 90 },
-        "facing=west,half=upper,hinge=right,open=false,powered=false":  { "model": "unicopia:door/bakery_top_rh", "y": 180 },
-        "facing=north,half=upper,hinge=right,open=false,powered=false": { "model": "unicopia:door/bakery_top_rh", "y": 270 },
-        "facing=east,half=upper,hinge=left,open=true,powered=false":  { "model": "unicopia:door/bakery_top_rh", "y": 90 },
-        "facing=south,half=upper,hinge=left,open=true,powered=false": { "model": "unicopia:door/bakery_top_rh", "y": 180 },
-        "facing=west,half=upper,hinge=left,open=true,powered=false":  { "model": "unicopia:door/bakery_top_rh", "y": 270 },
-        "facing=north,half=upper,hinge=left,open=true,powered=false": { "model": "unicopia:door/bakery_top_rh" },
-        "facing=east,half=upper,hinge=right,open=true,powered=false":  { "model": "unicopia:door/bakery_top", "y": 270 },
-        "facing=south,half=upper,hinge=right,open=true,powered=false": { "model": "unicopia:door/bakery_top" },
-        "facing=west,half=upper,hinge=right,open=true,powered=false":  { "model": "unicopia:door/bakery_top", "y": 90 },
-        "facing=north,half=upper,hinge=right,open=true,powered=false": { "model": "unicopia:door/bakery_top", "y": 180 },
-        "facing=east,half=lower,hinge=left,open=false,powered=true":  { "model": "unicopia:door/bakery_bottom" },
-        "facing=south,half=lower,hinge=left,open=false,powered=true": { "model": "unicopia:door/bakery_bottom", "y": 90 },
-        "facing=west,half=lower,hinge=left,open=false,powered=true":  { "model": "unicopia:door/bakery_bottom", "y": 180 },
-        "facing=north,half=lower,hinge=left,open=false,powered=true": { "model": "unicopia:door/bakery_bottom", "y": 270 },
-        "facing=east,half=lower,hinge=right,open=false,powered=true":  { "model": "unicopia:door/bakery_bottom_rh" },
-        "facing=south,half=lower,hinge=right,open=false,powered=true": { "model": "unicopia:door/bakery_bottom_rh", "y": 90 },
-        "facing=west,half=lower,hinge=right,open=false,powered=true":  { "model": "unicopia:door/bakery_bottom_rh", "y": 180 },
-        "facing=north,half=lower,hinge=right,open=false,powered=true": { "model": "unicopia:door/bakery_bottom_rh", "y": 270 },
-        "facing=east,half=lower,hinge=left,open=true,powered=true":  { "model": "unicopia:door/bakery_bottom_rh", "y": 90 },
-        "facing=south,half=lower,hinge=left,open=true,powered=true": { "model": "unicopia:door/bakery_bottom_rh", "y": 180 },
-        "facing=west,half=lower,hinge=left,open=true,powered=true":  { "model": "unicopia:door/bakery_bottom_rh", "y": 270 },
-        "facing=north,half=lower,hinge=left,open=true,powered=true": { "model": "unicopia:door/bakery_bottom_rh" },
-        "facing=east,half=lower,hinge=right,open=true,powered=true":  { "model": "unicopia:door/bakery_bottom", "y": 270 },
-        "facing=south,half=lower,hinge=right,open=true,powered=true": { "model": "unicopia:door/bakery_bottom" },
-        "facing=west,half=lower,hinge=right,open=true,powered=true":  { "model": "unicopia:door/bakery_bottom", "y": 90 },
-        "facing=north,half=lower,hinge=right,open=true,powered=true": { "model": "unicopia:door/bakery_bottom", "y": 180 },
-        "facing=east,half=upper,hinge=left,open=false,powered=true":  { "model": "unicopia:door/bakery_top" },
-        "facing=south,half=upper,hinge=left,open=false,powered=true": { "model": "unicopia:door/bakery_top", "y": 90 },
-        "facing=west,half=upper,hinge=left,open=false,powered=true":  { "model": "unicopia:door/bakery_top", "y": 180 },
-        "facing=north,half=upper,hinge=left,open=false,powered=true": { "model": "unicopia:door/bakery_top", "y": 270 },
-        "facing=east,half=upper,hinge=right,open=false,powered=true":  { "model": "unicopia:door/bakery_top_rh" },
-        "facing=south,half=upper,hinge=right,open=false,powered=true": { "model": "unicopia:door/bakery_top_rh", "y": 90 },
-        "facing=west,half=upper,hinge=right,open=false,powered=true":  { "model": "unicopia:door/bakery_top_rh", "y": 180 },
-        "facing=north,half=upper,hinge=right,open=false,powered=true": { "model": "unicopia:door/bakery_top_rh", "y": 270 },
-        "facing=east,half=upper,hinge=left,open=true,powered=true":  { "model": "unicopia:door/bakery_top_rh", "y": 90 },
-        "facing=south,half=upper,hinge=left,open=true,powered=true": { "model": "unicopia:door/bakery_top_rh", "y": 180 },
-        "facing=west,half=upper,hinge=left,open=true,powered=true":  { "model": "unicopia:door/bakery_top_rh", "y": 270 },
-        "facing=north,half=upper,hinge=left,open=true,powered=true": { "model": "unicopia:door/bakery_top_rh" },
-        "facing=east,half=upper,hinge=right,open=true,powered=true":  { "model": "unicopia:door/bakery_top", "y": 270 },
-        "facing=south,half=upper,hinge=right,open=true,powered=true": { "model": "unicopia:door/bakery_top" },
-        "facing=west,half=upper,hinge=right,open=true,powered=true":  { "model": "unicopia:door/bakery_top", "y": 90 },
-        "facing=north,half=upper,hinge=right,open=true,powered=true": { "model": "unicopia:door/bakery_top", "y": 180 }
+        "facing=east,half=lower,hinge=left,open=false,powered=false":  { "model": "unicopia:block/door/stable_bottom" },
+        "facing=south,half=lower,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/stable_bottom", "y": 90 },
+        "facing=west,half=lower,hinge=left,open=false,powered=false":  { "model": "unicopia:block/door/stable_bottom", "y": 180 },
+        "facing=north,half=lower,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/stable_bottom", "y": 270 },
+        "facing=east,half=lower,hinge=right,open=false,powered=false":  { "model": "unicopia:block/door/stable_bottom_rh" },
+        "facing=south,half=lower,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/stable_bottom_rh", "y": 90 },
+        "facing=west,half=lower,hinge=right,open=false,powered=false":  { "model": "unicopia:block/door/stable_bottom_rh", "y": 180 },
+        "facing=north,half=lower,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/stable_bottom_rh", "y": 270 },
+        "facing=east,half=lower,hinge=left,open=true,powered=false":  { "model": "unicopia:block/door/stable_bottom_rh", "y": 90 },
+        "facing=south,half=lower,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/stable_bottom_rh", "y": 180 },
+        "facing=west,half=lower,hinge=left,open=true,powered=false":  { "model": "unicopia:block/door/stable_bottom_rh", "y": 270 },
+        "facing=north,half=lower,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/stable_bottom_rh" },
+        "facing=east,half=lower,hinge=right,open=true,powered=false":  { "model": "unicopia:block/door/stable_bottom", "y": 270 },
+        "facing=south,half=lower,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/stable_bottom" },
+        "facing=west,half=lower,hinge=right,open=true,powered=false":  { "model": "unicopia:block/door/stable_bottom", "y": 90 },
+        "facing=north,half=lower,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/stable_bottom", "y": 180 },
+        "facing=east,half=upper,hinge=left,open=false,powered=false":  { "model": "unicopia:block/door/stable_top" },
+        "facing=south,half=upper,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/stable_top", "y": 90 },
+        "facing=west,half=upper,hinge=left,open=false,powered=false":  { "model": "unicopia:block/door/stable_top", "y": 180 },
+        "facing=north,half=upper,hinge=left,open=false,powered=false": { "model": "unicopia:block/door/stable_top", "y": 270 },
+        "facing=east,half=upper,hinge=right,open=false,powered=false":  { "model": "unicopia:block/door/stable_top_rh" },
+        "facing=south,half=upper,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/stable_top_rh", "y": 90 },
+        "facing=west,half=upper,hinge=right,open=false,powered=false":  { "model": "unicopia:block/door/stable_top_rh", "y": 180 },
+        "facing=north,half=upper,hinge=right,open=false,powered=false": { "model": "unicopia:block/door/stable_top_rh", "y": 270 },
+        "facing=east,half=upper,hinge=left,open=true,powered=false":  { "model": "unicopia:block/door/stable_top_rh", "y": 90 },
+        "facing=south,half=upper,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/stable_top_rh", "y": 180 },
+        "facing=west,half=upper,hinge=left,open=true,powered=false":  { "model": "unicopia:block/door/stable_top_rh", "y": 270 },
+        "facing=north,half=upper,hinge=left,open=true,powered=false": { "model": "unicopia:block/door/stable_top_rh" },
+        "facing=east,half=upper,hinge=right,open=true,powered=false":  { "model": "unicopia:block/door/stable_top", "y": 270 },
+        "facing=south,half=upper,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/stable_top" },
+        "facing=west,half=upper,hinge=right,open=true,powered=false":  { "model": "unicopia:block/door/stable_top", "y": 90 },
+        "facing=north,half=upper,hinge=right,open=true,powered=false": { "model": "unicopia:block/door/stable_top", "y": 180 },
+        "facing=east,half=lower,hinge=left,open=false,powered=true":  { "model": "unicopia:block/door/stable_bottom" },
+        "facing=south,half=lower,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/stable_bottom", "y": 90 },
+        "facing=west,half=lower,hinge=left,open=false,powered=true":  { "model": "unicopia:block/door/stable_bottom", "y": 180 },
+        "facing=north,half=lower,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/stable_bottom", "y": 270 },
+        "facing=east,half=lower,hinge=right,open=false,powered=true":  { "model": "unicopia:block/door/stable_bottom_rh" },
+        "facing=south,half=lower,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/stable_bottom_rh", "y": 90 },
+        "facing=west,half=lower,hinge=right,open=false,powered=true":  { "model": "unicopia:block/door/stable_bottom_rh", "y": 180 },
+        "facing=north,half=lower,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/stable_bottom_rh", "y": 270 },
+        "facing=east,half=lower,hinge=left,open=true,powered=true":  { "model": "unicopia:block/door/stable_bottom_rh", "y": 90 },
+        "facing=south,half=lower,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/stable_bottom_rh", "y": 180 },
+        "facing=west,half=lower,hinge=left,open=true,powered=true":  { "model": "unicopia:block/door/stable_bottom_rh", "y": 270 },
+        "facing=north,half=lower,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/stable_bottom_rh" },
+        "facing=east,half=lower,hinge=right,open=true,powered=true":  { "model": "unicopia:block/door/stable_bottom", "y": 270 },
+        "facing=south,half=lower,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/stable_bottom" },
+        "facing=west,half=lower,hinge=right,open=true,powered=true":  { "model": "unicopia:block/door/stable_bottom", "y": 90 },
+        "facing=north,half=lower,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/stable_bottom", "y": 180 },
+        "facing=east,half=upper,hinge=left,open=false,powered=true":  { "model": "unicopia:block/door/stable_top" },
+        "facing=south,half=upper,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/stable_top", "y": 90 },
+        "facing=west,half=upper,hinge=left,open=false,powered=true":  { "model": "unicopia:block/door/stable_top", "y": 180 },
+        "facing=north,half=upper,hinge=left,open=false,powered=true": { "model": "unicopia:block/door/stable_top", "y": 270 },
+        "facing=east,half=upper,hinge=right,open=false,powered=true":  { "model": "unicopia:block/door/stable_top_rh" },
+        "facing=south,half=upper,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/stable_top_rh", "y": 90 },
+        "facing=west,half=upper,hinge=right,open=false,powered=true":  { "model": "unicopia:block/door/stable_top_rh", "y": 180 },
+        "facing=north,half=upper,hinge=right,open=false,powered=true": { "model": "unicopia:block/door/stable_top_rh", "y": 270 },
+        "facing=east,half=upper,hinge=left,open=true,powered=true":  { "model": "unicopia:block/door/stable_top_rh", "y": 90 },
+        "facing=south,half=upper,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/stable_top_rh", "y": 180 },
+        "facing=west,half=upper,hinge=left,open=true,powered=true":  { "model": "unicopia:block/door/stable_top_rh", "y": 270 },
+        "facing=north,half=upper,hinge=left,open=true,powered=true": { "model": "unicopia:block/door/stable_top_rh" },
+        "facing=east,half=upper,hinge=right,open=true,powered=true":  { "model": "unicopia:block/door/stable_top", "y": 270 },
+        "facing=south,half=upper,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/stable_top" },
+        "facing=west,half=upper,hinge=right,open=true,powered=true":  { "model": "unicopia:block/door/stable_top", "y": 90 },
+        "facing=north,half=upper,hinge=right,open=true,powered=true": { "model": "unicopia:block/door/stable_top", "y": 180 }
     }
 }
diff --git a/src/main/resources/assets/unicopia/models/block/door/bakery_bottom.json b/src/main/resources/assets/unicopia/models/block/door/bakery_bottom.json
deleted file mode 100644
index 20af668b..00000000
--- a/src/main/resources/assets/unicopia/models/block/door/bakery_bottom.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-    "parent": "unicopia:block/door/bottom",
-    "textures": {
-	    "bottom": "unicopia:blocks/door_bakery_lower",
-	    "top": "unicopia:blocks/door_bakery_upper"
-    }
-}
diff --git a/src/main/resources/assets/unicopia/models/block/door/bakery_bottom_rh.json b/src/main/resources/assets/unicopia/models/block/door/bakery_bottom_rh.json
deleted file mode 100644
index f82e8191..00000000
--- a/src/main/resources/assets/unicopia/models/block/door/bakery_bottom_rh.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-    "parent": "unicopia:block/door/bottom_rh",
-    "textures": {
-        "bottom": "unicopia:blocks/door_bakery_lower",
-        "top": "unicopia:blocks/door_bakery_upper"
-    }
-}
diff --git a/src/main/resources/assets/unicopia/models/block/door/bakery_top.json b/src/main/resources/assets/unicopia/models/block/door/bakery_top.json
deleted file mode 100644
index ea3a51b0..00000000
--- a/src/main/resources/assets/unicopia/models/block/door/bakery_top.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-    "parent": "unicopia:block/door/top",
-    "textures": {
-	    "bottom": "unicopia:blocks/door_bakery_lower",
-	    "top": "unicopia:blocks/door_bakery_upper"
-    }
-}
diff --git a/src/main/resources/assets/unicopia/models/block/door/bakery_top_rh.json b/src/main/resources/assets/unicopia/models/block/door/bakery_top_rh.json
deleted file mode 100644
index 38cc28ce..00000000
--- a/src/main/resources/assets/unicopia/models/block/door/bakery_top_rh.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-    "parent": "unicopia:block/door/top_rh",
-    "textures": {
-	    "bottom": "unicopia:blocks/door_bakery_lower",
-	    "top": "unicopia:blocks/door_bakery_upper"
-    }
-}
diff --git a/src/main/resources/assets/unicopia/models/block/door/cloud_bottom.json b/src/main/resources/assets/unicopia/models/block/door/cloud_bottom.json
new file mode 100644
index 00000000..b5afc313
--- /dev/null
+++ b/src/main/resources/assets/unicopia/models/block/door/cloud_bottom.json
@@ -0,0 +1,7 @@
+{
+    "parent": "unicopia:block/door/bottom",
+    "textures": {
+	    "bottom": "unicopia:block/cloud_door_lower",
+	    "top": "unicopia:block/cloud_door_upper"
+    }
+}
diff --git a/src/main/resources/assets/unicopia/models/block/door/cloud_bottom_rh.json b/src/main/resources/assets/unicopia/models/block/door/cloud_bottom_rh.json
new file mode 100644
index 00000000..575b5941
--- /dev/null
+++ b/src/main/resources/assets/unicopia/models/block/door/cloud_bottom_rh.json
@@ -0,0 +1,7 @@
+{
+    "parent": "unicopia:block/door/bottom_rh",
+    "textures": {
+        "bottom": "unicopia:block/cloud_door_lower",
+        "top": "unicopia:block/cloud_door_upper"
+    }
+}
diff --git a/src/main/resources/assets/unicopia/models/block/door/cloud_top.json b/src/main/resources/assets/unicopia/models/block/door/cloud_top.json
new file mode 100644
index 00000000..41bed4d6
--- /dev/null
+++ b/src/main/resources/assets/unicopia/models/block/door/cloud_top.json
@@ -0,0 +1,7 @@
+{
+    "parent": "unicopia:block/door/top",
+    "textures": {
+	    "bottom": "unicopia:block/cloud_door_lower",
+	    "top": "unicopia:block/cloud_door_upper"
+    }
+}
diff --git a/src/main/resources/assets/unicopia/models/block/door/cloud_top_rh.json b/src/main/resources/assets/unicopia/models/block/door/cloud_top_rh.json
new file mode 100644
index 00000000..fb1c6ad9
--- /dev/null
+++ b/src/main/resources/assets/unicopia/models/block/door/cloud_top_rh.json
@@ -0,0 +1,7 @@
+{
+    "parent": "unicopia:block/door/top_rh",
+    "textures": {
+	    "bottom": "unicopia:block/cloud_door_lower",
+	    "top": "unicopia:block/cloud_door_upper"
+    }
+}
diff --git a/src/main/resources/assets/unicopia/models/block/door/crystal_bottom.json b/src/main/resources/assets/unicopia/models/block/door/crystal_bottom.json
new file mode 100644
index 00000000..ef81dfb9
--- /dev/null
+++ b/src/main/resources/assets/unicopia/models/block/door/crystal_bottom.json
@@ -0,0 +1,7 @@
+{
+    "parent": "unicopia:block/door/bottom",
+    "textures": {
+	    "bottom": "unicopia:block/crystal_door_lower",
+	    "top": "unicopia:block/crystal_door_upper"
+    }
+}
diff --git a/src/main/resources/assets/unicopia/models/block/door/crystal_bottom_rh.json b/src/main/resources/assets/unicopia/models/block/door/crystal_bottom_rh.json
new file mode 100644
index 00000000..5919da7d
--- /dev/null
+++ b/src/main/resources/assets/unicopia/models/block/door/crystal_bottom_rh.json
@@ -0,0 +1,7 @@
+{
+    "parent": "unicopia:block/door/bottom_rh",
+    "textures": {
+        "bottom": "unicopia:block/crystal_door_lower",
+        "top": "unicopia:block/crystal_door_upper"
+    }
+}
diff --git a/src/main/resources/assets/unicopia/models/block/door/crystal_top.json b/src/main/resources/assets/unicopia/models/block/door/crystal_top.json
new file mode 100644
index 00000000..f7ab0700
--- /dev/null
+++ b/src/main/resources/assets/unicopia/models/block/door/crystal_top.json
@@ -0,0 +1,7 @@
+{
+    "parent": "unicopia:block/door/top",
+    "textures": {
+	    "bottom": "unicopia:block/crystal_door_lower",
+	    "top": "unicopia:block/crystal_door_upper"
+    }
+}
diff --git a/src/main/resources/assets/unicopia/models/block/door/crystal_top_rh.json b/src/main/resources/assets/unicopia/models/block/door/crystal_top_rh.json
new file mode 100644
index 00000000..9e7f150c
--- /dev/null
+++ b/src/main/resources/assets/unicopia/models/block/door/crystal_top_rh.json
@@ -0,0 +1,7 @@
+{
+    "parent": "unicopia:block/door/top_rh",
+    "textures": {
+	    "bottom": "unicopia:block/crystal_door_lower",
+	    "top": "unicopia:block/crystal_door_upper"
+    }
+}
diff --git a/src/main/resources/assets/unicopia/models/block/door/dark_oak_stable_bottom.json b/src/main/resources/assets/unicopia/models/block/door/dark_oak_stable_bottom.json
new file mode 100644
index 00000000..80964112
--- /dev/null
+++ b/src/main/resources/assets/unicopia/models/block/door/dark_oak_stable_bottom.json
@@ -0,0 +1,7 @@
+{
+    "parent": "unicopia:block/door/bottom",
+    "textures": {
+	    "bottom": "unicopia:block/door_library_lower",
+	    "top": "unicopia:block/door_library_upper"
+    }
+}
diff --git a/src/main/resources/assets/unicopia/models/block/door/dark_oak_stable_bottom_rh.json b/src/main/resources/assets/unicopia/models/block/door/dark_oak_stable_bottom_rh.json
new file mode 100644
index 00000000..2304df0e
--- /dev/null
+++ b/src/main/resources/assets/unicopia/models/block/door/dark_oak_stable_bottom_rh.json
@@ -0,0 +1,7 @@
+{
+    "parent": "unicopia:block/door/bottom_rh",
+    "textures": {
+        "bottom": "unicopia:block/door_library_lower",
+        "top": "unicopia:block/door_library_upper"
+    }
+}
diff --git a/src/main/resources/assets/unicopia/models/block/door/dark_oak_stable_top.json b/src/main/resources/assets/unicopia/models/block/door/dark_oak_stable_top.json
new file mode 100644
index 00000000..f4b0fc2f
--- /dev/null
+++ b/src/main/resources/assets/unicopia/models/block/door/dark_oak_stable_top.json
@@ -0,0 +1,7 @@
+{
+    "parent": "unicopia:block/door/top",
+    "textures": {
+	    "bottom": "unicopia:block/door_library_lower",
+	    "top": "unicopia:block/door_library_upper"
+    }
+}
diff --git a/src/main/resources/assets/unicopia/models/block/door/dark_oak_stable_top_rh.json b/src/main/resources/assets/unicopia/models/block/door/dark_oak_stable_top_rh.json
new file mode 100644
index 00000000..669abb48
--- /dev/null
+++ b/src/main/resources/assets/unicopia/models/block/door/dark_oak_stable_top_rh.json
@@ -0,0 +1,7 @@
+{
+    "parent": "unicopia:block/door/top_rh",
+    "textures": {
+	    "bottom": "unicopia:block/door_library_lower",
+	    "top": "unicopia:block/door_library_upper"
+    }
+}
diff --git a/src/main/resources/assets/unicopia/models/block/door/diamond_bottom.json b/src/main/resources/assets/unicopia/models/block/door/diamond_bottom.json
deleted file mode 100644
index 02d76d21..00000000
--- a/src/main/resources/assets/unicopia/models/block/door/diamond_bottom.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-    "parent": "unicopia:block/door/bottom",
-    "textures": {
-	    "bottom": "unicopia:blocks/door_diamond_lower",
-	    "top": "unicopia:blocks/door_diamond_upper"
-    }
-}
diff --git a/src/main/resources/assets/unicopia/models/block/door/diamond_bottom_rh.json b/src/main/resources/assets/unicopia/models/block/door/diamond_bottom_rh.json
deleted file mode 100644
index 8556b6d7..00000000
--- a/src/main/resources/assets/unicopia/models/block/door/diamond_bottom_rh.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-    "parent": "unicopia:block/door/bottom_rh",
-    "textures": {
-        "bottom": "unicopia:blocks/door_diamond_lower",
-        "top": "unicopia:blocks/door_diamond_upper"
-    }
-}
diff --git a/src/main/resources/assets/unicopia/models/block/door/diamond_top.json b/src/main/resources/assets/unicopia/models/block/door/diamond_top.json
deleted file mode 100644
index 19212184..00000000
--- a/src/main/resources/assets/unicopia/models/block/door/diamond_top.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-    "parent": "unicopia:block/door/top",
-    "textures": {
-	    "bottom": "unicopia:blocks/door_diamond_lower",
-	    "top": "unicopia:blocks/door_diamond_upper"
-    }
-}
diff --git a/src/main/resources/assets/unicopia/models/block/door/diamond_top_rh.json b/src/main/resources/assets/unicopia/models/block/door/diamond_top_rh.json
deleted file mode 100644
index ad3be532..00000000
--- a/src/main/resources/assets/unicopia/models/block/door/diamond_top_rh.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-    "parent": "unicopia:block/door/top_rh",
-    "textures": {
-	    "bottom": "unicopia:blocks/door_diamond_lower",
-	    "top": "unicopia:blocks/door_diamond_upper"
-    }
-}
diff --git a/src/main/resources/assets/unicopia/models/block/door/library_bottom.json b/src/main/resources/assets/unicopia/models/block/door/library_bottom.json
deleted file mode 100644
index 9696a7f6..00000000
--- a/src/main/resources/assets/unicopia/models/block/door/library_bottom.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-    "parent": "unicopia:block/door/bottom",
-    "textures": {
-	    "bottom": "unicopia:blocks/door_library_lower",
-	    "top": "unicopia:blocks/door_library_upper"
-    }
-}
diff --git a/src/main/resources/assets/unicopia/models/block/door/library_bottom_rh.json b/src/main/resources/assets/unicopia/models/block/door/library_bottom_rh.json
deleted file mode 100644
index b06d234d..00000000
--- a/src/main/resources/assets/unicopia/models/block/door/library_bottom_rh.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-    "parent": "unicopia:block/door/bottom_rh",
-    "textures": {
-        "bottom": "unicopia:blocks/door_library_lower",
-        "top": "unicopia:blocks/door_library_upper"
-    }
-}
diff --git a/src/main/resources/assets/unicopia/models/block/door/library_top.json b/src/main/resources/assets/unicopia/models/block/door/library_top.json
deleted file mode 100644
index e230b4df..00000000
--- a/src/main/resources/assets/unicopia/models/block/door/library_top.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-    "parent": "unicopia:block/door/top",
-    "textures": {
-	    "bottom": "unicopia:blocks/door_library_lower",
-	    "top": "unicopia:blocks/door_library_upper"
-    }
-}
diff --git a/src/main/resources/assets/unicopia/models/block/door/library_top_rh.json b/src/main/resources/assets/unicopia/models/block/door/library_top_rh.json
deleted file mode 100644
index 13422e83..00000000
--- a/src/main/resources/assets/unicopia/models/block/door/library_top_rh.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-    "parent": "unicopia:block/door/top_rh",
-    "textures": {
-	    "bottom": "unicopia:blocks/door_library_lower",
-	    "top": "unicopia:blocks/door_library_upper"
-    }
-}
diff --git a/src/main/resources/assets/unicopia/models/block/door/mist_bottom.json b/src/main/resources/assets/unicopia/models/block/door/mist_bottom.json
deleted file mode 100644
index 9d342f67..00000000
--- a/src/main/resources/assets/unicopia/models/block/door/mist_bottom.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-    "parent": "minecraft:block/door_bottom",
-    "textures": {
-	    "bottom": "unicopia:blocks/door_mist_lower",
-	    "top": "unicopia:blocks/door_mist_upper"
-    }
-}
diff --git a/src/main/resources/assets/unicopia/models/block/door/mist_bottom_rh.json b/src/main/resources/assets/unicopia/models/block/door/mist_bottom_rh.json
deleted file mode 100644
index babde1e1..00000000
--- a/src/main/resources/assets/unicopia/models/block/door/mist_bottom_rh.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-    "parent": "block/door_bottom_rh",
-    "textures": {
-        "bottom": "unicopia:blocks/door_mist_lower",
-        "top": "unicopia:blocks/door_mist_upper"
-    }
-}
diff --git a/src/main/resources/assets/unicopia/models/block/door/mist_top.json b/src/main/resources/assets/unicopia/models/block/door/mist_top.json
deleted file mode 100644
index cc1bbbb4..00000000
--- a/src/main/resources/assets/unicopia/models/block/door/mist_top.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-    "parent": "block/door_top",
-    "textures": {
-	    "bottom": "unicopia:blocks/door_mist_lower",
-	    "top": "unicopia:blocks/door_mist_upper"
-    }
-}
diff --git a/src/main/resources/assets/unicopia/models/block/door/mist_top_rh.json b/src/main/resources/assets/unicopia/models/block/door/mist_top_rh.json
deleted file mode 100644
index f75c8761..00000000
--- a/src/main/resources/assets/unicopia/models/block/door/mist_top_rh.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-    "parent": "block/door_top_rh",
-    "textures": {
-	    "bottom": "unicopia:blocks/door_mist_lower",
-	    "top": "unicopia:blocks/door_mist_upper"
-    }
-}
diff --git a/src/main/resources/assets/unicopia/models/block/door/stable_bottom.json b/src/main/resources/assets/unicopia/models/block/door/stable_bottom.json
new file mode 100644
index 00000000..efbfa9c1
--- /dev/null
+++ b/src/main/resources/assets/unicopia/models/block/door/stable_bottom.json
@@ -0,0 +1,7 @@
+{
+    "parent": "unicopia:block/door/bottom",
+    "textures": {
+	    "bottom": "unicopia:block/stable_door_lower",
+	    "top": "unicopia:block/stable_door_upper"
+    }
+}
diff --git a/src/main/resources/assets/unicopia/models/block/door/stable_bottom_rh.json b/src/main/resources/assets/unicopia/models/block/door/stable_bottom_rh.json
new file mode 100644
index 00000000..857535ec
--- /dev/null
+++ b/src/main/resources/assets/unicopia/models/block/door/stable_bottom_rh.json
@@ -0,0 +1,7 @@
+{
+    "parent": "unicopia:block/door/bottom_rh",
+    "textures": {
+        "bottom": "unicopia:block/stable_door_lower",
+        "top": "unicopia:block/stable_door_upper"
+    }
+}
diff --git a/src/main/resources/assets/unicopia/models/block/door/stable_top.json b/src/main/resources/assets/unicopia/models/block/door/stable_top.json
new file mode 100644
index 00000000..18822b0b
--- /dev/null
+++ b/src/main/resources/assets/unicopia/models/block/door/stable_top.json
@@ -0,0 +1,7 @@
+{
+    "parent": "unicopia:block/door/top",
+    "textures": {
+	    "bottom": "unicopia:block/stable_door_lower",
+	    "top": "unicopia:block/stable_door_upper"
+    }
+}
diff --git a/src/main/resources/assets/unicopia/models/block/door/stable_top_rh.json b/src/main/resources/assets/unicopia/models/block/door/stable_top_rh.json
new file mode 100644
index 00000000..29559c4d
--- /dev/null
+++ b/src/main/resources/assets/unicopia/models/block/door/stable_top_rh.json
@@ -0,0 +1,7 @@
+{
+    "parent": "unicopia:block/door/top_rh",
+    "textures": {
+	    "bottom": "unicopia:block/stable_door_lower",
+	    "top": "unicopia:block/stable_door_upper"
+    }
+}
diff --git a/src/main/resources/assets/unicopia/models/item/cloud_door.json b/src/main/resources/assets/unicopia/models/item/cloud_door.json
new file mode 100644
index 00000000..6c3e3edb
--- /dev/null
+++ b/src/main/resources/assets/unicopia/models/item/cloud_door.json
@@ -0,0 +1,6 @@
+{
+  "parent": "minecraft:item/generated",
+  "textures": {
+    "layer0": "unicopia:item/cloud_door"
+  }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/unicopia/models/item/crystal_door.json b/src/main/resources/assets/unicopia/models/item/crystal_door.json
new file mode 100644
index 00000000..2ff46655
--- /dev/null
+++ b/src/main/resources/assets/unicopia/models/item/crystal_door.json
@@ -0,0 +1,6 @@
+{
+  "parent": "minecraft:item/generated",
+  "textures": {
+    "layer0": "unicopia:item/crystal_door"
+  }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/unicopia/models/item/dark_oak_stable_door.json b/src/main/resources/assets/unicopia/models/item/dark_oak_stable_door.json
new file mode 100644
index 00000000..6e363cb1
--- /dev/null
+++ b/src/main/resources/assets/unicopia/models/item/dark_oak_stable_door.json
@@ -0,0 +1,6 @@
+{
+  "parent": "minecraft:item/generated",
+  "textures": {
+    "layer0": "unicopia:item/dark_oak_stable_door"
+  }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/unicopia/models/item/stable_door.json b/src/main/resources/assets/unicopia/models/item/stable_door.json
new file mode 100644
index 00000000..91dffae0
--- /dev/null
+++ b/src/main/resources/assets/unicopia/models/item/stable_door.json
@@ -0,0 +1,6 @@
+{
+  "parent": "minecraft:item/generated",
+  "textures": {
+    "layer0": "unicopia:item/stable_door"
+  }
+}
\ No newline at end of file
diff --git a/src/main/resources/assets/unicopia/textures/block/cloud_door_lower.png b/src/main/resources/assets/unicopia/textures/block/cloud_door_lower.png
new file mode 100644
index 0000000000000000000000000000000000000000..e6abc40dd15e98507b7f56ed3192b34387a931be
GIT binary patch
literal 6616
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

literal 0
HcmV?d00001

diff --git a/src/main/resources/assets/unicopia/textures/block/cloud_door_upper.png b/src/main/resources/assets/unicopia/textures/block/cloud_door_upper.png
new file mode 100644
index 0000000000000000000000000000000000000000..5f399b3fa1385c3671e5b24fc474e625a017cd75
GIT binary patch
literal 6743
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

literal 0
HcmV?d00001

diff --git a/src/main/resources/assets/unicopia/textures/block/crystal_door_lower.png b/src/main/resources/assets/unicopia/textures/block/crystal_door_lower.png
new file mode 100644
index 0000000000000000000000000000000000000000..d249aba7f1bb0dd723975bf4c514986fd15c749a
GIT binary patch
literal 537
zcmV+!0_OdRP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0005tNkl<ZILm#L
zv2GJV7=*t)JN8|yJ6VTZ5FtZjWCh7k5g{cK1s!>b6r^?<ze8N{20TF|ij*l31y+zK
zu!MAiCb7UNEF9-fw$D!NpW@if*)jah&d#oOXXl?)uYY%iRE1G8^;~s_)1}uwe>)=!
z(DaLJ;;`GlV6U75;OO$2reCDdA1rVi_Kf=aJpf)pa=<1I`=g%<GIDfzZEkEZAdG~T
z9n+07gpqLUKj7fzO1;VE1bqNN(6a=DpmWY79viuN+ac&+xc$<cLe7;_83K?EBVm^d
zzJ3qL+YX1@6#(_FGZoKOgpsgU&e0mjD(G4A{>wQ4wPYWbHskH9nyQu`0??kVv0N`4
z8-T;@3eTTBQuUKIlX#5fxrz@v&y2fUs$lSjJ-fqgsRCgnJbhffRq(GW<XnSW<9KB&
ztuPW!Wk`FrhQ`BbWICa_G}h|!w)1}l!)dgVuXyVQTRI?VsoJnr@-^<p87A@gHU~e#
zk$A468)v}5Yy$Z^0ti9R!gEKmpa9_5zi-~DGoZ~1BO#1L0IH=qO~1J4K^O@KH&;rB
zMrXh27Xb{X6*l?<r8}f{&VHH1rEg5*YH4o%LN$ppwahj3lQydK@smK3^}L-te)%t?
bx#jsE28H@?uAbZ^00000NkvXXu0mjfkQety

literal 0
HcmV?d00001

diff --git a/src/main/resources/assets/unicopia/textures/block/crystal_door_upper.png b/src/main/resources/assets/unicopia/textures/block/crystal_door_upper.png
new file mode 100644
index 0000000000000000000000000000000000000000..d8aed2074f180d257bce7b34d2986ab2f398585b
GIT binary patch
literal 886
zcmV-+1Bv{JP)<h;3K|Lk000e1NJLTq000mG002M;1^@s66MgrV0009$Nkl<ZSi|j?
zO=}xh6o#KG8_!IPWT8}rm^Sq$#frfV2n;eAQ)nFs&Z2)IS!AtM^BW=vWS>PASsT2t
zH~uIg4izbAVMDNRHnNSB5aT$Ea5ai*-7ZG=W@hy1MM4(3t9y<#=YE{?KAbC-PAU@L
zaH^gei;6a%8tS)yUY8gJ$R*-j$KuY1x7@ut2Eg)ZgYCi|hH3He<~8k`G|$Oix(vXt
z;03sj#k1Nw0m$XkM%#+{noGqU!Kq4C6F>0i>`2@m|4yO;06cl$lmNxU1L|%q5MZTn
zq<#03O~#Fwd?n8S7<H<WJG^CQzldR4)ZH3(It9RXVXw_zDI5VX+d9^$x(q<wnp{m>
z0bqhX07A9^$ZqaRfJiJVcy8YSkaIIrdfN*Jm5%f0_6_Q8P5$!p^yeL9Hu4yz1%P2%
zOl<t6KQK&-;^6@k`^A87r)5W+s?=w9s#2%SPN&E(W|*6q(ido_Q@oOA)ZH3}X<?X_
zw}Xc_ukqmJ8@<Bg-)G5g?vnA@{$ZFFf24n8rEug0SUzpwKfhWnmx%M{hmYE)YGiI^
zii!($w?>5EkWUXk=^FNb{Pge>PE`sZP-QxRN>wXJAga%n)5#{eM4U<U9K*D{0Ikv$
zPE~UE>X_C;E)fUNzF1UHaYy*CaW2Nkq5ufHRF<)*2&gbTpH4Ql7N(O;#>b+}jx@+_
z?jn*e{+57Fjhg#!-0ut9;@jbY5JD`SR0iUK5JJ3`{|0$rm&($q%7J*0ZG8L!JaBIP
zCIDjVTRnMjyfE+aV0|mdgILQE)_*5Ew!YPy2Rr*kt^W)0KuH@QznH;Jr`mYnFS?#Q
z$ZX{GYJMK9_2R*rKlh87fSlF;fbKk4I;qHek)#N-KuLP-@}#g!<=#B7OXaRSuuJ9c
zJP<+*%!3(mX~=^i5Bl?<9~1iWAlx5(znyQZjlMjv(<$t9N_8X`=fQ)QZ>YO9GNJxp
zU>>M`A(x1wQg$I8gnNV`4~9JWqCANBd7!kunz#};hPQRE(2f`8#qq+t$Zqa>rQD4N
zFMgWrIRCml==5F~m<Qe73t=8adc7A^m(saE80pW0@Oxp%gU&qoAMQxpxPs)3^8f$<
M07*qoM6N<$g5-U$X8-^I

literal 0
HcmV?d00001

diff --git a/src/main/resources/assets/unicopia/textures/block/crystal_door_upper.png.mcmeta b/src/main/resources/assets/unicopia/textures/block/crystal_door_upper.png.mcmeta
new file mode 100644
index 00000000..66de2f42
--- /dev/null
+++ b/src/main/resources/assets/unicopia/textures/block/crystal_door_upper.png.mcmeta
@@ -0,0 +1,11 @@
+{
+  "animation": {
+    "frametime": 200,
+    "frames": [
+       0, 1, 2, 3,
+       1, 2, 3, 0,
+       2, 3, 0, 1,
+       3, 0, 1, 2
+     ]
+  }
+}
diff --git a/src/main/resources/assets/unicopia/textures/block/dark_oak_stable_door_lower.png b/src/main/resources/assets/unicopia/textures/block/dark_oak_stable_door_lower.png
new file mode 100644
index 0000000000000000000000000000000000000000..e044dc31109bba93a7cc3f4aa7942d66e0de6171
GIT binary patch
literal 610
zcmV-o0-gPdP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0006hNkl<ZILmdD
zy>3)75Ju08efNglB;;?i6cI=?G(d%f6gqed-i#^|6%PRt4IK@XNC+Vagv}<Kgpl3q
zYkMes*(3$i&1lB<cjmJ^e|q1VXoQ#;)DAOH5kw$F!+_cgW+1|~`22MrKYZ|vPj6q*
z#LT&Y3OE&FGQ1N)%!|Rjy$SE$!^;=jn8CbF==kFs{ugG~^E*56<k9t-PuXZ<=J-6I
zQieo@mD*8xM~=qycMHJ7$EyJJs!-$tzRgDE1Ql3bsu<Lc{pp;I;fUGk5#A|n&fMPY
z1BK7V){x2Jn3MzBbAomv%?vZBoZv-BW?)dM0uYlCQw9pBlnr$%WHWN7H>6DMmE1A#
zPH+xV*O0otlnoWZUj_1~iP*d_n2Zll71Svy!NJL#%9od%efiGKeuZ~e4p?3CY>#fy
z^TIqDU`)ops2o&Yxp#MmCK^j#XreJa8dEvN&!f>s<8;;%e*9#8P?55+wmHNM+D`NF
zWXwgAsJybWwuS4s>9<**kTNPl<*qo+KtzC&w9yK<WaZ}0WV*Y%TQ&d-jUg7OJueGy
zsKSk&L!{IJayI<Ihu28AU$0Uw1iULX=LDmy(}12=+Gym?ral*mEZ2_J_2B|yNVZs2
zzpfaLM%N&QSY-Q<G6oE4&)M{lf4)fR@*_BblcPgYHhwjU+AH&rQ3XGpjG3MXE}Ddy
wp?c}cCT4n0nYD?FkccVcR5(6Q#9UbX1$)UV6@0~^CjbBd07*qoM6N<$g0IpaGXMYp

literal 0
HcmV?d00001

diff --git a/src/main/resources/assets/unicopia/textures/block/dark_oak_stable_door_upper.png b/src/main/resources/assets/unicopia/textures/block/dark_oak_stable_door_upper.png
new file mode 100644
index 0000000000000000000000000000000000000000..b558a995b264a4886f2fa6b0b3d38e7de81fb61f
GIT binary patch
literal 631
zcmV--0*L*IP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0006$Nkl<ZILlR&
zziwPr5XOHqbIv`x>v(OET`v-%p`qakTu{)3N8q{WkV1vTL(tNth>$1{3X&rek>F%W
zVtc*!o-;#nuj6>6sYc(N@6R0h?whY-UxU6j4vG;0DuM{~H3*<2Ap%6WSI^G=CSCW=
z)!PgD>I~T!nv+aW5&pX#m}jG8#Up4A+3vRNtCRZbxCd`8dy)zsfd?GTGhI?jR-V7U
zreuSOMVFN0MFt=(=f?J0NGhzCMO1{LIji+aoWJ;oo1p=)Sr%y?033a?j`!OOng{yq
zazVtMuD&@pg9EVWjOJh>+=2o0BQNyy^b`OQL8nPfdaFD8+Q>;K;3)Cq(icyEp?ZLf
zK;Rx=mJI;+z$38f5fNxDNZEvJf_rdyypApjH#KlZKuOA*!C7xMv9G}_3Husj0!c`>
zRF<>EU(e6Syj3_XMgZAHM!)@W_JNtHaJ0x|Q*_slhHb9~0J-he$*0Ua!&KOhNqm@n
z@%d+zq`cczQgz22%!JipA%c5G?FT2D@L;-&Tc13FSys~Jz9Al{+$8|enNZubXo{^i
zM-T#N9&}03<t%Yi8y=2|FieA?1<iw!6;mafU@DZXB!j+=($hgPwkj-2;`rez=EF#B
zH#ps7+Jj=8oNVIfpMK};9DaTBiXXmTjSK#KKW7fiv+?rfD^%c0g*q|mt7EFX+g|YK
z+YSBTJpS=t9_#c&zy9)JyuR!y*@%dH*SN1vXUcA99F#<Dj;XNg8`Ysp!vC6-Ce(vl
R-hKc8002ovPDHLkV1i4xF9iSq

literal 0
HcmV?d00001

diff --git a/src/main/resources/assets/unicopia/textures/block/stable_door_lower.png b/src/main/resources/assets/unicopia/textures/block/stable_door_lower.png
new file mode 100644
index 0000000000000000000000000000000000000000..cf8b541b86bc0cfa02899babbfadfeb0b5950aac
GIT binary patch
literal 590
zcmV-U0<ryxP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0006NNkl<ZILmF4
z%}!K75Jpc`^<@}lBH%~@3nL`NWZuNJZ{m~qCh``pTx(oFn3V?60fX~%ySvK8y$k`Z
zO?N6))m`6r<ineHu~Mf-VH8FcMG+*R)xZh1T?qjR9>x0nJL&rEl%w|_$&m>$EWkvl
z5e!8r?g$m>n@kjd5F^($Iyw8o|3acr+)*lyVWK$pPhE0?9GSbarjSTl0Vr;O_hsGr
zBBf1Zu4}45%2F91SU{1kF==Je3?6okN;*D(%O9IuV*{eB(IyO$Zt_@-gJzrJ#%*0Z
zeDnB#W;XA3k4^(ca00auA_`UD&MP@GJF1Lz$ZcIvUp=Q>ToF-Nxbw5Nl;Z=OKt#}|
zqTH0axsP>-&3*xJUAh4i+XA3QL3uJ@tj55Eh5IH~qceXm8GENkj~!4&msTh!xRa%8
z+&ev@5yeDEy#tLjl#46s$)x9@(@j6UPUL7oyTtJ1kaBU=vrxGyD^|YVyy}<NG_yI1
zki*gGbPB-0l;O!C&1_E6dp%a{+JOCL%sk(*^7Uh!UD5rs&q#EHb%Iq)67zh=sM!Gw
zsO&Z)0RGfvZ)dqDQ8%1-%qh3|598C9EUmEZ%1WJKO_)8Se*M;q>!69$lG&06>l9(P
z8KJW|DGDNqM6is)SQ5)LAcxZiByUN>^EtmuA*IARFOl8}^&VkuXuV}%iMB2=QEqCc
cO~w|%UwO+5AP1*qkN^Mx07*qoM6N<$f}kA?#sB~S

literal 0
HcmV?d00001

diff --git a/src/main/resources/assets/unicopia/textures/block/stable_door_upper.png b/src/main/resources/assets/unicopia/textures/block/stable_door_upper.png
new file mode 100644
index 0000000000000000000000000000000000000000..69ef5b6a468014c0cc5a1ec130cfb96b68c547e7
GIT binary patch
literal 502
zcmV<S0SW$zP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0005KNkl<ZILlSi
zO>Pu15XJF-mF=FOL?Ig_wusf7feUaQE(R-3kTbA@utfsFXu>FoKkBjQ#G$?V$=!N>
zW!XNy|DbyhhC1g;1df?ug6bj=XW_`e#AZEw`$0aX!R5_wnu1~rJqF2yS*DIV&U{BP
zN9uG>6xj^;tBN-T5yox1=RuW9@T;D9P{k~BsJ8&zNgVEvGzF(|H$(g?oMa+dremZx
zuK>1=I$g}Mx32*h5`Mi;Kmy=}WdO|b#?5@XM<x9?hVS?LM>!FV?vPy@k5Q+e!e+qB
zPhaSCV9X}#dUi>9dW<?96uijE7(@VLz3s>wFO=z$GSx*>!)eSuLxrJ0mPl!B@NA|R
z3Q6l`cE|5MW~If~s=as8<E!btV`kHHEGwK8_)uTdtv!GI@0N><rkH*TlR7(rAH6dq
z@WPO>lLKR8V7e)g1(MbgE@Pp_1J)`5G!tasxR_4^ED<!V!G5kx#wevc{ut0><EEGf
zsP34RHQ@U39qnwvEV%gkhl}N$PUq@oHNe%)k*l-S=id)FAj{-;pMP@fot%Ldn60OH
sz(IrTg*GZn&S(V5oWp3;oLEBq12TsduM|4_{{R3007*qoM6N<$f&<g+TmS$7

literal 0
HcmV?d00001

diff --git a/src/main/resources/assets/unicopia/textures/item/cloud_door.png b/src/main/resources/assets/unicopia/textures/item/cloud_door.png
new file mode 100644
index 0000000000000000000000000000000000000000..c7839077bce056c30d2b145566040a5788412e84
GIT binary patch
literal 245
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`dpunnLo7}o4Kn0wHsIN_K<iZ6
zMAcZy&;NVl4N_BdxdXR#wEFcm%$l;z+4gAP`*T*(Kgw6+ev&x;mFva5Qr7D-_Q~fu
zES-fNg{PWd@4x85b+0;gt*+L!sHc0wgWj(-do}He&a8M}5l$6jXO7jy?`#>(TLrG^
zR!FdYsf~|+Y;&H~#8;SMfoa<Fx@@1?UWN@zww#VmURQnKRQ${nr)-S+<%`==629_D
tJm}c4q{Ql`W+TglJwIMdFuCacmeYBUPp3{XR~^tF44$rjF6*2UngFE1VqpLP

literal 0
HcmV?d00001

diff --git a/src/main/resources/assets/unicopia/textures/item/crystal_door.png b/src/main/resources/assets/unicopia/textures/item/crystal_door.png
new file mode 100644
index 0000000000000000000000000000000000000000..96e93768f0ee2980d7c30ed62d0cb0ac53fdd8a7
GIT binary patch
literal 219
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`i#%N%Lo7}wCrD%*=s5H9KM;7n
ze<yflivAj&>&IJk7FOp8&(S?`lJ#(pftguD(t%WE`x$A+BK$bnKp-V*!sKqj^^7+T
zJbJJH;gs=2p@jGQ>y>Xc{P!^X-@emj!sOTXyPU+5lGx9({^ykX@bCBb|3|92TO(R4
zoxCELr)DrGaPrvN3gj{ba&lU#E?VmL=n`X)*OAqn`DsdC!ph1q@(e8b`e8aj%l80X
O%i!ti=d#Wzp$Pygol{T%

literal 0
HcmV?d00001

diff --git a/src/main/resources/assets/unicopia/textures/item/dark_oak_stable_door.png b/src/main/resources/assets/unicopia/textures/item/dark_oak_stable_door.png
new file mode 100644
index 0000000000000000000000000000000000000000..a9bbe2eacf231268b87809e4b679e08b9c2664d5
GIT binary patch
literal 218
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`3q4&NLo7}wCrD%*=r|KN`N6;S
zx`+J(F8?w<|KQh*395N=-;xu6;K!fG{K`DZkCmB4n6KoTPkh5FmeaIHM(6*>kDO8s
zZ$jeuru~0WGbgU0mC<ZN^<Lw{@4lYnacO1LXFpvp;kHS%jkB6jnxo66BUC2b<dC6J
z{oSH!wys4NO$+odUhJ6ezfC-$W{zIK_Pa+G0PUZ|ZIH6g?x#mk5F3N5WUPw1!JCsn
P$1-@j`njxgN@xNAi-uIC

literal 0
HcmV?d00001

diff --git a/src/main/resources/assets/unicopia/textures/item/stable_door.png b/src/main/resources/assets/unicopia/textures/item/stable_door.png
new file mode 100644
index 0000000000000000000000000000000000000000..d3db43a8821ac290d5a6bf6620175911ab92354f
GIT binary patch
literal 185
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`4W2HJAr_~T6C^SYbexHNHueAi
z-)F^HOjYm4a$Y~)qVrMJVRj=31jjPz_woerJh)jfHAUYbP>QYj0)t;ECtHM1!s3g}
zlUVOEJjrkg>&cUd(?4LcC|gOQ_Xp3xWs>U|Uq}@$4OpWo7;9|j9AOZoG%e!5hg-2W
g8yn8=zrnzuGQ-Ypp<2&8pj#L`UHx3vIVCg!05T>*4FCWD

literal 0
HcmV?d00001

diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/cloud_door.json b/src/main/resources/data/unicopia/loot_tables/blocks/cloud_door.json
new file mode 100644
index 00000000..2d948321
--- /dev/null
+++ b/src/main/resources/data/unicopia/loot_tables/blocks/cloud_door.json
@@ -0,0 +1,29 @@
+{
+  "type": "minecraft:block",
+  "pools": [
+    {
+      "bonus_rolls": 0.0,
+      "conditions": [
+        {
+          "condition": "minecraft:survives_explosion"
+        }
+      ],
+      "entries": [
+        {
+          "type": "minecraft:item",
+          "conditions": [
+            {
+              "block": "unicopia:cloud_door",
+              "condition": "minecraft:block_state_property",
+              "properties": {
+                "half": "lower"
+              }
+            }
+          ],
+          "name": "unicopia:cloud_door"
+        }
+      ],
+      "rolls": 1.0
+    }
+  ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/compacted_cloud_planks.json b/src/main/resources/data/unicopia/loot_tables/blocks/compacted_cloud_planks.json
deleted file mode 100644
index e0208139..00000000
--- a/src/main/resources/data/unicopia/loot_tables/blocks/compacted_cloud_planks.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
-  "type": "minecraft:block",
-  "pools": [
-    {
-      "rolls": 1.0,
-      "bonus_rolls": 0.0,
-      "entries": [
-        {
-          "type": "minecraft:item",
-          "name": "unicopia:cloud_planks"
-        }
-      ],
-      "conditions": [
-        {
-          "condition": "minecraft:survives_explosion"
-        }
-      ]
-    }
-  ]
-}
\ No newline at end of file
diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/crystal_door.json b/src/main/resources/data/unicopia/loot_tables/blocks/crystal_door.json
new file mode 100644
index 00000000..15fd1392
--- /dev/null
+++ b/src/main/resources/data/unicopia/loot_tables/blocks/crystal_door.json
@@ -0,0 +1,29 @@
+{
+  "type": "minecraft:block",
+  "pools": [
+    {
+      "bonus_rolls": 0.0,
+      "conditions": [
+        {
+          "condition": "minecraft:survives_explosion"
+        }
+      ],
+      "entries": [
+        {
+          "type": "minecraft:item",
+          "conditions": [
+            {
+              "block": "unicopia:crystal_door",
+              "condition": "minecraft:block_state_property",
+              "properties": {
+                "half": "lower"
+              }
+            }
+          ],
+          "name": "unicopia:crystal_door"
+        }
+      ],
+      "rolls": 1.0
+    }
+  ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/darK_oak_stable_door.json b/src/main/resources/data/unicopia/loot_tables/blocks/darK_oak_stable_door.json
new file mode 100644
index 00000000..f758c3e2
--- /dev/null
+++ b/src/main/resources/data/unicopia/loot_tables/blocks/darK_oak_stable_door.json
@@ -0,0 +1,29 @@
+{
+  "type": "minecraft:block",
+  "pools": [
+    {
+      "bonus_rolls": 0.0,
+      "conditions": [
+        {
+          "condition": "minecraft:survives_explosion"
+        }
+      ],
+      "entries": [
+        {
+          "type": "minecraft:item",
+          "conditions": [
+            {
+              "block": "unicopia:darK_oak_stable_door",
+              "condition": "minecraft:block_state_property",
+              "properties": {
+                "half": "lower"
+              }
+            }
+          ],
+          "name": "unicopia:darK_oak_stable_door"
+        }
+      ],
+      "rolls": 1.0
+    }
+  ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/compacted_cloud.json b/src/main/resources/data/unicopia/loot_tables/blocks/etched_cloud.json
similarity index 94%
rename from src/main/resources/data/unicopia/loot_tables/blocks/compacted_cloud.json
rename to src/main/resources/data/unicopia/loot_tables/blocks/etched_cloud.json
index 282d5ec9..163e3667 100644
--- a/src/main/resources/data/unicopia/loot_tables/blocks/compacted_cloud.json
+++ b/src/main/resources/data/unicopia/loot_tables/blocks/etched_cloud.json
@@ -11,7 +11,7 @@
           "functions": [
             {
               "add": false,
-              "count": 4,
+              "count": 9,
               "function": "minecraft:set_count"
             }
           ]
diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/etched_cloud_slab.json b/src/main/resources/data/unicopia/loot_tables/blocks/etched_cloud_slab.json
new file mode 100644
index 00000000..4465e094
--- /dev/null
+++ b/src/main/resources/data/unicopia/loot_tables/blocks/etched_cloud_slab.json
@@ -0,0 +1,41 @@
+{
+  "type": "minecraft:block",
+  "pools": [
+    {
+      "rolls": 1.0,
+      "bonus_rolls": 0.0,
+      "entries": [
+        {
+          "type": "minecraft:item",
+          "name": "unicopia:cloud_lump",
+          "functions": [
+            {
+              "add": false,
+              "count": 4,
+              "function": "minecraft:set_count"
+            },
+            {
+              "add": false,
+              "count": 8,
+              "function": "minecraft:set_count",
+              "conditions": [
+                {
+                  "block": "unicopia:etched_cloud_slab",
+                  "condition": "minecraft:block_state_property",
+                  "properties": {
+                    "type": "double"
+                  }
+                }
+              ]
+            }
+          ]
+        }
+      ],
+      "conditions": [
+        {
+          "condition": "minecraft:survives_explosion"
+        }
+      ]
+    }
+  ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/compacted_cloud_bricks.json b/src/main/resources/data/unicopia/loot_tables/blocks/etched_cloud_stairs.json
similarity index 58%
rename from src/main/resources/data/unicopia/loot_tables/blocks/compacted_cloud_bricks.json
rename to src/main/resources/data/unicopia/loot_tables/blocks/etched_cloud_stairs.json
index bd4602d9..80ba3be4 100644
--- a/src/main/resources/data/unicopia/loot_tables/blocks/compacted_cloud_bricks.json
+++ b/src/main/resources/data/unicopia/loot_tables/blocks/etched_cloud_stairs.json
@@ -7,7 +7,14 @@
       "entries": [
         {
           "type": "minecraft:item",
-          "name": "unicopia:cloud_bricks"
+          "name": "unicopia:cloud_lump",
+          "functions": [
+            {
+              "add": false,
+              "count": 13,
+              "function": "minecraft:set_count"
+            }
+          ]
         }
       ],
       "conditions": [
diff --git a/src/main/resources/data/unicopia/loot_tables/blocks/stable_door.json b/src/main/resources/data/unicopia/loot_tables/blocks/stable_door.json
new file mode 100644
index 00000000..edeff07c
--- /dev/null
+++ b/src/main/resources/data/unicopia/loot_tables/blocks/stable_door.json
@@ -0,0 +1,29 @@
+{
+  "type": "minecraft:block",
+  "pools": [
+    {
+      "bonus_rolls": 0.0,
+      "conditions": [
+        {
+          "condition": "minecraft:survives_explosion"
+        }
+      ],
+      "entries": [
+        {
+          "type": "minecraft:item",
+          "conditions": [
+            {
+              "block": "unicopia:stable_door",
+              "condition": "minecraft:block_state_property",
+              "properties": {
+                "half": "lower"
+              }
+            }
+          ],
+          "name": "unicopia:stable_door"
+        }
+      ],
+      "rolls": 1.0
+    }
+  ]
+}
\ No newline at end of file
diff --git a/src/main/resources/data/unicopia/recipes/crystal_door.json b/src/main/resources/data/unicopia/recipes/crystal_door.json
new file mode 100644
index 00000000..0d952926
--- /dev/null
+++ b/src/main/resources/data/unicopia/recipes/crystal_door.json
@@ -0,0 +1,16 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+  	"**",
+  	"**",
+  	"**"
+  ],
+  "key": {
+  	"*": {
+  		"item": "unicopia:crystal_shard"
+  	}
+  },
+  "result": {
+  	"item": "unicopia:crystal_door"
+  }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/unicopia/recipes/dark_oak_stable_door.json b/src/main/resources/data/unicopia/recipes/dark_oak_stable_door.json
new file mode 100644
index 00000000..21aef6a2
--- /dev/null
+++ b/src/main/resources/data/unicopia/recipes/dark_oak_stable_door.json
@@ -0,0 +1,19 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+  	"*#*",
+  	"*#*",
+  	"*#*"
+  ],
+  "key": {
+  	"*": {
+  		"item": "unicopia:rock"
+  	},
+  	"#": {
+      "tag": "minecraft:planks"
+    }
+  },
+  "result": {
+  	"item": "unicopia:dark_oak_stable_door"
+  }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/unicopia/recipes/stable_door.json b/src/main/resources/data/unicopia/recipes/stable_door.json
new file mode 100644
index 00000000..c1acd242
--- /dev/null
+++ b/src/main/resources/data/unicopia/recipes/stable_door.json
@@ -0,0 +1,19 @@
+{
+  "type": "minecraft:crafting_shaped",
+  "pattern": [
+  	"*#*",
+  	"*#*",
+  	"*#*"
+  ],
+  "key": {
+  	"*": {
+  		"item": "unicopia:rock_candy"
+  	},
+    "#": {
+      "tag": "minecraft:planks"
+    }
+  },
+  "result": {
+  	"item": "unicopia:stable_door"
+  }
+}
\ No newline at end of file
diff --git a/src/main/resources/data/unicopia/tags/items/cloud_slabs.json b/src/main/resources/data/unicopia/tags/items/cloud_slabs.json
index bbf14745..a7337a0e 100644
--- a/src/main/resources/data/unicopia/tags/items/cloud_slabs.json
+++ b/src/main/resources/data/unicopia/tags/items/cloud_slabs.json
@@ -3,7 +3,7 @@
   "values": [
     "unicopia:cloud_slab",
     "unicopia:dense_cloud_slab",
-    "unicopia:etched_cloud_slab"
+    "unicopia:etched_cloud_slab",
     "unicopia:cloud_plank_slab"
   ]
 }
diff --git a/src/main/resources/data/unicopia/tags/items/clouds.json b/src/main/resources/data/unicopia/tags/items/clouds.json
index d77163af..7fe9a915 100644
--- a/src/main/resources/data/unicopia/tags/items/clouds.json
+++ b/src/main/resources/data/unicopia/tags/items/clouds.json
@@ -7,6 +7,7 @@
     "unicopia:cloud_bricks",
     "unicopia:dense_cloud",
     "unicopia:etched_cloud",
-    "unicopia:unstable_cloud"
+    "unicopia:unstable_cloud",
+    "unicopia:cloud_door"
   ]
 }
diff --git a/src/main/resources/data/unicopia/tags/items/groups/changeling.json b/src/main/resources/data/unicopia/tags/items/groups/changeling.json
index cea725a9..3cc31831 100644
--- a/src/main/resources/data/unicopia/tags/items/groups/changeling.json
+++ b/src/main/resources/data/unicopia/tags/items/groups/changeling.json
@@ -11,6 +11,7 @@
     "unicopia:chitin_spikes",
     "unicopia:mysterious_egg",
     "unicopia:hive",
+    "unicopia:dark_oak_stable_door",
     "#unicopia:food_types/cooked_meat",
     "#unicopia:food_types/raw_meat",
     "#unicopia:food_types/raw_insect",
diff --git a/src/main/resources/data/unicopia/tags/items/groups/earth_pony.json b/src/main/resources/data/unicopia/tags/items/groups/earth_pony.json
index 84d6b64b..54ec96ce 100644
--- a/src/main/resources/data/unicopia/tags/items/groups/earth_pony.json
+++ b/src/main/resources/data/unicopia/tags/items/groups/earth_pony.json
@@ -10,6 +10,8 @@
     "unicopia:stripped_zap_log",
     "unicopia:stripped_zap_wood",
     "unicopia:candied_apple",
+    "unicopia:stable_door",
+    "unicopia:dark_oak_stable_door",
     "minecraft:apple",
     "unicopia:green_apple",
     "unicopia:sweet_apple",
diff --git a/src/main/resources/data/unicopia/tags/items/groups/pegasus.json b/src/main/resources/data/unicopia/tags/items/groups/pegasus.json
index 154bfd88..b76a934d 100644
--- a/src/main/resources/data/unicopia/tags/items/groups/pegasus.json
+++ b/src/main/resources/data/unicopia/tags/items/groups/pegasus.json
@@ -21,6 +21,7 @@
     "unicopia:etched_cloud_stairs",
     "unicopia:unstable_cloud",
     "unicopia:cloud_pillar",
+    "unicopia:cloud_door",
     "unicopia:cloud_bed",
     "#unicopia:bed_sheets",
     "#unicopia:food_types/raw_fish",
diff --git a/src/main/resources/data/unicopia/tags/items/groups/unicorn.json b/src/main/resources/data/unicopia/tags/items/groups/unicorn.json
index bf9762e2..79b0cb95 100644
--- a/src/main/resources/data/unicopia/tags/items/groups/unicorn.json
+++ b/src/main/resources/data/unicopia/tags/items/groups/unicorn.json
@@ -1,16 +1,17 @@
 {
   "replace": false,
   "values": [
+    "unicopia:spellbook",
+    "unicopia:gemstone",
+    "unicopia:botched_gem",
     "unicopia:friendship_bracelet",
     "unicopia:crystal_heart",
     "unicopia:crystal_shard",
-    "unicopia:gemstone",
-    "unicopia:botched_gem",
-    "unicopia:magic_staff",
-    "unicopia:dragon_breath_scroll",
-    "unicopia:spellbook",
+    "unicopia:crystal_door",
     "unicopia:meadowbrooks_staff",
+    "unicopia:magic_staff",
     "unicopia:grogars_bell",
+    "unicopia:dragon_breath_scroll",
     "unicopia:pegasus_amulet",
     "unicopia:alicorn_amulet",
     "unicopia:broken_alicorn_amulet",