diff --git a/pom.xml b/pom.xml
index fc494f7..e9111aa 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,6 +28,18 @@
jline-reader
3.20.0
+
+
+ org.reflections
+ reflections
+ 0.10.2
+
+
+
+ com.google.guava
+ guava
+ 31.1-jre
+
diff --git a/src/main/java/cz/jzitnik/game/Dependencies.java b/src/main/java/cz/jzitnik/game/Dependencies.java
new file mode 100644
index 0000000..62e6837
--- /dev/null
+++ b/src/main/java/cz/jzitnik/game/Dependencies.java
@@ -0,0 +1,7 @@
+package cz.jzitnik.game;
+
+import cz.jzitnik.game.handlers.place.PlaceHandler;
+
+public class Dependencies {
+ public PlaceHandler placeHandler = new PlaceHandler();
+}
diff --git a/src/main/java/cz/jzitnik/game/Game.java b/src/main/java/cz/jzitnik/game/Game.java
index 364c4c2..5b3675c 100644
--- a/src/main/java/cz/jzitnik/game/Game.java
+++ b/src/main/java/cz/jzitnik/game/Game.java
@@ -1,14 +1,16 @@
package cz.jzitnik.game;
+import cz.jzitnik.game.generation.Generation;
import cz.jzitnik.game.items.Item;
import cz.jzitnik.game.items.ItemType;
+import cz.jzitnik.game.handlers.place.CustomPlaceHandler;
import cz.jzitnik.game.sprites.Breaking;
import cz.jzitnik.game.sprites.Steve;
import cz.jzitnik.game.ui.Chest;
import cz.jzitnik.game.ui.Furnace;
import cz.jzitnik.game.ui.Window;
import cz.jzitnik.game.ui.Inventory;
-import cz.jzitnik.tui.RightClickHandler;
+import cz.jzitnik.game.handlers.rightclick.RightClickHandler;
import cz.jzitnik.tui.ScreenMovingCalculationProvider;
import cz.jzitnik.tui.ScreenRenderer;
import lombok.Getter;
@@ -20,11 +22,9 @@ import java.util.List;
@Getter
public class Game {
- private List[][] world = new ArrayList[256][512];
- @Setter
- private Block player;
- @Setter
- private Block player2;
+ @SuppressWarnings("unchecked")
+ private final List[][] world = (List[][]) new ArrayList[256][512];
+ private final Player player = new Player();
private boolean mining = false;
@Setter
private Window window = Window.WORLD;
@@ -61,10 +61,10 @@ public class Game {
return;
}
- world[cords[1]][cords[0] + 1].add(player2);
- world[cords[1]][cords[0]].remove(player2);
- world[cords[1]-1][cords[0] + 1].add(player);
- world[cords[1]-1][cords[0]].remove(player);
+ world[cords[1]][cords[0] + 1].add(player.getPlayerBlock2());
+ world[cords[1]][cords[0]].remove(player.getPlayerBlock2());
+ world[cords[1]-1][cords[0] + 1].add(player.getPlayerBlock1());
+ world[cords[1]-1][cords[0]].remove(player.getPlayerBlock1());
screenRenderer.render(this);
update(screenRenderer);
@@ -80,10 +80,10 @@ public class Game {
return;
}
- world[cords[1]][cords[0] - 1].add(player2);
- world[cords[1]][cords[0]].remove(player2);
- world[cords[1]-1][cords[0] - 1].add(player);
- world[cords[1]-1][cords[0]].remove(player);
+ world[cords[1]][cords[0] - 1].add(player.getPlayerBlock2());
+ world[cords[1]][cords[0]].remove(player.getPlayerBlock2());
+ world[cords[1]-1][cords[0] - 1].add(player.getPlayerBlock1());
+ world[cords[1]-1][cords[0]].remove(player.getPlayerBlock1());
screenRenderer.render(this);
update(screenRenderer);
@@ -95,14 +95,14 @@ public class Game {
}
int[] cords = getPlayerCords();
- if (world[cords[1] - 2][cords[0]].stream().anyMatch(block -> !block.isGhost()) || world[cords[1] + 1][cords[0]].stream().anyMatch(Block::isGhost)) {
+ if (world[cords[1] - 2][cords[0]].stream().anyMatch(block -> !block.isGhost()) || world[cords[1] + 1][cords[0]].stream().allMatch(Block::isGhost)) {
return;
}
- world[cords[1] - 1][cords[0]].remove(player);
- world[cords[1] - 1][cords[0]].add(player2);
- world[cords[1] - 2][cords[0]].add(player);
- world[cords[1]][cords[0]].remove(player2);
+ world[cords[1] - 1][cords[0]].remove(player.getPlayerBlock1());
+ world[cords[1] - 1][cords[0]].add(player.getPlayerBlock2());
+ world[cords[1] - 2][cords[0]].add(player.getPlayerBlock1());
+ world[cords[1]][cords[0]].remove(player.getPlayerBlock2());
new Thread(() -> {
try {
@@ -113,10 +113,10 @@ public class Game {
int[] cords2 = getPlayerCords();
if (world[cords2[1] + 1][cords2[0]].stream().allMatch(Block::isGhost)) {
- world[cords2[1] - 1][cords2[0]].remove(player);
- world[cords2[1]][cords2[0]].add(player);
- world[cords2[1] + 1][cords2[0]].add(player2);
- world[cords2[1]][cords2[0]].remove(player2);
+ world[cords2[1] - 1][cords2[0]].remove(player.getPlayerBlock1());
+ world[cords2[1]][cords2[0]].add(player.getPlayerBlock1());
+ world[cords2[1] + 1][cords2[0]].add(player.getPlayerBlock2());
+ world[cords2[1]][cords2[0]].remove(player.getPlayerBlock2());
screenRenderer.render(this);
}
@@ -132,7 +132,7 @@ public class Game {
world[y][x].add(breakingBlock);
screenRenderer.render(this);
- double hardness = world[y][x].stream().filter(block -> !block.isGhost()).toList().get(0).calculateHardness(inventory);
+ double hardness = world[y][x].stream().filter(block -> !block.isGhost()).toList().getFirst().calculateHardness(inventory);
this.mining = true;
@@ -187,9 +187,10 @@ public class Game {
}
}
- blocks.clear();
- blocks.add(new Block("air", SpriteLoader.SPRITES.AIR, true, false));
+ CustomPlaceHandler customPlaceHandler = gameStates.dependencies.placeHandler.get(blocks.stream().filter(Block::isMineable).toList().getFirst().getBlockId());
+ customPlaceHandler.mine(this, x, y);
inventory.getItemInHand().ifPresent(Item::use);
+
screenRenderer.render(this);
update(screenRenderer);
@@ -233,10 +234,10 @@ public class Game {
int[] cords2 = getPlayerCords();
if (world[cords2[1] + 1][cords2[0]].stream().allMatch(Block::isGhost)) {
- world[cords2[1] - 1][cords2[0]].remove(player);
- world[cords2[1]][cords2[0]].add(player);
- world[cords2[1] + 1][cords2[0]].add(player2);
- world[cords2[1]][cords2[0]].remove(player2);
+ world[cords2[1] - 1][cords2[0]].remove(player.getPlayerBlock1());
+ world[cords2[1]][cords2[0]].add(player.getPlayerBlock1());
+ world[cords2[1] + 1][cords2[0]].add(player.getPlayerBlock2());
+ world[cords2[1]][cords2[0]].remove(player.getPlayerBlock2());
screenRenderer.render(this);
} else {
@@ -264,7 +265,7 @@ public class Game {
}
if (!blocks.stream().allMatch(block -> block.getBlockId().equals("air"))) {
- RightClickHandler.handle(x, y, this);
+ RightClickHandler.handle(x, y, this, screenRenderer);
screenRenderer.render(this);
return;
}
@@ -273,12 +274,13 @@ public class Game {
return;
}
- blocks.removeAll(blocks.stream().filter(block -> block.getBlockId().equals("air")).toList());
- blocks.add(inventory.getItemInHand().get().getBlock().get());
+ Item item = inventory.getItemInHand().get();
- inventory.decreaseItemInHand();
+ CustomPlaceHandler placeHandler = gameStates.dependencies.placeHandler.get(item.getId());
- screenRenderer.render(this);
+ if (placeHandler.place(this, x, y)) {
+ screenRenderer.render(this);
+ }
}
public void changeSlot(int slot, ScreenRenderer screenRenderer) {
diff --git a/src/main/java/cz/jzitnik/game/GameStates.java b/src/main/java/cz/jzitnik/game/GameStates.java
index c4fa272..b10d2b1 100644
--- a/src/main/java/cz/jzitnik/game/GameStates.java
+++ b/src/main/java/cz/jzitnik/game/GameStates.java
@@ -4,10 +4,12 @@ import cz.jzitnik.game.ui.CraftingTable;
public class GameStates {
public CraftingTable craftingTable;
+ public Dependencies dependencies;
public int clickX = -1;
public int clickY = -1;
public GameStates(Game game) {
craftingTable = new CraftingTable(game);
+ dependencies = new Dependencies();
}
}
diff --git a/src/main/java/cz/jzitnik/game/Player.java b/src/main/java/cz/jzitnik/game/Player.java
new file mode 100644
index 0000000..e496c28
--- /dev/null
+++ b/src/main/java/cz/jzitnik/game/Player.java
@@ -0,0 +1,13 @@
+package cz.jzitnik.game;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class Player {
+ private int health = 10;
+ private int hunger = 6;
+ private Block playerBlock1;
+ private Block playerBlock2;
+}
diff --git a/src/main/java/cz/jzitnik/game/SpriteLoader.java b/src/main/java/cz/jzitnik/game/SpriteLoader.java
index 06d41ff..f653adb 100644
--- a/src/main/java/cz/jzitnik/game/SpriteLoader.java
+++ b/src/main/java/cz/jzitnik/game/SpriteLoader.java
@@ -21,10 +21,12 @@ public class SpriteLoader {
CHEST,
CRAFTING_TABLE,
+ COAL_ORE,
OAK_LOG,
OAK_LEAF,
OAK_PLANKS,
+ OAK_DOOR,
WOODEN_PICKAXE,
STONE_PICKAXE,
@@ -41,9 +43,13 @@ public class SpriteLoader {
ITEM_COBBLESTONE,
ITEM_STONE,
ITEM_FURNACE,
+ ITEM_OAK_DOOR,
ITEM_CRAFTING_TABLE,
- ITEM_CHEST
+ ITEM_CHEST,
+
+ HEART,
+ HUNGER
}
public static final HashMap SPRITES_MAP = new HashMap<>();
@@ -63,6 +69,8 @@ public class SpriteLoader {
SPRITES_MAP.put(SPRITES.CHEST, new SimpleSprite("chest.ans"));
SPRITES_MAP.put(SPRITES.COBBLESTONE, new SimpleSprite("cobblestone.ans"));
SPRITES_MAP.put(SPRITES.FURNACE, new Furnace());
+ SPRITES_MAP.put(SPRITES.COAL_ORE, new SimpleSprite("coal_ore.ans"));
+ SPRITES_MAP.put(SPRITES.OAK_DOOR, new OakDoor());
SPRITES_MAP.put(SPRITES.WOODEN_PICKAXE, new SimpleSprite("items/wooden_pickaxe.ans"));
SPRITES_MAP.put(SPRITES.STONE_PICKAXE, new SimpleSprite("items/stone_pickaxe.ans"));
@@ -79,6 +87,10 @@ public class SpriteLoader {
SPRITES_MAP.put(SPRITES.ITEM_STONE, new SimpleSprite("items/stone.ans"));
SPRITES_MAP.put(SPRITES.ITEM_CHEST, new SimpleSprite("items/chest.ans"));
SPRITES_MAP.put(SPRITES.ITEM_FURNACE, new SimpleSprite("items/furnace.ans"));
+ SPRITES_MAP.put(SPRITES.ITEM_OAK_DOOR, new SimpleSprite("oak_door/items/oak_door.ans"));
+
+ SPRITES_MAP.put(SPRITES.HEART, new Heart());
+ SPRITES_MAP.put(SPRITES.HUNGER, new Hunger());
}
public static SpriteList load() {
diff --git a/src/main/java/cz/jzitnik/game/annotations/RegisterPlaceHandler.java b/src/main/java/cz/jzitnik/game/annotations/RegisterPlaceHandler.java
new file mode 100644
index 0000000..d9cc272
--- /dev/null
+++ b/src/main/java/cz/jzitnik/game/annotations/RegisterPlaceHandler.java
@@ -0,0 +1,12 @@
+package cz.jzitnik.game.annotations;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+import java.lang.annotation.ElementType;
+
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface RegisterPlaceHandler {
+ String value();
+}
diff --git a/src/main/java/cz/jzitnik/game/crafting/CraftingRecipeList.java b/src/main/java/cz/jzitnik/game/crafting/CraftingRecipeList.java
index 9b3c867..f03a109 100644
--- a/src/main/java/cz/jzitnik/game/crafting/CraftingRecipeList.java
+++ b/src/main/java/cz/jzitnik/game/crafting/CraftingRecipeList.java
@@ -94,6 +94,18 @@ public class CraftingRecipeList {
{"cobblestone", null, "cobblestone"},
{"cobblestone", "cobblestone", "cobblestone"}
}, () -> new InventoryItem(1, ItemBlockSupplier.Items.furnace())));
+
+ recipes.add(new CraftingRecipe(new String[][]{
+ {"oak_planks", "oak_planks", null},
+ {"oak_planks", "oak_planks", null},
+ {"oak_planks", "oak_planks", null}
+ }, () -> new InventoryItem(1, ItemBlockSupplier.Items.oakDoor())));
+
+ recipes.add(new CraftingRecipe(new String[][]{
+ {"dirt", null, null},
+ {null, null, null},
+ {null, null, null}
+ }, () -> new InventoryItem(1, ItemBlockSupplier.Items.oakDoor())));
}
public static Optional getRecipe(String[] r) {
diff --git a/src/main/java/cz/jzitnik/game/generation/CaveGenerator.java b/src/main/java/cz/jzitnik/game/generation/CaveGenerator.java
new file mode 100644
index 0000000..a27c98f
--- /dev/null
+++ b/src/main/java/cz/jzitnik/game/generation/CaveGenerator.java
@@ -0,0 +1,12 @@
+package cz.jzitnik.game.generation;
+
+import cz.jzitnik.game.Block;
+import java.util.List;
+
+public class CaveGenerator {
+ private static final int WIDTH = 512;
+ private static final int HEIGHT = 256;
+
+ public static void generateCaves(List[][] world, int[] terrainHeight) {
+ }
+}
diff --git a/src/main/java/cz/jzitnik/game/Generation.java b/src/main/java/cz/jzitnik/game/generation/Generation.java
similarity index 91%
rename from src/main/java/cz/jzitnik/game/Generation.java
rename to src/main/java/cz/jzitnik/game/generation/Generation.java
index 9e9b50c..7798e79 100644
--- a/src/main/java/cz/jzitnik/game/Generation.java
+++ b/src/main/java/cz/jzitnik/game/generation/Generation.java
@@ -1,5 +1,8 @@
-package cz.jzitnik.game;
+package cz.jzitnik.game.generation;
+import cz.jzitnik.game.Block;
+import cz.jzitnik.game.Game;
+import cz.jzitnik.game.SpriteLoader;
import cz.jzitnik.game.items.ItemBlockSupplier;
import cz.jzitnik.game.items.ItemType;
import cz.jzitnik.game.sprites.Steve;
@@ -18,8 +21,8 @@ public class Generation {
Block steveBlock2 = new Block("steve", SpriteLoader.SPRITES.STEVE);
steveBlock2.setSpriteState(Steve.SteveState.SECOND);
- game.setPlayer(steveBlock);
- game.setPlayer2(steveBlock2);
+ game.getPlayer().setPlayerBlock1(steveBlock);
+ game.getPlayer().setPlayerBlock2(steveBlock2);
int[] terrainHeight = generateTerrain();
populateWorld(world, terrainHeight);
@@ -77,9 +80,7 @@ public class Generation {
for (List[] lists : world) {
for (List list : lists) {
- if (list.isEmpty()) {
- list.add(new Block("air", SpriteLoader.SPRITES.AIR, true, false));
- }
+ list.addFirst(new Block("air", SpriteLoader.SPRITES.AIR, true, false));
}
}
}
diff --git a/src/main/java/cz/jzitnik/game/handlers/place/CustomPlaceHandler.java b/src/main/java/cz/jzitnik/game/handlers/place/CustomPlaceHandler.java
new file mode 100644
index 0000000..f0c1645
--- /dev/null
+++ b/src/main/java/cz/jzitnik/game/handlers/place/CustomPlaceHandler.java
@@ -0,0 +1,8 @@
+package cz.jzitnik.game.handlers.place;
+
+import cz.jzitnik.game.Game;
+
+public interface CustomPlaceHandler {
+ boolean place(Game game, int x, int y);
+ void mine(Game game, int x, int y);
+}
diff --git a/src/main/java/cz/jzitnik/game/handlers/place/DefaultPlaceHandler.java b/src/main/java/cz/jzitnik/game/handlers/place/DefaultPlaceHandler.java
new file mode 100644
index 0000000..2d8681a
--- /dev/null
+++ b/src/main/java/cz/jzitnik/game/handlers/place/DefaultPlaceHandler.java
@@ -0,0 +1,24 @@
+package cz.jzitnik.game.handlers.place;
+
+import cz.jzitnik.game.Game;
+
+public class DefaultPlaceHandler implements CustomPlaceHandler {
+ @Override
+ public boolean place(Game game, int x, int y) {
+ var blocks = game.getWorld()[y][x];
+ var inventory = game.getInventory();
+
+ blocks.add(inventory.getItemInHand().get().getBlock().get());
+
+ inventory.decreaseItemInHand();
+
+ return true;
+ }
+
+ @Override
+ public void mine(Game game, int x, int y) {
+ var blocks = game.getWorld()[y][x];
+
+ blocks.removeAll(blocks.stream().filter(i -> !i.getBlockId().equals("air")).toList());
+ }
+}
diff --git a/src/main/java/cz/jzitnik/game/handlers/place/PlaceHandler.java b/src/main/java/cz/jzitnik/game/handlers/place/PlaceHandler.java
new file mode 100644
index 0000000..6c5d650
--- /dev/null
+++ b/src/main/java/cz/jzitnik/game/handlers/place/PlaceHandler.java
@@ -0,0 +1,45 @@
+package cz.jzitnik.game.handlers.place;
+
+import java.util.HashMap;
+import java.util.Set;
+
+import cz.jzitnik.game.annotations.RegisterPlaceHandler;
+import org.reflections.Reflections;
+
+public class PlaceHandler {
+ private final HashMap placeHandlerList = new HashMap<>();
+ private final CustomPlaceHandler defaultPlaceHandler = new DefaultPlaceHandler();
+
+ public boolean contains(String itemId) {
+ return placeHandlerList.containsKey(itemId);
+ }
+
+ public CustomPlaceHandler get(String itemId) {
+ if (!contains(itemId)) {
+ return defaultPlaceHandler;
+ }
+
+ return placeHandlerList.get(itemId);
+ }
+
+ public PlaceHandler() {
+ registerHandlers();
+ }
+
+ private void registerHandlers() {
+ Reflections reflections = new Reflections("cz.jzitnik.game.handlers.place.handlers");
+ Set> handlerClasses = reflections.getTypesAnnotatedWith(RegisterPlaceHandler.class);
+
+ for (Class> clazz : handlerClasses) {
+ if (CustomPlaceHandler.class.isAssignableFrom(clazz)) {
+ try {
+ CustomPlaceHandler handlerInstance = (CustomPlaceHandler) clazz.getDeclaredConstructor().newInstance();
+ RegisterPlaceHandler annotation = clazz.getAnnotation(RegisterPlaceHandler.class);
+ placeHandlerList.put(annotation.value(), handlerInstance);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+}
diff --git a/src/main/java/cz/jzitnik/game/handlers/place/handlers/DoorPlaceHandler.java b/src/main/java/cz/jzitnik/game/handlers/place/handlers/DoorPlaceHandler.java
new file mode 100644
index 0000000..cd1672a
--- /dev/null
+++ b/src/main/java/cz/jzitnik/game/handlers/place/handlers/DoorPlaceHandler.java
@@ -0,0 +1,93 @@
+package cz.jzitnik.game.handlers.place.handlers;
+
+import cz.jzitnik.game.Block;
+import cz.jzitnik.game.Game;
+import cz.jzitnik.game.annotations.RegisterPlaceHandler;
+import cz.jzitnik.game.handlers.place.CustomPlaceHandler;
+import cz.jzitnik.game.items.ItemBlockSupplier;
+import cz.jzitnik.game.sprites.OakDoor;
+import cz.jzitnik.tui.ScreenRenderer;
+
+@RegisterPlaceHandler("oak_door")
+public class DoorPlaceHandler implements CustomPlaceHandler {
+ public static void rightClick(Game game, int x, int y, ScreenRenderer screenRenderer) {
+ var blocks = game.getWorld()[y][x];
+ var door = blocks.stream().filter(block -> block.getBlockId().equals("oak_door")).toList().getFirst();
+
+
+ switch (door.getSpriteState().get()) {
+ case OakDoor.OakDoorState.TOP, OakDoor.OakDoorState.TOPCLOSED -> {
+ var blocks2 = game.getWorld()[y+1][x];
+ var door2 = blocks2.stream().filter(block -> block.getBlockId().equals("oak_door")).toList().getFirst();
+ change(door2);
+ }
+ case OakDoor.OakDoorState.BOTTOM, OakDoor.OakDoorState.BOTTOMCLOSED -> {
+ var blocks2 = game.getWorld()[y-1][x];
+ var door2 = blocks2.stream().filter(block -> block.getBlockId().equals("oak_door")).toList().getFirst();
+ change(door2);
+ }
+ default -> throw new IllegalStateException("Unexpected value: " + door.getSpriteState().get());
+ }
+
+ change(door);
+ game.update(screenRenderer);
+ }
+
+ private static void change(Block door) {
+ door.setSpriteState(switch (door.getSpriteState().get()) {
+ case OakDoor.OakDoorState.TOP -> OakDoor.OakDoorState.TOPCLOSED;
+ case OakDoor.OakDoorState.BOTTOM -> OakDoor.OakDoorState.BOTTOMCLOSED;
+ case OakDoor.OakDoorState.TOPCLOSED -> OakDoor.OakDoorState.TOP;
+ case OakDoor.OakDoorState.BOTTOMCLOSED -> OakDoor.OakDoorState.BOTTOM;
+ default -> throw new IllegalStateException("Unexpected value: " + door.getSpriteState().get());
+ });
+
+ door.setGhost(switch (door.getSpriteState().get()) {
+ case OakDoor.OakDoorState.TOP, OakDoor.OakDoorState.BOTTOM -> true;
+ case OakDoor.OakDoorState.TOPCLOSED, OakDoor.OakDoorState.BOTTOMCLOSED -> false;
+ default -> throw new IllegalStateException("Unexpected value: " + door.getSpriteState().get());
+ });
+ }
+
+ @Override
+ public boolean place(Game game, int x, int y) {
+ var blocks = game.getWorld()[y][x];
+ var blocksTop = game.getWorld()[y-1][x];
+
+ if (!blocksTop.stream().allMatch(Block::isGhost)) {
+ return false;
+ }
+
+ var inventory = game.getInventory();
+
+ Block block = inventory.getItemInHand().get().getBlock().get();
+ block.setSpriteState(OakDoor.OakDoorState.BOTTOMCLOSED);
+ blocks.add(block);
+
+ Block block2 = ItemBlockSupplier.Blocks.oakDoor();
+ block2.setSpriteState(OakDoor.OakDoorState.TOPCLOSED);
+ blocksTop.add(block2);
+
+ inventory.decreaseItemInHand();
+
+ return true;
+ }
+
+ @Override
+ public void mine(Game game, int x, int y) {
+ var blocks = game.getWorld()[y][x];
+ Block block = blocks.stream().filter(b -> b.getBlockId().equals("oak_door")).toList().getFirst();
+
+ if (block.getSpriteState().get() == OakDoor.OakDoorState.BOTTOM || block.getSpriteState().get() == OakDoor.OakDoorState.BOTTOMCLOSED) {
+ var blocks2 = game.getWorld()[y-1][x];
+ blocks2.removeAll(blocks2.stream().filter(i -> !i.getBlockId().equals("air")).toList());
+ }
+
+ if (block.getSpriteState().get() == OakDoor.OakDoorState.TOP || block.getSpriteState().get() == OakDoor.OakDoorState.TOPCLOSED) {
+ var blocks2 = game.getWorld()[y+1][x];
+ blocks2.removeAll(blocks2.stream().filter(i -> !i.getBlockId().equals("air")).toList());
+ }
+
+ blocks.removeAll(blocks.stream().filter(i -> !i.getBlockId().equals("air")).toList());
+ }
+}
diff --git a/src/main/java/cz/jzitnik/tui/RightClickHandler.java b/src/main/java/cz/jzitnik/game/handlers/rightclick/RightClickHandler.java
similarity index 74%
rename from src/main/java/cz/jzitnik/tui/RightClickHandler.java
rename to src/main/java/cz/jzitnik/game/handlers/rightclick/RightClickHandler.java
index 1e24353..557f722 100644
--- a/src/main/java/cz/jzitnik/tui/RightClickHandler.java
+++ b/src/main/java/cz/jzitnik/game/handlers/rightclick/RightClickHandler.java
@@ -1,8 +1,10 @@
-package cz.jzitnik.tui;
+package cz.jzitnik.game.handlers.rightclick;
import cz.jzitnik.game.Block;
import cz.jzitnik.game.Game;
+import cz.jzitnik.game.handlers.place.handlers.DoorPlaceHandler;
import cz.jzitnik.game.ui.Window;
+import cz.jzitnik.tui.ScreenRenderer;
import java.util.HashMap;
@@ -12,7 +14,7 @@ public class RightClickHandler {
void apply(T t, U u);
}
- public static void handle(int x, int y, Game game) {
+ public static void handle(int x, int y, Game game, ScreenRenderer screenRenderer) {
if (game.isMining()) {
return;
}
@@ -21,6 +23,7 @@ public class RightClickHandler {
functionMap.put("crafting_table", game.getGameStates().craftingTable::render);
functionMap.put("chest", (Integer ignored, Integer ignored2) -> game.setWindow(Window.CHEST));
functionMap.put("furnace", (Integer ignored, Integer ignored2) -> game.setWindow(Window.FURNACE));
+ functionMap.put("oak_door", (Integer xx, Integer xy) -> DoorPlaceHandler.rightClick(game, xx, xy, screenRenderer));
game.getGameStates().clickX = x;
game.getGameStates().clickY = y;
diff --git a/src/main/java/cz/jzitnik/game/items/ItemBlockSupplier.java b/src/main/java/cz/jzitnik/game/items/ItemBlockSupplier.java
index bc6ef14..b03aa33 100644
--- a/src/main/java/cz/jzitnik/game/items/ItemBlockSupplier.java
+++ b/src/main/java/cz/jzitnik/game/items/ItemBlockSupplier.java
@@ -36,6 +36,9 @@ public class ItemBlockSupplier {
public static Item furnace(Block ref) {
return new Item("furnace", "Furnace", ItemType.BLOCK, SpriteLoader.SPRITES.ITEM_FURNACE, ref);
}
+ public static Item oakDoor(Block ref) {
+ return new Item("oak_door", "Oak door", ItemType.BLOCK, SpriteLoader.SPRITES.ITEM_OAK_DOOR, ref);
+ }
}
public static class Blocks {
@@ -85,6 +88,14 @@ public class ItemBlockSupplier {
block.setDrops(List.of(Helper.furnace(block)));
return block;
}
+ public static Block coalOre() {
+ return new Block("coal_ore", SpriteLoader.SPRITES.COAL_ORE);
+ }
+ public static Block oakDoor() {
+ var block = new Block("oak_door", SpriteLoader.SPRITES.OAK_DOOR, 3, ItemType.AXE, new ArrayList<>());
+ block.setDrops(List.of(Helper.oakDoor(block)));
+ return block;
+ }
}
// I hate this but whatever
@@ -131,5 +142,8 @@ public class ItemBlockSupplier {
public static Item furnace() {
return Helper.furnace(Blocks.furnace());
}
+ public static Item oakDoor() {
+ return Helper.oakDoor(Blocks.oakDoor());
+ }
}
}
diff --git a/src/main/java/cz/jzitnik/game/sprites/Heart.java b/src/main/java/cz/jzitnik/game/sprites/Heart.java
new file mode 100644
index 0000000..5b3ca49
--- /dev/null
+++ b/src/main/java/cz/jzitnik/game/sprites/Heart.java
@@ -0,0 +1,25 @@
+package cz.jzitnik.game.sprites;
+
+import cz.jzitnik.tui.ResourceLoader;
+import cz.jzitnik.tui.Sprite;
+
+public class Heart extends Sprite {
+ public enum HeartState {
+ OFF,
+ ON,
+ }
+
+ public String getSprite() {
+ throw new RuntimeException("Idk");
+ }
+
+ public String getSprite(Enum e) {
+ return ResourceLoader.loadResource(
+ switch (e) {
+ case HeartState.OFF -> "gui/heartempty.ans";
+ case HeartState.ON -> "gui/heartfull.ans";
+ default -> throw new IllegalStateException("Unexpected value: " + e);
+ }
+ );
+ }
+}
diff --git a/src/main/java/cz/jzitnik/game/sprites/Hunger.java b/src/main/java/cz/jzitnik/game/sprites/Hunger.java
new file mode 100644
index 0000000..979e6c2
--- /dev/null
+++ b/src/main/java/cz/jzitnik/game/sprites/Hunger.java
@@ -0,0 +1,25 @@
+package cz.jzitnik.game.sprites;
+
+import cz.jzitnik.tui.ResourceLoader;
+import cz.jzitnik.tui.Sprite;
+
+public class Hunger extends Sprite {
+ public enum HungerState {
+ OFF,
+ ON,
+ }
+
+ public String getSprite() {
+ throw new RuntimeException("Idk");
+ }
+
+ public String getSprite(Enum e) {
+ return ResourceLoader.loadResource(
+ switch (e) {
+ case HungerState.OFF -> "gui/hungerempty.ans";
+ case HungerState.ON -> "gui/hungerfull.ans";
+ default -> throw new IllegalStateException("Unexpected value: " + e);
+ }
+ );
+ }
+}
diff --git a/src/main/java/cz/jzitnik/game/sprites/OakDoor.java b/src/main/java/cz/jzitnik/game/sprites/OakDoor.java
new file mode 100644
index 0000000..aa948a5
--- /dev/null
+++ b/src/main/java/cz/jzitnik/game/sprites/OakDoor.java
@@ -0,0 +1,29 @@
+package cz.jzitnik.game.sprites;
+
+import cz.jzitnik.tui.ResourceLoader;
+import cz.jzitnik.tui.Sprite;
+
+public class OakDoor extends Sprite {
+ public enum OakDoorState {
+ TOP,
+ BOTTOM,
+ TOPCLOSED,
+ BOTTOMCLOSED
+ }
+
+ public String getSprite() {
+ return ResourceLoader.loadResource("oak_door/bottomclosed.ans");
+ }
+
+ public String getSprite(Enum e) {
+ return ResourceLoader.loadResource(
+ switch (e) {
+ case OakDoorState.TOP -> "oak_door/top.ans";
+ case OakDoorState.BOTTOM -> "oak_door/bottom.ans";
+ case OakDoorState.TOPCLOSED -> "oak_door/topclosed.ans";
+ case OakDoorState.BOTTOMCLOSED -> "oak_door/bottomclosed.ans";
+ default -> throw new IllegalStateException("Unexpected value: " + e);
+ }
+ );
+ }
+}
diff --git a/src/main/java/cz/jzitnik/game/ui/Healthbar.java b/src/main/java/cz/jzitnik/game/ui/Healthbar.java
new file mode 100644
index 0000000..dcd8105
--- /dev/null
+++ b/src/main/java/cz/jzitnik/game/ui/Healthbar.java
@@ -0,0 +1,49 @@
+package cz.jzitnik.game.ui;
+
+import cz.jzitnik.game.Game;
+import cz.jzitnik.game.SpriteLoader;
+import cz.jzitnik.game.sprites.Heart;
+import cz.jzitnik.game.sprites.Hunger;
+import cz.jzitnik.tui.SpriteList;
+import org.jline.terminal.Terminal;
+
+import static cz.jzitnik.game.ui.Inventory.INVENTORY_SIZE_PX;
+
+public class Healthbar {
+ public static void render(StringBuilder buffer, SpriteList spriteList, Terminal terminal, Game game) {
+ int termWidth = terminal.getWidth();
+ int startLeft = (termWidth / 2) - (INVENTORY_SIZE_PX / 2);
+
+ int heartSize = 9 * 20;
+ int moveLeft = INVENTORY_SIZE_PX - (heartSize * 2);
+
+ String[] spriteOn = spriteList.getSprite(SpriteLoader.SPRITES.HEART).getSprite(Heart.HeartState.ON).split("\n");
+ String[] spriteOff = spriteList.getSprite(SpriteLoader.SPRITES.HEART).getSprite(Heart.HeartState.OFF).split("\n");
+
+ String[] hungerSpriteOn = spriteList.getSprite(SpriteLoader.SPRITES.HUNGER).getSprite(Hunger.HungerState.ON).split("\n");
+ String[] hungerSpriteOff = spriteList.getSprite(SpriteLoader.SPRITES.HUNGER).getSprite(Hunger.HungerState.OFF).split("\n");
+
+ for (int i = 0; i < 9; i++) {
+ buffer.append(" ".repeat(startLeft));
+ for (int j = 0; j < 10; j++) {
+ if (j < game.getPlayer().getHealth()) {
+ buffer.append(spriteOn[i]);
+ } else {
+ buffer.append(spriteOff[i]);
+ }
+ }
+
+ buffer.append("\033[0m").append(" ".repeat(moveLeft));
+ for (int j = 0; j < 10; j++) {
+ if ((10 - j) <= game.getPlayer().getHunger()) {
+ buffer.append(hungerSpriteOn[i]);
+ } else {
+ buffer.append(hungerSpriteOff[i]);
+ }
+ }
+
+ buffer.append("\n");
+ }
+ buffer.append("\n\n");
+ }
+}
diff --git a/src/main/java/cz/jzitnik/tui/ScreenMovingCalculationProvider.java b/src/main/java/cz/jzitnik/tui/ScreenMovingCalculationProvider.java
index 4e8f636..446976a 100644
--- a/src/main/java/cz/jzitnik/tui/ScreenMovingCalculationProvider.java
+++ b/src/main/java/cz/jzitnik/tui/ScreenMovingCalculationProvider.java
@@ -6,7 +6,7 @@ public class ScreenMovingCalculationProvider {
int spriteHeight = 25;
int viewXRadius = (terminalWidth / 2) / spriteWidth;
- int viewYRadius = ((terminalHeight - 30) / 2) / spriteHeight;
+ int viewYRadius = ((terminalHeight - 30 - 9) / 2) / spriteHeight;
// Ensure at least one sprite is visible
viewXRadius = Math.max(viewXRadius, 1);
diff --git a/src/main/java/cz/jzitnik/tui/ScreenRenderer.java b/src/main/java/cz/jzitnik/tui/ScreenRenderer.java
index 6bdde91..7ed0015 100644
--- a/src/main/java/cz/jzitnik/tui/ScreenRenderer.java
+++ b/src/main/java/cz/jzitnik/tui/ScreenRenderer.java
@@ -5,6 +5,7 @@ import cz.jzitnik.game.Game;
import cz.jzitnik.game.sprites.Steve;
import cz.jzitnik.game.ui.Chest;
import cz.jzitnik.game.ui.Furnace;
+import cz.jzitnik.game.ui.Healthbar;
import cz.jzitnik.tui.utils.SpriteCombiner;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@@ -141,6 +142,8 @@ public class ScreenRenderer {
// Empty space between world and hotbar
main.append("\n\n\n");
+ Healthbar.render(main, spriteList, terminal, game);
+
game.getInventory().renderHotbar(main, spriteList, terminal, false);
}
}
diff --git a/src/main/java/cz/jzitnik/tui/SpriteList.java b/src/main/java/cz/jzitnik/tui/SpriteList.java
index c482847..f788bdb 100644
--- a/src/main/java/cz/jzitnik/tui/SpriteList.java
+++ b/src/main/java/cz/jzitnik/tui/SpriteList.java
@@ -23,11 +23,4 @@ public class SpriteList> {
public Sprite getSprite(E key) {
return sprites.get(key);
}
-
- public void setSprite(E key, Sprite value) {
- if (!sprites.containsKey(key)) {
- throw new IllegalArgumentException("Invalid key: " + key);
- }
- sprites.put(key, value);
- }
}
diff --git a/src/main/resources/textures/coal_ore.ans b/src/main/resources/textures/coal_ore.ans
new file mode 100644
index 0000000..a1e1db3
--- /dev/null
+++ b/src/main/resources/textures/coal_ore.ans
@@ -0,0 +1,25 @@
+[48;2;127;127;127m [48;2;116;116;116m [48;2;127;127;127m [48;2;143;143;143m [48;2;141;143;143m [48;2;104;104;104m [48;2;143;143;143m [48;2;127;127;127m [48;2;126;126;126m [48;2;116;116;116m [48;2;127;127;127m [m
+[48;2;127;127;127m [48;2;143;143;143m [48;2;116;116;116m [48;2;143;143;143m [48;2;104;104;104m [48;2;127;127;127m [48;2;116;116;116m [m
+[48;2;127;127;127m [48;2;108;108;108m [48;2;121;121;121m [48;2;73;73;73m [48;2;75;75;75m [48;2;121;121;121m [48;2;123;121;121m [48;2;121;121;121m [48;2;137;137;137m [48;2;121;121;121m [48;2;130;130;130m [48;2;72;72;72m [48;2;70;70;70m [48;2;75;75;75m [48;2;127;127;127m [48;2;124;124;124m [m
+[48;2;127;127;127m [48;2;104;104;104m [48;2;116;116;116m [48;2;55;55;55m [48;2;54;54;54m [48;2;116;116;116m [48;2;116;117;116m [48;2;116;116;116m [48;2;143;143;143m [48;2;116;116;116m [48;2;127;127;127m [48;2;63;63;63m [48;2;55;55;55m [48;2;60;60;60m [48;2;127;127;127m [m
+[48;2;127;127;127m [48;2;143;143;143m [48;2;127;127;127m [48;2;126;126;126m [48;2;104;104;104m [48;2;127;127;127m [48;2;63;63;63m [48;2;52;52;52m [48;2;127;127;127m [48;2;116;116;116m [48;2;116;116;118m [48;2;116;116;116m [48;2;127;127;127m [m
+[48;2;127;127;127m [48;2;143;143;143m [48;2;127;127;127m [48;2;126;126;126m [48;2;104;104;104m [48;2;127;127;127m [48;2;63;63;63m [48;2;52;52;52m [48;2;127;127;127m [48;2;116;116;116m [48;2;127;127;127m [m
+[48;2;127;127;127m [48;2;143;143;143m [48;2;116;116;116m [48;2;116;116;118m [48;2;116;116;116m [48;2;143;143;143m [48;2;104;104;104m [m
+[48;2;116;116;116m [48;2;127;127;127m [48;2;126;126;126m [48;2;69;69;69m [48;2;63;63;63m [48;2;116;116;116m [48;2;127;127;127m [48;2;104;104;104m [48;2;69;69;69m [48;2;63;63;63m [48;2;118;116;116m [48;2;116;116;116m [48;2;115;115;115m [48;2;104;105;104m [48;2;127;127;127m [m
+[48;2;116;116;116m [48;2;127;127;127m [48;2;126;126;126m [48;2;69;69;69m [48;2;63;63;63m [48;2;116;116;116m [48;2;127;127;127m [48;2;104;104;104m [48;2;69;69;69m [48;2;63;63;63m [48;2;116;116;116m [48;2;115;115;115m [48;2;104;104;104m [48;2;127;127;127m [m
+[48;2;143;143;143m [48;2;127;127;127m [48;2;69;69;69m [48;2;63;63;63m [48;2;55;55;55m [48;2;52;52;52m [48;2;127;127;127m [48;2;127;127;125m [48;2;127;127;127m [48;2;55;55;55m [48;2;52;52;52m [48;2;143;143;143m [48;2;104;104;104m [m
+[48;2;143;143;143m [48;2;141;143;143m [48;2;143;143;143m [48;2;127;127;127m [48;2;69;69;69m [48;2;63;63;63m [48;2;55;55;55m [48;2;55;55;54m [48;2;55;55;55m [48;2;52;52;52m [48;2;127;127;127m [48;2;55;55;55m [48;2;52;52;52m [48;2;143;143;143m [48;2;104;104;104m [m
+[48;2;127;127;127m [48;2;116;116;116m [48;2;104;104;104m [48;2;116;116;116m [48;2;127;127;127m [m
+[48;2;125;127;127m [48;2;63;63;63m [48;2;55;55;55m [48;2;102;102;102m [48;2;104;104;104m [48;2;143;143;143m [48;2;141;141;141m [48;2;116;116;116m [48;2;127;127;127m [48;2;69;69;69m [48;2;62;62;62m [48;2;143;143;143m [48;2;142;142;142m [m
+[48;2;127;126;127m [48;2;63;63;63m [48;2;55;55;55m [48;2;104;104;104m [48;2;143;143;143m [48;2;116;116;116m [48;2;127;127;127m [48;2;69;69;69m [48;2;63;63;63m [48;2;143;143;143m [m
+[48;2;127;127;127m [48;2;116;116;116m [48;2;63;63;63m [48;2;63;62;63m [48;2;52;52;52m [48;2;116;116;116m [48;2;118;118;118m [48;2;143;143;143m [48;2;127;127;127m [m
+[48;2;127;127;127m [48;2;115;115;115m [48;2;118;116;116m [48;2;116;116;116m [48;2;115;115;115m [48;2;116;116;116m [48;2;63;63;63m [48;2;51;51;51m [48;2;52;52;52m [48;2;116;116;116m [48;2;115;115;115m [48;2;117;117;117m [48;2;143;143;143m [48;2;127;127;127m [m
+[48;2;127;127;127m [48;2;143;143;143m [48;2;116;116;116m [48;2;55;55;55m [48;2;143;143;143m [48;2;116;116;116m [48;2;104;104;104m [48;2;116;116;116m [48;2;143;143;143m [48;2;127;127;126m [48;2;127;127;127m [m
+[48;2;104;104;104m [48;2;127;127;127m [48;2;115;115;115m [48;2;116;116;116m [48;2;127;127;127m [48;2;143;143;143m [48;2;127;127;127m [48;2;126;126;126m [48;2;63;63;63m [48;2;52;52;52m [48;2;143;143;143m [48;2;104;104;104m [m
+[48;2;104;104;104m [48;2;127;127;127m [48;2;116;116;116m [48;2;127;127;127m [48;2;143;143;143m [48;2;127;127;127m [48;2;126;126;126m [48;2;63;63;63m [48;2;52;52;52m [48;2;143;143;143m [48;2;104;104;104m [m
+[48;2;127;127;127m [48;2;116;116;116m [48;2;63;63;63m [48;2;69;69;69m [48;2;63;63;63m [48;2;62;62;62m [48;2;55;55;55m [48;2;55;55;54m [48;2;52;52;52m [48;2;56;56;56m [48;2;116;116;116m [48;2;127;127;127m [m
+[48;2;127;127;127m [48;2;116;116;116m [48;2;63;63;63m [48;2;69;69;69m [48;2;69;68;69m [48;2;63;63;63m [48;2;62;62;62m [48;2;55;55;55m [48;2;52;52;52m [48;2;56;56;56m [48;2;116;116;116m [48;2;127;127;127m [m
+[48;2;127;127;127m [48;2;143;143;143m [48;2;116;116;116m [48;2;63;63;63m [48;2;52;52;52m [48;2;127;127;127m [48;2;116;116;116m [48;2;52;52;52m [48;2;116;116;116m [48;2;127;127;127m [48;2;128;128;128m [48;2;143;143;143m [m
+[48;2;127;127;127m [48;2;116;116;116m [48;2;116;116;117m [48;2;116;116;116m [48;2;127;127;127m [48;2;143;143;143m [48;2;127;127;127m [48;2;116;116;116m [48;2;127;127;127m [m
+[48;2;127;127;127m [48;2;116;116;116m [48;2;127;127;127m [48;2;143;143;143m [48;2;127;127;127m [48;2;116;116;116m [48;2;127;127;127m [m
+[48;2;116;116;116m [48;2;104;104;104m [48;2;143;143;143m [48;2;127;127;127m [48;2;126;126;126m [48;2;116;116;116m [48;2;127;127;127m [m
diff --git a/src/main/resources/textures/gui/heartempty.ans b/src/main/resources/textures/gui/heartempty.ans
new file mode 100644
index 0000000..5233123
--- /dev/null
+++ b/src/main/resources/textures/gui/heartempty.ans
@@ -0,0 +1,9 @@
+[49m [49m [49m [49m [48;2;0;0;0m [48;2;1;0;0m [49m [49m [48;2;2;3;1m [48;2;1;1;1m [49m [49m [49m [49m [m
+[49m [49m [48;2;7;5;5m [48;2;41;43;41m [48;2;41;41;40m [48;2;3;2;3m [48;2;40;40;41m [48;2;40;40;40m [48;2;2;2;2m [49m [49m [m
+[48;2;0;2;0m [48;2;43;40;43m [48;2;40;40;40m [48;2;40;42;42m [48;2;38;39;36m [48;2;40;41;41m [48;2;41;40;41m [48;2;38;38;39m [48;2;2;0;0m [m
+[48;2;2;0;0m [48;2;41;41;40m [48;2;42;42;42m [48;2;40;40;40m [48;2;41;40;41m [48;2;42;40;40m [48;2;42;43;42m [48;2;40;43;41m [48;2;0;0;0m [m
+[48;2;2;2;2m [48;2;42;42;40m [48;2;42;42;42m [48;2;38;38;38m [48;2;37;37;37m [48;2;42;41;40m [48;2;36;38;38m [48;2;42;42;42m [48;2;0;3;2m [m
+[49m [49m [48;2;3;3;1m [48;2;40;40;41m [48;2;42;40;42m [48;2;40;40;43m [48;2;36;37;36m [48;2;42;40;42m [48;2;0;3;1m [49m [49m [m
+[49m [49m [49m [49m [48;2;2;2;2m [48;2;40;43;40m [48;2;39;36;38m [48;2;40;42;40m [48;2;1;1;1m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [48;2;3;3;3m [48;2;42;42;42m [48;2;0;0;0m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [48;2;0;0;0m [49m [49m [49m [49m [49m [49m [49m [49m [m
diff --git a/src/main/resources/textures/gui/heartfull.ans b/src/main/resources/textures/gui/heartfull.ans
new file mode 100644
index 0000000..6f4b7bd
--- /dev/null
+++ b/src/main/resources/textures/gui/heartfull.ans
@@ -0,0 +1,9 @@
+[49m [49m [49m [49m [48;2;51;0;0m [48;2;62;0;0m [49m [49m [48;2;37;2;1m [48;2;30;0;0m [49m [49m [49m [49m [m
+[49m [49m [48;2;31;3;3m [48;2;161;62;70m [48;2;172;53;61m [48;2;74;0;0m [48;2;158;61;63m [48;2;155;63;61m [48;2;45;1;0m [49m [49m [m
+[48;2;51;1;1m [48;2;160;61;62m [48;2;255;165;169m [48;2;220;36;44m [48;2;222;33;41m [48;2;225;32;36m [48;2;221;32;31m [48;2;187;49;43m [48;2;32;1;1m [m
+[48;2;56;2;0m [48;2;169;56;53m [48;2;215;39;45m [48;2;239;23;32m [48;2;254;22;28m [48;2;252;20;23m [48;2;243;25;21m [48;2;202;45;40m [48;2;36;1;0m [m
+[48;2;42;0;0m [48;2;134;40;43m [48;2;207;31;39m [48;2;241;21;28m [48;2;251;13;20m [48;2;247;24;24m [48;2;223;36;34m [48;2;155;32;30m [48;2;29;0;0m [m
+[49m [49m [48;2;47;0;0m [48;2;162;26;32m [48;2;214;31;38m [48;2;233;31;29m [48;2;222;35;31m [48;2;163;29;27m [48;2;53;0;0m [49m [49m [m
+[49m [49m [49m [49m [48;2;45;0;0m [48;2;146;37;36m [48;2;195;49;49m [48;2;163;29;28m [48;2;48;3;0m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [48;2;39;0;0m [48;2;129;43;42m [48;2;53;0;0m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [48;2;21;0;0m [49m [49m [49m [49m [49m [49m [49m [49m [m
diff --git a/src/main/resources/textures/gui/hungerempty.ans b/src/main/resources/textures/gui/hungerempty.ans
new file mode 100644
index 0000000..e1707ce
--- /dev/null
+++ b/src/main/resources/textures/gui/hungerempty.ans
@@ -0,0 +1,9 @@
+[49m [49m [49m [49m [48;2;0;0;0m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [48;2;0;1;2m [48;2;40;40;42m [48;2;40;42;40m [48;2;0;0;0m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;1;3;0m [48;2;40;40;40m [48;2;42;41;40m [48;2;42;40;42m [48;2;40;41;42m [48;2;2;1;0m [49m [49m [49m [49m [49m [49m [m
+[48;2;0;0;0m [48;2;40;41;42m [48;2;43;43;40m [48;2;40;40;40m [48;2;42;41;40m [48;2;40;40;41m [48;2;2;0;1m [49m [49m [49m [49m [m
+[49m [49m [48;2;2;0;3m [48;2;43;41;42m [48;2;40;41;43m [48;2;40;40;42m [48;2;40;40;41m [48;2;0;0;0m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [48;2;2;0;0m [48;2;40;40;42m [48;2;40;40;40m [48;2;42;41;43m [48;2;2;1;0m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [48;2;0;0;0m [48;2;2;1;1m [48;2;0;1;2m [48;2;41;42;40m [48;2;3;0;0m [48;2;1;1;2m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;0;0;0m [48;2;40;40;40m [48;2;0;0;0m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;0;0;0m [49m [49m [m
diff --git a/src/main/resources/textures/gui/hungerfull.ans b/src/main/resources/textures/gui/hungerfull.ans
new file mode 100644
index 0000000..3d1e651
--- /dev/null
+++ b/src/main/resources/textures/gui/hungerfull.ans
@@ -0,0 +1,9 @@
+[49m [49m [49m [49m [48;2;0;2;3m [48;2;3;0;2m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [48;2;2;0;0m [48;2;212;40;42m [48;2;178;24;24m [48;2;2;2;0m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;1;3;1m [48;2;212;42;40m [48;2;223;177;142m [48;2;212;42;43m [48;2;184;135;88m [48;2;2;0;0m [49m [49m [49m [49m [49m [49m [m
+[48;2;0;0;0m [48;2;177;26;24m [48;2;212;42;40m [48;2;185;132;88m [48;2;157;108;67m [48;2;186;132;88m [48;2;0;0;0m [49m [49m [49m [49m [m
+[49m [49m [48;2;1;2;0m [48;2;99;60;27m [48;2;123;81;45m [48;2;159;109;66m [48;2;156;111;67m [48;2;1;1;2m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [48;2;2;0;0m [48;2;97;61;27m [48;2;123;81;44m [48;2;2;0;0m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [48;2;3;1;0m [48;2;1;1;2m [48;2;0;0;0m [48;2;227;213;170m [48;2;2;2;1m [48;2;2;0;0m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;0;0;0m [48;2;255;247;220m [48;2;0;0;0m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;0;0;0m [49m [49m [m
diff --git a/src/main/resources/textures/items/wooden_axe.ans b/src/main/resources/textures/items/wooden_axe.ans
index ba5932a..7a1cbf6 100644
--- a/src/main/resources/textures/items/wooden_axe.ans
+++ b/src/main/resources/textures/items/wooden_axe.ans
@@ -1,26 +1,25 @@
-[38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [0m
-[38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [0m
-[38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;172;48;5;232m▒[38;5;130;48;5;233m [38;5;130;48;5;233m [38;5;130;48;5;233m [38;5;130;48;5;233m [38;5;130;48;5;233m [38;5;130;48;5;233m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [0m
-[38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;52;48;5;16m░[38;5;52;48;5;16m░[38;5;52;48;5;16m░[38;5;190;48;5;233m░[38;5;222;48;5;234m [38;5;222;48;5;234m [38;5;222;48;5;234m [38;5;222;48;5;234m [38;5;222;48;5;234m [38;5;222;48;5;234m [38;5;52;48;5;16m░[38;5;52;48;5;16m░[38;5;52;48;5;16m░[38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [0m
-[38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;130;48;5;233m [38;5;130;48;5;233m [38;5;130;48;5;233m [38;5;222;48;5;58m░[38;5;179;48;5;94m░[38;5;179;48;5;94m░[38;5;179;48;5;94m░[38;5;179;48;5;94m░[38;5;179;48;5;94m░[38;5;179;48;5;94m░[38;5;130;48;5;233m [38;5;130;48;5;233m [38;5;130;48;5;233m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [0m
-[38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;130;48;5;233m [38;5;130;48;5;233m [38;5;130;48;5;233m [38;5;179;48;5;94m░[38;5;179;48;5;94m░[38;5;179;48;5;94m░[38;5;179;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;130;48;5;233m [38;5;130;48;5;233m [38;5;130;48;5;233m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [0m
-[38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;130;48;5;233m [38;5;130;48;5;233m [38;5;130;48;5;233m [38;5;179;48;5;94m░[38;5;179;48;5;94m░[38;5;179;48;5;94m░[38;5;179;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;130;48;5;233m [38;5;130;48;5;233m [38;5;130;48;5;233m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [0m
-[38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;130;48;5;233m [38;5;130;48;5;233m [38;5;130;48;5;233m [38;5;179;48;5;94m░[38;5;179;48;5;94m░[38;5;179;48;5;94m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;172;48;5;234m [38;5;172;48;5;234m [38;5;172;48;5;234m [38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [0m
-[38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;52;48;5;16m [38;5;52;48;5;16m [38;5;52;48;5;16m [38;5;179;48;5;94m░[38;5;179;48;5;94m░[38;5;179;48;5;94m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;202;48;5;232m [38;5;202;48;5;232m [38;5;202;48;5;232m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [0m
-[38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;52;48;5;16m [38;5;52;48;5;16m [38;5;52;48;5;16m [38;5;179;48;5;94m░[38;5;179;48;5;94m░[38;5;179;48;5;94m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;202;48;5;232m [38;5;202;48;5;232m [38;5;202;48;5;232m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [0m
-[38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;52;48;5;16m [38;5;52;48;5;16m [38;5;52;48;5;16m [38;5;52;48;5;16m [38;5;52;48;5;16m [38;5;52;48;5;16m [38;5;130;48;5;233m [38;5;172;48;5;234m [38;5;172;48;5;234m [38;5;222;48;5;235m [38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;52;48;5;16m [38;5;52;48;5;16m [38;5;52;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [0m
-[38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;172;48;5;234m [38;5;172;48;5;234m [38;5;172;48;5;234m [38;5;172;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;202;48;5;232m [38;5;202;48;5;232m [38;5;202;48;5;232m [38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;52;48;5;16m [38;5;52;48;5;16m [38;5;52;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [0m
-[38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;172;48;5;234m [38;5;172;48;5;234m [38;5;172;48;5;234m [38;5;172;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;166;48;5;232m [38;5;202;48;5;232m [38;5;202;48;5;232m [38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;52;48;5;16m [38;5;52;48;5;16m [38;5;52;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [0m
-[38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;172;48;5;234m [38;5;172;48;5;234m [38;5;172;48;5;234m [38;5;179;48;5;94m░[38;5;179;48;5;94m░[38;5;179;48;5;94m░[38;5;222;48;5;235m [38;5;202;48;5;232m [38;5;202;48;5;232m [38;5;84;48;5;232m▒[38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;52;48;5;16m [38;5;52;48;5;16m [38;5;52;48;5;16m [38;5;52;48;5;16m [38;5;52;48;5;16m [38;5;52;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [0m
-[38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;70;48;5;233m▓[38;5;70;48;5;233m▓[38;5;70;48;5;233m▓[38;5;172;48;5;58m░[38;5;172;48;5;58m░[38;5;172;48;5;58m░[38;5;222;48;5;235m [38;5;222;48;5;235m [38;5;222;48;5;235m [38;5;184;48;5;233m [38;5;52;48;5;16m░[38;5;52;48;5;16m░[38;5;52;48;5;16m░[38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;52;48;5;16m░[38;5;52;48;5;16m░[38;5;52;48;5;16m░[38;5;52;48;5;16m░[38;5;52;48;5;16m░[38;5;52;48;5;16m░[38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [0m
-[38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;172;48;5;234m [38;5;172;48;5;234m [38;5;172;48;5;234m [38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;166;48;5;232m [38;5;202;48;5;232m [38;5;202;48;5;232m [38;5;52;48;5;16m░[38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [0m
-[38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;172;48;5;234m [38;5;172;48;5;234m [38;5;172;48;5;234m [38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;202;48;5;232m [38;5;202;48;5;232m [38;5;166;48;5;232m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [0m
-[38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;172;48;5;234m [38;5;172;48;5;234m [38;5;172;48;5;234m [38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;202;48;5;232m [38;5;202;48;5;232m [38;5;202;48;5;232m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [0m
-[38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;172;48;5;234m [38;5;172;48;5;234m [38;5;172;48;5;234m [38;5;179;48;5;94m░[38;5;179;48;5;94m░[38;5;179;48;5;94m░[38;5;202;48;5;232m [38;5;202;48;5;232m [38;5;202;48;5;232m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [0m
-[38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;172;48;5;234m [38;5;172;48;5;234m [38;5;172;48;5;234m [38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;202;48;5;232m [38;5;202;48;5;232m [38;5;202;48;5;232m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [0m
-[38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;172;48;5;234m [38;5;172;48;5;234m [38;5;172;48;5;234m [38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;222;48;5;58m░[38;5;202;48;5;232m [38;5;202;48;5;232m [38;5;202;48;5;232m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [0m
-[38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;52;48;5;16m░[38;5;172;48;5;234m [38;5;172;48;5;234m [38;5;172;48;5;234m [38;5;179;48;5;94m░[38;5;179;48;5;94m░[38;5;179;48;5;94m░[38;5;202;48;5;232m [38;5;202;48;5;232m [38;5;202;48;5;232m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [0m
-[38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;52;48;5;16m░[38;5;202;48;5;232m [38;5;202;48;5;232m [38;5;202;48;5;232m [38;5;202;48;5;232m [38;5;202;48;5;232m [38;5;202;48;5;232m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [0m
-[38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;52;48;5;16m░[38;5;202;48;5;232m [38;5;202;48;5;232m [38;5;202;48;5;232m [38;5;202;48;5;232m [38;5;202;48;5;232m [38;5;202;48;5;232m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [0m
-[38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [38;5;1;48;5;16m [0m
-[0m
\ No newline at end of file
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;54;54;18m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;54;41;16m [48;2;55;41;16m [48;2;55;41;17m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;56;41;15m [48;2;52;41;18m [48;2;132;101;36m [48;2;134;101;37m [48;2;133;101;36m [48;2;58;41;17m [48;2;55;40;16m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;51;38;14m [48;2;53;38;17m [48;2;136;102;39m [48;2;134;102;35m [48;2;56;42;15m [48;2;55;41;16m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;55;41;16m [48;2;92;69;27m [48;2;134;101;39m [48;2;107;81;30m [48;2;107;80;30m [48;2;117;88;32m [48;2;56;41;19m [48;2;55;41;16m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;55;41;16m [48;2;55;41;14m [48;2;132;98;35m [48;2;122;91;34m [48;2;105;81;29m [48;2;107;81;30m [48;2;107;80;30m [48;2;72;54;20m [48;2;73;53;22m [48;2;104;78;28m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;53;41;16m [48;2;134;101;37m [48;2;123;90;35m [48;2;107;83;30m [48;2;107;81;30m [48;2;107;80;32m [48;2;74;53;22m [48;2;74;53;24m [48;2;103;77;29m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;31;24;10m [48;2;31;24;8m [48;2;134;101;36m [48;2;126;93;35m [48;2;118;88;32m [48;2;107;81;30m [48;2;106;82;33m [48;2;88;67;24m [48;2;106;82;31m [48;2;108;81;29m [48;2;40;29;10m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;26;16;2m [48;2;25;17;2m [48;2;27;17;1m [48;2;71;51;17m [48;2;71;48;13m [48;2;106;82;34m [48;2;89;65;21m [48;2;89;64;23m [48;2;111;86;40m [48;2;30;18;5m [48;2;31;24;10m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;30;24;10m [48;2;31;24;10m [48;2;73;54;22m [48;2;73;50;16m [48;2;107;81;30m [48;2;89;67;22m [48;2;88;67;23m [48;2;107;81;30m [48;2;29;21;10m [48;2;31;24;10m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;72;53;21m [48;2;73;54;22m [48;2;105;78;30m [48;2;107;82;37m [48;2;40;28;10m [48;2;106;78;27m [48;2;107;81;30m [48;2;29;21;6m [48;2;31;24;10m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;74;54;22m [48;2;89;68;26m [48;2;104;79;31m [48;2;73;53;21m [48;2;74;57;24m [48;2;38;32;10m [48;2;69;51;19m [48;2;69;53;18m [48;2;67;54;18m [48;2;27;19;8m [48;2;32;24;10m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;73;54;22m [48;2;101;77;30m [48;2;137;101;38m [48;2;40;29;10m [48;2;41;29;10m [49m [49m [48;2;30;24;8m [48;2;31;24;10m [48;2;29;24;10m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;73;54;22m [48;2;72;55;22m [48;2;105;78;30m [48;2;72;55;19m [48;2;40;29;10m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;73;50;16m [48;2;71;52;18m [48;2;109;83;36m [48;2;72;57;23m [48;2;40;29;10m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;72;54;22m [48;2;105;81;34m [48;2;103;77;29m [48;2;40;29;10m [48;2;37;30;9m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;72;54;19m [48;2;73;54;23m [48;2;137;100;37m [48;2;34;23;2m [48;2;41;30;11m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;72;52;21m [48;2;72;54;24m [48;2;136;101;36m [48;2;36;25;1m [48;2;40;29;10m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;73;54;22m [48;2;105;76;30m [48;2;103;77;29m [48;2;40;29;10m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [48;2;72;53;22m [48;2;70;50;17m [48;2;139;106;43m [48;2;36;25;5m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [48;2;72;53;22m [48;2;70;50;20m [48;2;136;103;39m [48;2;39;31;13m [48;2;37;28;10m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [48;2;40;29;8m [48;2;40;31;10m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [48;2;48;24;12m [48;2;46;23;11m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
diff --git a/src/main/resources/textures/oak_door/bottom.ans b/src/main/resources/textures/oak_door/bottom.ans
new file mode 100644
index 0000000..e0f9573
--- /dev/null
+++ b/src/main/resources/textures/oak_door/bottom.ans
@@ -0,0 +1,25 @@
+[48;2;107;111;122m [48;2;120;112;104m [48;2;150;116;65m [48;2;103;80;44m [48;2;150;116;65m [48;2;126;98;55m [48;2;126;98;54m [48;2;181;140;80m [48;2;147;114;64m [48;2;102;80;44m [48;2;150;116;67m [48;2;150;116;64m [48;2;150;116;65m [48;2;81;61;37m [48;2;81;61;36m [48;2;174;136;77m [48;2;181;141;80m [48;2;148;116;65m [48;2;133;106;59m [48;2;126;98;53m [m
+[48;2;125;116;107m [48;2;133;116;94m [48;2;151;116;65m [48;2;110;85;47m [48;2;155;120;68m [48;2;159;123;69m [48;2;159;122;69m [48;2;143;111;62m [48;2;142;111;62m [48;2;176;137;77m [48;2;147;114;65m [48;2;110;85;47m [48;2;155;120;68m [48;2;159;123;69m [48;2;114;86;49m [48;2;112;86;49m [48;2;172;134;77m [48;2;176;137;77m [48;2;150;116;65m [48;2;130;101;58m [48;2;118;92;51m [m
+[48;2;167;130;77m [48;2;161;125;73m [48;2;150;116;64m [48;2;126;98;55m [48;2;166;130;77m [48;2;181;141;80m [48;2;183;141;80m [48;2;181;141;80m [48;2;166;130;77m [48;2;148;116;67m [48;2;126;98;55m [48;2;166;130;77m [48;2;167;131;77m [48;2;181;141;80m [48;2;166;130;77m [48;2;164;130;77m [48;2;150;116;65m [48;2;120;93;51m [48;2;103;81;44m [m
+[48;2;166;130;77m [48;2;161;125;73m [48;2;150;118;65m [48;2;166;130;77m [48;2;150;116;65m [48;2;130;101;56m [48;2;126;98;55m [48;2;136;105;59m [48;2;150;116;64m [48;2;150;116;65m [48;2;126;98;55m [48;2;127;98;55m [48;2;126;98;55m [48;2;148;115;64m [48;2;150;116;65m [48;2;150;116;67m [48;2;120;93;51m [48;2;102;80;44m [m
+[48;2;166;130;77m [48;2;161;125;73m [48;2;150;116;65m [48;2;166;130;77m [48;2;150;116;65m [48;2;150;116;64m [48;2;150;116;65m [48;2;128;101;56m [48;2;126;98;55m [48;2;136;105;59m [48;2;150;116;65m [48;2;126;98;55m [48;2;148;114;64m [48;2;150;116;65m [48;2;120;93;51m [48;2;103;82;44m [m
+[48;2;184;148;95m [48;2;173;138;85m [48;2;150;116;65m [48;2;81;61;36m [48;2;103;80;44m [48;2;103;82;44m [48;2;103;80;44m [48;2;102;80;44m [48;2;103;80;44m [48;2;103;80;45m [48;2;150;116;66m [48;2;119;91;52m [48;2;81;61;36m [48;2;103;80;44m [48;2;103;81;44m [48;2;103;80;44m [48;2;102;80;44m [48;2;103;80;44m [48;2;162;126;74m [48;2;166;131;77m [48;2;150;116;65m [48;2;106;81;46m [48;2;81;61;36m [m
+[48;2;184;148;95m [48;2;173;138;85m [48;2;150;117;65m [48;2;103;80;44m [48;2;101;80;44m [48;2;150;116;65m [48;2;148;116;65m [48;2;150;116;65m [48;2;166;128;77m [48;2;138;108;62m [48;2;103;82;44m [48;2;150;116;65m [48;2;150;116;64m [48;2;150;116;65m [48;2;165;129;76m [48;2;166;130;77m [48;2;150;116;65m [48;2;135;104;56m [48;2;126;98;55m [m
+[48;2;184;148;95m [48;2;173;138;85m [48;2;150;116;65m [48;2;103;80;44m [48;2;150;116;65m [48;2;150;116;64m [48;2;150;116;65m [48;2;165;130;77m [48;2;138;108;62m [48;2;103;80;44m [48;2;150;116;65m [48;2;165;129;76m [48;2;166;130;77m [48;2;150;116;65m [48;2;135;105;58m [48;2;126;98;55m [m
+[48;2;184;148;95m [48;2;173;137;85m [48;2;150;116;65m [48;2;103;80;44m [48;2;150;116;65m [48;2;148;116;65m [48;2;150;116;65m [48;2;130;101;56m [48;2;126;98;55m [48;2;181;140;80m [48;2;146;114;64m [48;2;103;80;44m [48;2;150;116;65m [48;2;151;116;65m [48;2;150;116;65m [48;2;126;98;55m [48;2;177;138;78m [48;2;181;141;80m [48;2;150;116;65m [48;2;120;93;51m [48;2;103;80;44m [m
+[48;2;185;148;95m [48;2;173;138;85m [48;2;150;116;65m [48;2;103;80;44m [48;2;150;116;65m [48;2;150;116;67m [48;2;150;116;65m [48;2;130;101;56m [48;2;126;98;55m [48;2;126;98;53m [48;2;181;141;80m [48;2;146;114;64m [48;2;103;80;44m [48;2;150;116;65m [48;2;131;101;56m [48;2;130;101;56m [48;2;126;98;55m [48;2;177;138;78m [48;2;181;141;80m [48;2;150;116;65m [48;2;120;93;51m [48;2;103;80;44m [m
+[48;2;184;148;95m [48;2;173;138;85m [48;2;150;116;65m [48;2;103;80;44m [48;2;150;116;65m [48;2;148;116;65m [48;2;126;98;55m [48;2;181;141;80m [48;2;145;114;64m [48;2;103;80;44m [48;2;150;116;64m [48;2;150;116;65m [48;2;126;99;55m [48;2;126;98;55m [48;2;179;138;78m [48;2;181;141;80m [48;2;150;116;65m [48;2;120;93;51m [48;2;103;82;44m [m
+[48;2;184;150;95m [48;2;173;138;85m [48;2;150;116;65m [48;2;126;98;55m [48;2;167;130;77m [48;2;181;141;80m [48;2;181;143;80m [48;2;181;141;80m [48;2;181;143;80m [48;2;166;131;77m [48;2;148;116;67m [48;2;126;98;55m [48;2;166;130;77m [48;2;167;131;77m [48;2;181;141;80m [48;2;181;141;82m [48;2;181;141;80m [48;2;166;130;77m [48;2;126;98;55m [48;2;97;74;42m [48;2;83;61;36m [m
+[48;2;173;139;86m [48;2;167;131;79m [48;2;150;116;65m [48;2;146;114;66m [48;2;146;112;66m [48;2;166;130;77m [48;2;172;135;78m [48;2;173;133;78m [48;2;165;128;72m [48;2;155;121;68m [48;2;153;119;67m [48;2;146;114;66m [48;2;142;110;63m [48;2;138;107;62m [48;2;166;130;77m [48;2;173;135;78m [48;2;165;130;72m [48;2;165;128;72m [48;2;153;119;67m [48;2;146;114;66m [48;2;146;114;67m [48;2;126;98;55m [48;2;111;86;49m [48;2;103;79;45m [m
+[48;2;166;130;77m [48;2;161;125;73m [48;2;150;116;65m [48;2;166;130;77m [48;2;150;116;65m [48;2;130;101;56m [48;2;126;98;55m [48;2;136;105;59m [48;2;150;116;65m [48;2;166;130;77m [48;2;150;116;65m [48;2;150;116;64m [48;2;126;98;55m [m
+[48;2;184;148;95m [48;2;173;138;85m [48;2;150;116;65m [48;2;81;61;36m [48;2;103;80;44m [48;2;103;80;46m [48;2;150;116;65m [48;2;139;108;60m [48;2;126;98;55m [48;2;103;80;44m [48;2;103;81;44m [48;2;103;80;44m [48;2;162;126;74m [48;2;166;128;76m [48;2;150;116;65m [48;2;120;93;51m [48;2;103;80;44m [m
+[48;2;176;146;101m [48;2;168;139;90m [48;2;150;118;65m [48;2;83;63;37m [48;2;108;84;46m [48;2;110;84;46m [48;2;108;84;46m [48;2;108;85;44m [48;2;108;84;46m [48;2;152;117;66m [48;2;139;108;60m [48;2;123;95;53m [48;2;108;84;46m [48;2;108;86;46m [48;2;108;84;46m [48;2;162;127;75m [48;2;166;130;77m [48;2;150;118;65m [48;2;121;93;51m [48;2;103;80;44m [m
+[48;2;128;139;149m [48;2;134;131;122m [48;2;150;116;65m [48;2;103;80;44m [48;2;148;116;65m [48;2;150;116;67m [48;2;150;116;65m [48;2;150;116;67m [48;2;150;116;65m [48;2;166;130;77m [48;2;138;108;62m [48;2;102;80;44m [48;2;150;116;65m [48;2;165;129;76m [48;2;166;130;77m [48;2;150;116;65m [48;2;120;93;51m [48;2;103;80;44m [m
+[48;2;107;111;122m [48;2;120;112;104m [48;2;148;116;65m [48;2;103;80;44m [48;2;150;116;65m [48;2;130;101;56m [48;2;126;98;55m [48;2;181;141;80m [48;2;144;112;64m [48;2;103;80;44m [48;2;150;116;65m [48;2;126;98;55m [48;2;177;138;79m [48;2;181;141;80m [48;2;151;116;65m [48;2;106;81;46m [48;2;81;60;36m [m
+[48;2;107;111;122m [48;2;120;112;104m [48;2;150;116;65m [48;2;103;80;44m [48;2;103;80;46m [48;2;150;116;65m [48;2;150;116;64m [48;2;150;116;65m [48;2;150;116;67m [48;2;130;101;56m [48;2;126;98;55m [48;2;181;143;80m [48;2;146;114;64m [48;2;103;80;44m [48;2;150;117;64m [48;2;150;116;65m [48;2;151;116;65m [48;2;126;98;55m [48;2;177;138;78m [48;2;181;141;80m [48;2;148;116;65m [48;2;106;81;46m [48;2;81;61;36m [m
+[48;2;166;130;77m [48;2;161;124;73m [48;2;151;116;65m [48;2;103;80;44m [48;2;150;116;65m [48;2;126;98;55m [48;2;181;141;80m [48;2;144;115;64m [48;2;103;82;44m [48;2;150;116;65m [48;2;126;98;55m [48;2;177;139;78m [48;2;181;141;80m [48;2;150;116;67m [48;2;135;104;58m [48;2;126;98;52m [m
+[48;2;166;130;77m [48;2;161;125;73m [48;2;150;116;65m [48;2;124;96;54m [48;2;165;129;76m [48;2;179;138;77m [48;2;179;139;79m [48;2;177;137;78m [48;2;176;136;78m [48;2;177;136;78m [48;2;166;128;77m [48;2;148;115;67m [48;2;124;96;54m [48;2;165;129;76m [48;2;166;130;76m [48;2;179;139;79m [48;2;177;138;78m [48;2;167;131;79m [48;2;166;130;77m [48;2;127;99;55m [48;2;112;87;48m [48;2;104;81;44m [m
+[48;2;166;130;77m [48;2;161;125;73m [48;2;150;116;65m [48;2;126;98;55m [48;2;166;130;77m [48;2;181;141;80m [48;2;183;143;80m [48;2;181;141;80m [48;2;166;130;77m [48;2;148;116;67m [48;2;126;98;55m [48;2;166;130;77m [48;2;167;131;77m [48;2;181;141;80m [48;2;166;130;79m [48;2;164;130;77m [48;2;126;97;55m [48;2;111;86;48m [48;2;103;80;44m [m
+[48;2;184;148;95m [48;2;165;132;82m [48;2;126;98;55m [48;2;124;99;55m [48;2;126;98;55m [48;2;150;116;65m [48;2;166;130;77m [48;2;166;130;79m [48;2;153;118;67m [48;2;150;116;65m [48;2;126;98;55m [48;2;150;116;65m [48;2;152;117;66m [48;2;166;130;77m [48;2;150;116;65m [48;2;127;99;55m [48;2;126;98;55m [48;2;111;86;48m [48;2;103;80;44m [m
+[48;2;133;105;63m [48;2;122;95;56m [48;2;97;74;43m [48;2;106;81;46m [48;2;112;86;51m [48;2;108;82;47m [48;2;106;81;46m [48;2;97;74;43m [48;2;106;81;46m [48;2;107;82;47m [48;2;112;86;51m [48;2;106;81;46m [48;2;98;75;43m [48;2;97;74;43m [48;2;92;70;40m [48;2;89;68;39m [m
+[48;2;103;80;44m [48;2;96;74;41m [48;2;81;61;36m [m
diff --git a/src/main/resources/textures/oak_door/bottomclosed.ans b/src/main/resources/textures/oak_door/bottomclosed.ans
new file mode 100644
index 0000000..1de16c8
--- /dev/null
+++ b/src/main/resources/textures/oak_door/bottomclosed.ans
@@ -0,0 +1,25 @@
+[48;2;101;109;117m [48;2;111;99;79m [48;2;119;92;51m [48;2;81;63;35m [48;2;80;62;34m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;85;89;96m [48;2;105;90;70m [48;2;119;92;51m [48;2;81;63;35m [48;2;80;62;34m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;129;102;63m [48;2;123;96;56m [48;2;119;92;51m [48;2;99;76;42m [48;2;98;76;42m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;131;103;61m [48;2;124;96;55m [48;2;119;92;51m [48;2;100;77;42m [48;2;100;76;42m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;131;103;61m [48;2;124;96;55m [48;2;119;92;51m [48;2;131;103;60m [48;2;130;102;60m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;140;112;70m [48;2;128;100;59m [48;2;119;92;51m [48;2;88;68;40m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;145;117;75m [48;2;130;102;61m [48;2;119;92;49m [48;2;64;48;28m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;145;117;73m [48;2;130;102;61m [48;2;119;92;51m [48;2;81;63;35m [48;2;80;62;34m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;145;117;75m [48;2;130;102;61m [48;2;119;92;51m [48;2;81;63;35m [48;2;80;62;38m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;145;117;75m [48;2;130;102;61m [48;2;119;92;51m [48;2;81;63;35m [48;2;80;62;34m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;145;117;75m [48;2;130;102;61m [48;2;119;92;51m [48;2;81;63;35m [48;2;80;62;34m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;145;117;75m [48;2;130;102;61m [48;2;119;92;51m [48;2;89;69;38m [48;2;88;68;38m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;145;117;75m [48;2;130;102;61m [48;2;119;92;51m [48;2;100;77;43m [48;2;100;76;42m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;131;103;61m [48;2;124;96;55m [48;2;119;94;51m [48;2;131;103;61m [48;2;130;102;60m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;135;108;66m [48;2;126;98;57m [48;2;119;92;51m [48;2;114;87;51m [48;2;112;86;50m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;145;117;75m [48;2;130;102;61m [48;2;119;92;51m [48;2;64;48;28m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;101;110;118m [48;2;111;99;82m [48;2;119;92;51m [48;2;81;63;35m [48;2;80;62;32m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;95;102;110m [48;2;109;96;76m [48;2;119;92;51m [48;2;81;63;35m [48;2;80;62;34m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;85;88;96m [48;2;105;90;70m [48;2;119;92;51m [48;2;81;63;35m [48;2;80;62;34m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;131;103;61m [48;2;124;96;55m [48;2;119;92;51m [48;2;81;63;35m [48;2;80;62;34m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;131;103;61m [48;2;124;96;55m [48;2;119;92;51m [48;2;89;69;38m [48;2;88;68;38m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;131;103;61m [48;2;124;96;55m [48;2;119;92;51m [48;2;100;77;43m [48;2;100;76;42m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;145;117;75m [48;2;119;94;56m [48;2;100;77;43m [48;2;100;76;42m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;118;94;58m [48;2;99;77;46m [48;2;84;64;36m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;81;63;35m [48;2;73;56;32m [48;2;64;48;28m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
diff --git a/src/main/resources/textures/oak_door/items/oak_door.ans b/src/main/resources/textures/oak_door/items/oak_door.ans
new file mode 100644
index 0000000..46d42cd
--- /dev/null
+++ b/src/main/resources/textures/oak_door/items/oak_door.ans
@@ -0,0 +1,25 @@
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;105;84;51m [48;2;159;132;77m [48;2;153;136;68m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;105;84;51m [48;2;159;132;77m [48;2;153;136;68m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;105;84;51m [48;2;159;132;77m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;158;130;75m [48;2;159;132;77m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;159;132;77m [48;2;153;136;68m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;107;111;122m [48;2;159;132;77m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;158;130;75m [48;2;159;132;77m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;159;132;77m [48;2;153;136;68m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;105;111;122m [48;2;159;132;77m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;158;130;75m [48;2;159;132;77m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;159;132;77m [48;2;153;136;68m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;105;84;51m [48;2;159;132;77m [48;2;159;134;77m [48;2;159;132;77m [48;2;153;136;68m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;105;84;51m [48;2;159;132;77m [48;2;157;130;75m [48;2;158;131;75m [48;2;159;132;77m [48;2;157;130;75m [48;2;159;132;77m [48;2;153;136;68m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;105;84;51m [48;2;159;132;77m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;158;130;75m [48;2;159;132;77m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;159;132;77m [48;2;153;136;68m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;105;84;51m [48;2;159;132;77m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;158;130;75m [48;2;159;132;77m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;159;132;77m [48;2;153;136;68m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;106;97;86m [48;2;159;132;77m [48;2;158;132;76m [48;2;158;130;76m [48;2;159;132;77m [48;2;158;132;76m [48;2;154;132;86m [48;2;128;138;148m [48;2;106;110;122m [48;2;159;132;77m [48;2;153;136;68m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;107;111;122m [48;2;159;132;77m [48;2;155;132;86m [48;2;128;139;149m [48;2;107;111;122m [48;2;159;132;77m [48;2;153;136;68m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;105;84;51m [48;2;159;132;77m [48;2;159;132;76m [48;2;126;98;55m [48;2;140;112;64m [48;2;159;132;77m [48;2;126;98;55m [48;2;159;132;77m [48;2;153;136;68m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;105;84;51m [48;2;159;132;77m [48;2;126;98;55m [48;2;128;99;56m [48;2;129;100;56m [48;2;142;114;65m [48;2;159;132;77m [48;2;126;98;55m [48;2;129;100;56m [48;2;159;132;77m [48;2;153;136;68m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;105;84;51m [48;2;159;132;77m [48;2;126;98;55m [48;2;145;112;63m [48;2;150;116;65m [48;2;153;123;70m [48;2;159;132;77m [48;2;126;98;55m [48;2;129;102;56m [48;2;150;116;65m [48;2;159;132;77m [48;2;153;136;85m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;105;84;51m [48;2;159;132;79m [48;2;159;132;77m [48;2;159;133;77m [48;2;159;132;77m [48;2;159;134;77m [48;2;159;132;77m [48;2;153;136;68m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;105;84;51m [48;2;159;132;77m [48;2;153;136;85m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;107;111;122m [48;2;159;132;77m [48;2;126;98;55m [48;2;140;112;64m [48;2;159;132;77m [48;2;126;98;55m [48;2;159;132;77m [48;2;153;136;68m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;105;85;55m [48;2;159;132;77m [48;2;126;98;55m [48;2;144;111;62m [48;2;148;114;64m [48;2;153;122;69m [48;2;159;132;77m [48;2;126;98;55m [48;2;128;100;56m [48;2;148;114;64m [48;2;159;132;77m [48;2;153;136;68m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;105;84;51m [48;2;159;132;77m [48;2;126;98;55m [48;2;145;112;63m [48;2;150;116;65m [48;2;153;123;68m [48;2;159;132;77m [48;2;126;98;55m [48;2;129;100;56m [48;2;150;116;65m [48;2;159;132;77m [48;2;153;136;68m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;105;84;51m [48;2;159;132;77m [48;2;153;136;68m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;105;84;51m [48;2;125;102;60m [48;2;119;102;51m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;105;84;51m [48;2;102;85;51m [49m [49m [49m [49m [49m [49m [49m [49m [m
diff --git a/src/main/resources/textures/oak_door/top.ans b/src/main/resources/textures/oak_door/top.ans
new file mode 100644
index 0000000..b960535
--- /dev/null
+++ b/src/main/resources/textures/oak_door/top.ans
@@ -0,0 +1,25 @@
+[48;2;184;148;95m [48;2;178;142;89m [48;2;166;130;77m [48;2;184;148;95m [48;2;166;130;77m [48;2;173;137;84m [48;2;184;148;95m [48;2;166;130;77m [48;2;182;146;93m [48;2;184;148;95m [48;2;162;128;76m [48;2;150;116;65m [m
+[48;2;178;142;89m [48;2;172;137;84m [48;2;160;125;73m [48;2;161;125;73m [48;2;173;138;85m [48;2;161;125;73m [48;2;166;131;78m [48;2;173;138;85m [48;2;172;138;85m [48;2;161;125;73m [48;2;172;137;84m [48;2;173;138;85m [48;2;149;117;68m [48;2;135;104;58m [m
+[48;2;166;130;77m [48;2;161;125;73m [48;2;150;116;65m [48;2;120;93;51m [48;2;103;80;44m [m
+[48;2;184;148;95m [48;2;173;138;85m [48;2;150;116;65m [48;2;81;61;36m [48;2;103;80;44m [48;2;150;118;65m [48;2;119;91;52m [48;2;81;61;36m [48;2;103;80;44m [48;2;147;113;63m [48;2;150;116;65m [48;2;120;93;51m [48;2;103;80;44m [m
+[48;2;184;148;95m [48;2;173;138;85m [48;2;150;116;65m [48;2;81;61;36m [48;2;103;80;44m [48;2;150;116;65m [48;2;119;91;52m [48;2;81;61;36m [48;2;103;80;44m [48;2;103;82;44m [48;2;103;80;44m [48;2;147;113;63m [48;2;150;116;65m [48;2;120;93;51m [48;2;103;80;44m [m
+[48;2;184;148;95m [48;2;173;138;85m [48;2;150;116;65m [48;2;103;80;44m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;166;130;77m [48;2;139;108;62m [48;2;103;80;44m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;165;129;76m [48;2;166;130;77m [48;2;150;116;65m [48;2;106;81;46m [48;2;81;61;36m [m
+[48;2;128;139;149m [48;2;134;131;122m [48;2;150;116;65m [48;2;103;80;44m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;181;141;80m [48;2;146;114;64m [48;2;103;80;44m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;180;140;80m [48;2;181;141;80m [48;2;150;116;65m [48;2;135;104;58m [48;2;126;98;55m [m
+[48;2;128;139;149m [48;2;134;131;122m [48;2;150;116;65m [48;2;103;80;44m [48;2;103;81;44m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;181;141;80m [48;2;146;114;64m [48;2;103;80;44m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;180;140;80m [48;2;181;141;80m [48;2;150;116;65m [48;2;135;104;58m [48;2;126;98;55m [m
+[48;2;111;111;111m [48;2;123;112;96m [48;2;150;116;65m [48;2;103;80;44m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;166;130;77m [48;2;138;108;62m [48;2;103;80;44m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;165;129;76m [48;2;166;130;77m [48;2;150;116;65m [48;2;120;93;51m [48;2;103;80;44m [m
+[48;2;155;126;81m [48;2;153;123;77m [48;2;150;116;65m [48;2;121;94;52m [48;2;165;129;76m [48;2;181;140;80m [48;2;168;131;77m [48;2;165;129;76m [48;2;166;130;77m [48;2;146;114;66m [48;2;121;94;52m [48;2;165;129;76m [48;2;167;130;76m [48;2;181;140;80m [48;2;165;129;76m [48;2;166;130;77m [48;2;150;116;65m [48;2;120;93;51m [48;2;103;80;44m [m
+[48;2;166;130;77m [48;2;161;125;73m [48;2;150;116;65m [48;2;126;98;55m [48;2;166;130;77m [48;2;181;141;80m [48;2;168;132;77m [48;2;166;130;77m [48;2;148;116;67m [48;2;126;98;55m [48;2;166;130;77m [48;2;167;131;77m [48;2;181;141;80m [48;2;166;130;77m [48;2;150;116;65m [48;2;120;93;51m [48;2;103;80;44m [m
+[48;2;184;148;95m [48;2;173;138;85m [48;2;150;116;65m [48;2;81;61;36m [48;2;103;80;44m [48;2;103;80;45m [48;2;150;116;65m [48;2;119;91;52m [48;2;81;61;36m [48;2;103;80;44m [48;2;147;113;63m [48;2;150;116;65m [48;2;106;81;46m [48;2;81;61;36m [m
+[48;2;184;148;95m [48;2;173;138;85m [48;2;150;116;65m [48;2;92;70;40m [48;2;102;80;44m [48;2;158;123;71m [48;2;129;100;57m [48;2;92;70;40m [48;2;102;80;44m [48;2;155;120;69m [48;2;158;123;71m [48;2;150;116;65m [48;2;120;93;52m [48;2;103;79;45m [m
+[48;2;184;148;95m [48;2;173;138;85m [48;2;150;117;65m [48;2;103;80;44m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;166;130;77m [48;2;138;108;62m [48;2;103;80;44m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;165;129;76m [48;2;166;128;77m [48;2;150;116;65m [48;2;135;104;58m [48;2;126;98;55m [m
+[48;2;166;130;77m [48;2;161;125;73m [48;2;150;116;65m [48;2;102;80;44m [48;2;103;80;44m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;181;141;80m [48;2;146;114;64m [48;2;103;80;44m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;180;140;80m [48;2;181;141;80m [48;2;150;116;65m [48;2;120;93;51m [48;2;103;80;44m [m
+[48;2;168;132;79m [48;2;162;127;74m [48;2;150;116;65m [48;2;103;80;44m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;179;139;79m [48;2;145;113;64m [48;2;103;80;44m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;178;138;80m [48;2;179;139;79m [48;2;150;116;65m [48;2;120;93;51m [48;2;103;80;44m [m
+[48;2;184;148;95m [48;2;173;138;85m [48;2;150;116;65m [48;2;103;80;44m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;166;130;77m [48;2;138;108;62m [48;2;103;80;44m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [48;2;165;129;76m [48;2;166;130;77m [48;2;150;116;65m [48;2;120;93;51m [48;2;103;80;44m [m
+[48;2;184;148;95m [48;2;173;138;85m [48;2;150;116;65m [48;2;126;98;55m [48;2;166;130;77m [48;2;181;141;80m [48;2;168;132;77m [48;2;166;130;77m [48;2;148;116;67m [48;2;126;98;55m [48;2;166;130;77m [48;2;167;131;77m [48;2;181;141;80m [48;2;166;130;77m [48;2;150;116;65m [48;2;106;81;46m [48;2;81;61;36m [m
+[48;2;184;148;95m [48;2;173;138;85m [48;2;150;116;65m [48;2;126;98;55m [48;2;166;130;77m [48;2;181;141;80m [48;2;168;132;77m [48;2;166;130;77m [48;2;164;130;77m [48;2;148;116;67m [48;2;126;98;55m [48;2;166;130;77m [48;2;167;131;77m [48;2;181;141;80m [48;2;166;130;77m [48;2;150;116;65m [48;2;106;81;46m [48;2;81;61;36m [m
+[48;2;184;148;95m [48;2;173;138;85m [48;2;150;116;65m [48;2;166;130;77m [48;2;150;116;65m [48;2;130;101;56m [48;2;126;98;54m [48;2;126;98;55m [48;2;143;112;64m [48;2;166;130;77m [48;2;150;116;65m [48;2;126;98;55m [48;2;150;116;65m [48;2;135;104;58m [48;2;126;98;55m [m
+[48;2;184;148;95m [48;2;173;138;85m [48;2;150;117;65m [48;2;86;65;38m [48;2;106;83;46m [48;2;105;82;45m [48;2;104;81;44m [48;2;148;114;64m [48;2;121;93;53m [48;2;86;65;38m [48;2;106;83;46m [48;2;105;82;45m [48;2;105;83;45m [48;2;104;81;44m [48;2;145;112;63m [48;2;148;114;64m [48;2;150;116;65m [48;2;121;94;52m [48;2;104;81;44m [m
+[48;2;184;148;95m [48;2;173;138;85m [48;2;150;116;65m [48;2;81;61;36m [48;2;103;80;44m [48;2;150;116;65m [48;2;119;91;52m [48;2;81;61;36m [48;2;103;80;44m [48;2;147;113;63m [48;2;150;116;65m [48;2;120;93;51m [48;2;103;80;44m [m
+[48;2;166;130;77m [48;2;161;125;73m [48;2;150;116;65m [48;2;103;80;44m [48;2;150;117;65m [48;2;150;116;65m [48;2;166;130;77m [48;2;138;108;62m [48;2;103;80;44m [48;2;150;116;65m [48;2;128;139;149m [48;2;108;112;123m [48;2;107;111;122m [48;2;150;116;65m [48;2;120;93;51m [48;2;103;80;44m [m
+[48;2;142;135;122m [48;2;144;129;104m [48;2;150;116;65m [48;2;103;80;44m [48;2;150;116;65m [48;2;137;106;59m [48;2;135;104;58m [48;2;166;130;77m [48;2;138;108;62m [48;2;103;80;44m [48;2;150;116;65m [48;2;114;121;132m [48;2;98;90;78m [48;2;117;102;80m [48;2;118;102;80m [48;2;150;116;65m [48;2;112;86;48m [48;2;89;68;39m [m
+[48;2;128;139;149m [48;2;134;131;122m [48;2;150;116;65m [48;2;103;80;44m [48;2;150;116;65m [48;2;130;101;56m [48;2;126;98;55m [48;2;166;130;77m [48;2;138;108;62m [48;2;103;80;44m [48;2;150;116;65m [48;2;107;111;122m [48;2;81;61;36m [48;2;123;95;53m [48;2;126;98;55m [48;2;150;116;65m [48;2;106;81;46m [48;2;81;61;36m [m
diff --git a/src/main/resources/textures/oak_door/topclosed.ans b/src/main/resources/textures/oak_door/topclosed.ans
new file mode 100644
index 0000000..02966ff
--- /dev/null
+++ b/src/main/resources/textures/oak_door/topclosed.ans
@@ -0,0 +1,25 @@
+[48;2;145;117;75m [48;2;134;106;65m [48;2;131;103;61m [48;2;130;102;60m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;142;114;72m [48;2;130;102;61m [48;2;127;99;58m [48;2;126;98;58m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;131;103;61m [48;2;122;95;53m [48;2;119;92;51m [48;2;118;92;50m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;144;116;74m [48;2;126;98;57m [48;2;119;92;51m [48;2;66;50;29m [48;2;66;50;28m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;145;117;75m [48;2;126;99;58m [48;2;119;92;51m [48;2;64;48;28m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;145;117;75m [48;2;126;99;58m [48;2;119;92;51m [48;2;81;63;35m [48;2;80;62;34m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;128;114;93m [48;2;121;98;63m [48;2;119;92;51m [48;2;81;61;35m [48;2;80;62;34m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;101;110;118m [48;2;114;97;72m [48;2;119;92;51m [48;2;81;63;35m [48;2;80;62;34m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;88;88;88m [48;2;112;91;62m [48;2;119;92;51m [48;2;81;63;34m [48;2;80;62;34m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;88;88;88m [48;2;112;91;62m [48;2;119;92;51m [48;2;81;63;35m [48;2;80;62;34m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;131;103;61m [48;2;122;95;53m [48;2;119;92;51m [48;2;100;77;43m [48;2;100;78;42m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;139;111;69m [48;2;124;97;56m [48;2;119;92;51m [48;2;79;60;34m [48;2;78;60;32m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;145;117;75m [48;2;126;99;58m [48;2;119;92;51m [48;2;64;48;28m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;145;119;75m [48;2;127;99;58m [48;2;119;93;51m [48;2;81;63;35m [48;2;80;62;38m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;142;114;72m [48;2;125;98;57m [48;2;119;92;51m [48;2;81;63;35m [48;2;80;62;34m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;131;103;61m [48;2;122;95;53m [48;2;119;92;51m [48;2;81;63;35m [48;2;80;62;34m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;144;116;74m [48;2;126;98;57m [48;2;119;92;51m [48;2;81;63;35m [48;2;80;62;34m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;145;117;75m [48;2;126;99;58m [48;2;119;92;51m [48;2;81;63;34m [48;2;80;62;34m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;145;117;75m [48;2;126;99;58m [48;2;119;92;51m [48;2;100;77;43m [48;2;100;76;42m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;145;117;75m [48;2;126;99;58m [48;2;119;92;51m [48;2;117;91;53m [48;2;116;90;52m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;145;117;75m [48;2;130;102;61m [48;2;119;92;51m [48;2;131;103;61m [48;2;128;102;60m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;147;117;75m [48;2;130;102;61m [48;2;119;92;51m [48;2;64;48;28m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;141;113;71m [48;2;128;101;59m [48;2;119;92;51m [48;2;69;52;30m [48;2;68;52;30m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;131;103;61m [48;2;124;96;55m [48;2;119;92;51m [48;2;81;63;35m [48;2;84;62;34m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m
+[48;2;101;110;118m [48;2;111;99;80m [48;2;119;93;51m [48;2;81;63;35m [48;2;80;62;34m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [49m [m