From 56d0405a94d4a5d1c09f52c551cabca7764d0ab2 Mon Sep 17 00:00:00 2001
From: Ella Paws <>
Date: Tue, 8 Feb 2022 01:44:43 +0100
Subject: [PATCH] more leti! and changing some models and textures

---
 main/java/ella/techia/block/Connector.java    |   2 +
 main/java/ella/techia/block/Delayer.java      |  22 +++++-
 main/java/ella/techia/block/Inverter.java     |  33 +++++++-
 main/java/ella/techia/leti/LetiNetwork.java   |   7 +-
 .../ella/techia/registry/TechiaRegistry.java  |  27 ++++---
 .../assets/techia/blockstates/delayer.json    |  74 ++++++++++++++++++
 .../assets/techia/blockstates/inverter.json   |  20 +++++
 .../techia/models/block/connector_side.json   |   2 +-
 .../assets/techia/models/block/delayer_1.json |   1 +
 .../techia/models/block/delayer_10.json       |   1 +
 .../assets/techia/models/block/delayer_2.json |   1 +
 .../assets/techia/models/block/delayer_3.json |   1 +
 .../assets/techia/models/block/delayer_4.json |   1 +
 .../assets/techia/models/block/delayer_5.json |   1 +
 .../assets/techia/models/block/delayer_6.json |   1 +
 .../assets/techia/models/block/delayer_7.json |   1 +
 .../assets/techia/models/block/delayer_8.json |   1 +
 .../assets/techia/models/block/delayer_9.json |   1 +
 .../assets/techia/models/block/inverter.json  |   1 +
 .../textures/block/asmite_button_off.png      | Bin 0 -> 211 bytes
 .../textures/block/asmite_button_on.png       | Bin 0 -> 211 bytes
 .../techia/textures/block/asmite_panel.png    | Bin 0 -> 209 bytes
 .../textures/block/asmite_toggle_off.png      | Bin 0 -> 189 bytes
 .../textures/block/asmite_toggle_on.png       | Bin 0 -> 189 bytes
 .../techia/textures/block/connector.png       | Bin 174 -> 159 bytes
 .../techia/textures/block/connector_on.png    | Bin 176 -> 159 bytes
 .../assets/techia/textures/block/delay_1.png  | Bin 159 -> 140 bytes
 .../assets/techia/textures/block/delay_10.png | Bin 0 -> 137 bytes
 .../assets/techia/textures/block/delay_2.png  | Bin 159 -> 139 bytes
 .../assets/techia/textures/block/delay_3.png  | Bin 168 -> 137 bytes
 .../assets/techia/textures/block/delay_4.png  | Bin 156 -> 140 bytes
 .../assets/techia/textures/block/delay_5.png  | Bin 161 -> 142 bytes
 .../assets/techia/textures/block/delay_6.png  | Bin 168 -> 139 bytes
 .../assets/techia/textures/block/delay_7.png  | Bin 0 -> 138 bytes
 .../assets/techia/textures/block/delay_8.png  | Bin 0 -> 140 bytes
 .../assets/techia/textures/block/delay_9.png  | Bin 0 -> 139 bytes
 .../assets/techia/textures/block/invert.png   | Bin 168 -> 139 bytes
 .../techia/{recipes => }/intersector.json     |   0
 .../data/techia/recipes/asmite_button.json    |   7 ++
 .../data/techia/recipes/asmite_toggle.json    |   7 ++
 .../techia/recipes/asmite_wall_button.json    |   7 ++
 .../techia/recipes/asmite_wall_toggle.json    |   7 ++
 42 files changed, 208 insertions(+), 18 deletions(-)
 create mode 100644 main/resources/assets/techia/blockstates/delayer.json
 create mode 100644 main/resources/assets/techia/blockstates/inverter.json
 create mode 100644 main/resources/assets/techia/models/block/delayer_1.json
 create mode 100644 main/resources/assets/techia/models/block/delayer_10.json
 create mode 100644 main/resources/assets/techia/models/block/delayer_2.json
 create mode 100644 main/resources/assets/techia/models/block/delayer_3.json
 create mode 100644 main/resources/assets/techia/models/block/delayer_4.json
 create mode 100644 main/resources/assets/techia/models/block/delayer_5.json
 create mode 100644 main/resources/assets/techia/models/block/delayer_6.json
 create mode 100644 main/resources/assets/techia/models/block/delayer_7.json
 create mode 100644 main/resources/assets/techia/models/block/delayer_8.json
 create mode 100644 main/resources/assets/techia/models/block/delayer_9.json
 create mode 100644 main/resources/assets/techia/models/block/inverter.json
 create mode 100644 main/resources/assets/techia/textures/block/asmite_button_off.png
 create mode 100644 main/resources/assets/techia/textures/block/asmite_button_on.png
 create mode 100644 main/resources/assets/techia/textures/block/asmite_panel.png
 create mode 100644 main/resources/assets/techia/textures/block/asmite_toggle_off.png
 create mode 100644 main/resources/assets/techia/textures/block/asmite_toggle_on.png
 create mode 100644 main/resources/assets/techia/textures/block/delay_10.png
 create mode 100644 main/resources/assets/techia/textures/block/delay_7.png
 create mode 100644 main/resources/assets/techia/textures/block/delay_8.png
 create mode 100644 main/resources/assets/techia/textures/block/delay_9.png
 rename main/resources/data/techia/{recipes => }/intersector.json (100%)
 create mode 100644 main/resources/data/techia/recipes/asmite_button.json
 create mode 100644 main/resources/data/techia/recipes/asmite_toggle.json
 create mode 100644 main/resources/data/techia/recipes/asmite_wall_button.json
 create mode 100644 main/resources/data/techia/recipes/asmite_wall_toggle.json

diff --git a/main/java/ella/techia/block/Connector.java b/main/java/ella/techia/block/Connector.java
index 0d05868..1dc2c0f 100644
--- a/main/java/ella/techia/block/Connector.java
+++ b/main/java/ella/techia/block/Connector.java
@@ -37,4 +37,6 @@ public class Connector extends LetiConnectable {
 	public boolean output(/*ServerWorld world, BlockPos pos,*/ BlockState state, Direction direction){
 		return state.get(Properties.POWERED);
 	}
+	// not having NOTIFY_NEIGHBORS will reduce lag :3
+	// however, blocks that take the input wouldn't get updates that way
 }
diff --git a/main/java/ella/techia/block/Delayer.java b/main/java/ella/techia/block/Delayer.java
index b7988b2..6d8f03d 100644
--- a/main/java/ella/techia/block/Delayer.java
+++ b/main/java/ella/techia/block/Delayer.java
@@ -1,17 +1,22 @@
 package ella.techia.block;
 
+import ella.techia.leti.LetiNetwork;
+import java.util.Random;
 import net.minecraft.block.*;
 import net.minecraft.entity.player.PlayerEntity;
 import net.minecraft.item.ItemPlacementContext;
 import net.minecraft.state.StateManager;
 import net.minecraft.state.property.IntProperty;
+import net.minecraft.state.property.Properties;
 import net.minecraft.util.ActionResult;
 import net.minecraft.util.Hand;
 import net.minecraft.util.hit.BlockHitResult;
 import net.minecraft.util.math.BlockPos;
+import net.minecraft.world.World;
 
 public class Delayer extends FacingLeti {
-	public static final IntProperty DELAY = IntProperty.of("delay", 1, 6);
+	private static final MAX_DELAY = 10;
+	public static final IntProperty DELAY = IntProperty.of("delay", 1, MAX_DELAY);
 
 	public Delayer(net.minecraft.block.AbstractBlock.Settings settings){
 		super(settings);
@@ -33,7 +38,20 @@ public class Delayer extends FacingLeti {
 
 	@Override
 	public ActionResult onUse(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit){
-		world.setBlockState(pos, state.with(DELAY, (state.get(DELAY) - 1) % 6 + 2));
+		world.setBlockState(pos, state.with(DELAY, (state.get(DELAY) - 1) % MAX_DELAY + 2));
 		return ActionResult.SUCCESS;
 	}
+
+	@Override
+	public void neighborUpdate(BlockState state, World world, BlockPos pos, Block block, BlockPos fromPos, boolean notify){
+		super.neighborUpdate(state, world, pos, block, fromPos, notify);
+		if(pos.offset(state.get(Properties.FACING), -1).getManhattanDistance(fromPos) == 0) world.getBlockTickScheduler().schedule(pos, block, state.get(DELAY), 1);
+	}
+
+	@Override
+	public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random random){
+		Direction facing = state.get(Properties.FACING);
+		world.setBlockState(pos, state.with(Properties.POWERED, LetiNetwork.output(world.getBlockState(pos.offset(facing.getOpposite())), facing)));
+		LetiNetwork.at(pos.offset(state.get(Properties.FACING))).updateInputs();
+	}
 }
diff --git a/main/java/ella/techia/block/Inverter.java b/main/java/ella/techia/block/Inverter.java
index 9004c9e..a67e99e 100644
--- a/main/java/ella/techia/block/Inverter.java
+++ b/main/java/ella/techia/block/Inverter.java
@@ -1,14 +1,31 @@
 package ella.techia.block;
 
+import ella.techia.leti.LetiNetwork;
+import java.util.Random;
 import net.minecraft.block.*;
+import net.minecraft.state.StateManager;
+import net.minecraft.state.property.IntProperty;
+import net.minecraft.state.property.Properties;
 import net.minecraft.util.math.BlockPos;
 import net.minecraft.util.math.Direction;
+import net.minecraft.world.World;
 import net.minecraft.world.WorldAccess;
 
-public class Inverter extends FacingLeti /*implements LetiBlock, Waterloggable*/ {
+public class Inverter extends FacingLeti {
+	public static final IntProperty INPUT = BooleanProperty.of("input");
 
 	public Inverter(net.minecraft.block.AbstractBlock.Settings settings){
 		super(settings);
+		this.setDefaultState(
+			this.stateManager.getDefaultState()
+			.with(Properties.POWERED, true)
+			.with(Properties.INPUT, false));
+	}
+
+	@Override
+	protected void appendProperties(StateManager.Builder<Block, BlockState> builder){
+		super.appendProperties(builder);
+		builder.add(Properties.INPUT);
 	}
 
 	@Override
@@ -21,6 +38,18 @@ public class Inverter extends FacingLeti /*implements LetiBlock, Waterloggable*/
 		BlockPos neighborPos
 	){
 		Direction facing = state.get(Properties.FACING);
-		return state.with(Properties.POWERED, !LetiNetwork.output(world.getBlockState(pos.offset(facing.getOpposite())), facing));
+		return state.with(Properties.INPUT, LetiNetwork.output(world.getBlockState(pos.offset(facing.getOpposite())), facing));
+	}
+
+	@Override
+	public void neighborUpdate(BlockState state, World world, BlockPos pos, Block block, BlockPos fromPos, boolean notify){
+		super.neighborUpdate(state, world, pos, block, fromPos, notify);
+		world.getBlockTickScheduler().schedule(pos, block, 1, 1);
+	}
+
+	@Override
+	public void scheduledTick(BlockState state, ServerWorld world, BlockPos pos, Random random){
+		world.setBlockState(pos, state.with(Properties.POWERED, !state.get(INPUT)));
+		LetiNetwork.at(pos.offset(state.get(Properties.FACING))).updateInputs();
 	}
 }
diff --git a/main/java/ella/techia/leti/LetiNetwork.java b/main/java/ella/techia/leti/LetiNetwork.java
index bbd7df6..52abc17 100644
--- a/main/java/ella/techia/leti/LetiNetwork.java
+++ b/main/java/ella/techia/leti/LetiNetwork.java
@@ -4,12 +4,14 @@ import java.util.*;
 import java.util.AbstractSet;
 import java.util.Iterator;
 import java.util.Map.Entry;
+import net.minecraft.block.Block;
 import net.minecraft.state.property.Properties;
 import net.minecraft.util.math.BlockPos;
 import net.minecraft.util.math.Direction;
 import net.minecraft.world.World; // maybe only ServerWorlds should be acceptable, the client doesn't need this (hopefully)
 
 // known issue: unloaded chunks don't get their blocks updated
+// known issue: networks may still get several updates on one tick...
 
 public class LetiNetwork {
 	private static final Map<Entry<World, BlockPos>, LetiNetwork> networks = Maps.newHashMap();
@@ -36,12 +38,13 @@ public class LetiNetwork {
 	public void set(boolean powered){
 		if(this.powered == powered) return; // it would be useless to do anything if the state didn't change
 		for(BlockPos pos : nodes){
-			if(world.isPosLoaded(pos.x, pos.z))
-				world.setBlockState(pos, world.getBlockState(pos).with(Properties.POWERED, powered));
+			if(world.isPosLoaded(pos.x, pos.z)) // unfortunately we provide updates so that blocks that use updates to check input
+				world.setBlockState(pos, world.getBlockState(pos).with(Properties.POWERED, powered)/*, Block.NOTIFY_ALL ^ Block.NOTIFY_LISTENERS*/);
 			// else node.setDirty(true) or something
 		}
 		this.powered = powered;
 	}
+	// FIXME this gets called several times a tick
 	public boolean updateInputs(){
 		for(Entry<BlockPos, Direction> e : inputs){
 			if(output(world.getBlockState(e.getKey()), e.getValue()){
diff --git a/main/java/ella/techia/registry/TechiaRegistry.java b/main/java/ella/techia/registry/TechiaRegistry.java
index 275a33c..8a3b256 100644
--- a/main/java/ella/techia/registry/TechiaRegistry.java
+++ b/main/java/ella/techia/registry/TechiaRegistry.java
@@ -22,6 +22,13 @@ public class TechiaRegistry {
 	/*private static final LinkedHashMap<String, Block> BLOCKS = new LinkedHashMap<>();
 	private static final LinkedHashMap<String, BlockItem> ITEMS = new LinkedHashMap<>();*/
 
+	private static final FabricBlockSettings ASMITE_LETI = FabricBlockSettings.copyOf(Blocks.IRON_BARS)
+		.hardness(0.1f).resistance(0f).breakByHand(true);
+	private static final FabricBlockSettings ASMITE_LETI_BIG = FabricBlockSettings.copyOf(Blocks.IRON_BARS)
+		.hardness(0.2f).resistance(0.2f);
+	private static final FabricBlockSettings TOOL = FabricBlockSettings.copyOf(Blocks.OAK_PLANKS)
+		.hardness(0.5f);
+
 	public static final Block ASMITE_BLOCK = add("asmite_block",
 		new Block(FabricBlockSettings.copyOf(Blocks.IRON_BLOCK)), ItemGroup.BUILDING_BLOCKS);
 	public static final Item ASMITE_INGOT = addI("asmite_ingot", new Item(new Item.Settings().group(ItemGroup.MISC)));
@@ -31,20 +38,19 @@ public class TechiaRegistry {
 			tooltip.add(new TranslatableText("item." + Techia.MOD_ID + ".letium.desc"));
 		}
 	}*/);
-	public static final Block CONNECTOR = add("connector", new Connector(FabricBlockSettings.copyOf(Blocks.IRON_BARS).hardness(0.1f).resistance(0f)), Techia.LETI);
-	//public static final Block INTERSECTOR = add("intersector", new Intersector(FabricBlockSettings.copyOf(Blocks.IRON_BARS).hardness(0.1f).resistance(0f)), Techia.LETI); NOPE
-	public static final Block INVERTER = add("inverter", new Inverter(FabricBlockSettings.copyOf(Blocks.IRON_BARS).hardness(0.1f).resistance(0f)), Techia.LETI);
-	public static final Block DELAYER = add("delayer", new Delayer(FabricBlockSettings.copyOf(Blocks.IRON_BARS).hardness(0.1f).resistance(0f)), Techia.LETI);
-	public static final Block ASMITE_TOGGLE = add("asmite_toggle", new LetiToggle(FabricBlockSettings.copyOf(Blocks.IRON_BARS).hardness(0.2f).resistance(0.2f)), Techia.LETI);
+	public static final Block CONNECTOR = add("connector", new Connector(ASMITE_LETI), Techia.LETI);
+	public static final Block INVERTER = add("inverter", new Inverter(ASMITE_LETI), Techia.LETI);
+	public static final Block DELAYER = add("delayer", new Delayer(ASMITE_LETI), Techia.LETI);
+	public static final Block ASMITE_TOGGLE = add("asmite_toggle", new LetiToggle(ASMITE_LETI_BIG), Techia.LETI);
 
 	public static final Block BOX_BLOCK = add("smelter", new Smelter(FabricBlockSettings.copyOf(Blocks.FURNACE)), ItemGroup.MISC);
 	public static BlockEntityType<SmelterEntity> SMELTER_ENTITY;
 	public static final Item BLOCK_SHAPE = addI("block_shape", new Item(new Item.Settings().group(ItemGroup.MISC)));
 	public static final Item INGOT_SHAPE = addI("ingot_shape", new Item(new Item.Settings().group(ItemGroup.MISC)));
 
-	public static final Block BOX_BLOCK = add("box", new BoxBlock(FabricBlockSettings.copyOf(Blocks.OAK_PLANKS).hardness(0.5f)), ItemGroup.MISC);
+	public static final Block BOX_BLOCK = add("box", new BoxBlock(TOOL), ItemGroup.MISC);
 	public static BlockEntityType<BoxBlockEntity> BOX_BLOCK_ENTITY;
-	public static final Block BOX_BLOCK = add("workbench", new WorkbenchBlock(FabricBlockSettings.copyOf(Blocks.OAK_PLANKS).hardness(0.5f)), ItemGroup.MISC);
+	public static final Block BOX_BLOCK = add("workbench", new WorkbenchBlock(TOOL), ItemGroup.MISC);
 	public static BlockEntityType<WorkbenchBlockEntity> WORKBENCH_BLOCK_ENTITY;
 
 	public static final Block PISTON = add("piston",
@@ -129,11 +135,10 @@ public class TechiaRegistry {
 		//register("intersector", INTERSECTOR); NOPE
 		register("inverter", INVERTER);
 		register("delayer", DELAYER);
-		//register("leti_source", LETI_SOURCE);
-		//register("asmite_button", ASMITE_BUTTON);
+		register("asmite_button", ASMITE_BUTTON);
 		register("asmite_toggle", ASMITE_TOGGLE);
-		//register("asmite_wall_button", ASMITE_WALL_BUTTON);
-		//register("asmite_wall_toggle", ASMITE_WALL_TOGGLE);
+		register("asmite_wall_button", ASMITE_WALL_BUTTON);
+		register("asmite_wall_toggle", ASMITE_WALL_TOGGLE);
 		register("smelter", SMELTER);
 		SMELTER_ENTITY = register("smelter", FabricBlockEntityTypeBuilder.create(SmelterEntity::new, SMELTER).build(null));
 		register("block_shape", BLOCK_SHAPE);
diff --git a/main/resources/assets/techia/blockstates/delayer.json b/main/resources/assets/techia/blockstates/delayer.json
new file mode 100644
index 0000000..598ff37
--- /dev/null
+++ b/main/resources/assets/techia/blockstates/delayer.json
@@ -0,0 +1,74 @@
+{"multipart":[
+{"when":{"delay":1,"facing":"down"},"apply":{"model":"techia:block/delayer_1","x":180}},
+{"when":{"delay":1,"facing":"east"},"apply":{"model":"techia:block/delayer_1","x":90,"y":90}},
+{"when":{"delay":1,"facing":"north"},"apply":{"model":"techia:block/delayer_1","x":90}},
+{"when":{"delay":1,"facing":"south"},"apply":{"model":"techia:block/delayer_1","x":90,"y":180}},
+{"when":{"delay":1,"facing":"up"},"apply":{"model":"techia:block/delayer_1"}},
+{"when":{"delay":1,"facing":"west"},"apply":{"model":"techia:block/delayer_1","x":190,"y":270}},
+{"when":{"delay":2,"facing":"down"},"apply":{"model":"techia:block/delayer_2","x":180}},
+{"when":{"delay":2,"facing":"east"},"apply":{"model":"techia:block/delayer_2","x":90,"y":90}},
+{"when":{"delay":2,"facing":"north"},"apply":{"model":"techia:block/delayer_2","x":90}},
+{"when":{"delay":2,"facing":"south"},"apply":{"model":"techia:block/delayer_2","x":90,"y":180}},
+{"when":{"delay":2,"facing":"up"},"apply":{"model":"techia:block/delayer_2"}},
+{"when":{"delay":2,"facing":"west"},"apply":{"model":"techia:block/delayer_2","x":190,"y":270}},
+{"when":{"delay":3,"facing":"down"},"apply":{"model":"techia:block/delayer_3","x":180}},
+{"when":{"delay":3,"facing":"east"},"apply":{"model":"techia:block/delayer_3","x":90,"y":90}},
+{"when":{"delay":3,"facing":"north"},"apply":{"model":"techia:block/delayer_3","x":90}},
+{"when":{"delay":3,"facing":"south"},"apply":{"model":"techia:block/delayer_3","x":90,"y":180}},
+{"when":{"delay":3,"facing":"up"},"apply":{"model":"techia:block/delayer_3"}},
+{"when":{"delay":3,"facing":"west"},"apply":{"model":"techia:block/delayer_3","x":190,"y":270}},
+{"when":{"delay":4,"facing":"down"},"apply":{"model":"techia:block/delayer_4","x":180}},
+{"when":{"delay":4,"facing":"east"},"apply":{"model":"techia:block/delayer_4","x":90,"y":90}},
+{"when":{"delay":4,"facing":"north"},"apply":{"model":"techia:block/delayer_4","x":90}},
+{"when":{"delay":4,"facing":"south"},"apply":{"model":"techia:block/delayer_4","x":90,"y":180}},
+{"when":{"delay":4,"facing":"up"},"apply":{"model":"techia:block/delayer_4"}},
+{"when":{"delay":4,"facing":"west"},"apply":{"model":"techia:block/delayer_4","x":190,"y":270}},
+{"when":{"delay":5,"facing":"down"},"apply":{"model":"techia:block/delayer_5","x":180}},
+{"when":{"delay":5,"facing":"east"},"apply":{"model":"techia:block/delayer_5","x":90,"y":90}},
+{"when":{"delay":5,"facing":"north"},"apply":{"model":"techia:block/delayer_5","x":90}},
+{"when":{"delay":5,"facing":"south"},"apply":{"model":"techia:block/delayer_5","x":90,"y":180}},
+{"when":{"delay":5,"facing":"up"},"apply":{"model":"techia:block/delayer_5"}},
+{"when":{"delay":5,"facing":"west"},"apply":{"model":"techia:block/delayer_5","x":190,"y":270}},
+{"when":{"delay":6,"facing":"down"},"apply":{"model":"techia:block/delayer_6","x":180}},
+{"when":{"delay":6,"facing":"east"},"apply":{"model":"techia:block/delayer_6","x":90,"y":90}},
+{"when":{"delay":6,"facing":"north"},"apply":{"model":"techia:block/delayer_6","x":90}},
+{"when":{"delay":6,"facing":"south"},"apply":{"model":"techia:block/delayer_6","x":90,"y":180}},
+{"when":{"delay":6,"facing":"up"},"apply":{"model":"techia:block/delayer_6"}},
+{"when":{"delay":6,"facing":"west"},"apply":{"model":"techia:block/delayer_6","x":190,"y":270}},
+{"when":{"delay":7,"facing":"down"},"apply":{"model":"techia:block/delayer_7","x":180}},
+{"when":{"delay":7,"facing":"east"},"apply":{"model":"techia:block/delayer_7","x":90,"y":90}},
+{"when":{"delay":7,"facing":"north"},"apply":{"model":"techia:block/delayer_7","x":90}},
+{"when":{"delay":7,"facing":"south"},"apply":{"model":"techia:block/delayer_7","x":90,"y":180}},
+{"when":{"delay":7,"facing":"up"},"apply":{"model":"techia:block/delayer_7"}},
+{"when":{"delay":7,"facing":"west"},"apply":{"model":"techia:block/delayer_7","x":190,"y":270}},
+{"when":{"delay":8,"facing":"down"},"apply":{"model":"techia:block/delayer_8","x":180}},
+{"when":{"delay":8,"facing":"east"},"apply":{"model":"techia:block/delayer_8","x":90,"y":90}},
+{"when":{"delay":8,"facing":"north"},"apply":{"model":"techia:block/delayer_8","x":90}},
+{"when":{"delay":8,"facing":"south"},"apply":{"model":"techia:block/delayer_8","x":90,"y":180}},
+{"when":{"delay":8,"facing":"up"},"apply":{"model":"techia:block/delayer_8"}},
+{"when":{"delay":8,"facing":"west"},"apply":{"model":"techia:block/delayer_8","x":190,"y":270}},
+{"when":{"delay":9,"facing":"down"},"apply":{"model":"techia:block/delayer_9","x":180}},
+{"when":{"delay":9,"facing":"east"},"apply":{"model":"techia:block/delayer_9","x":90,"y":90}},
+{"when":{"delay":9,"facing":"north"},"apply":{"model":"techia:block/delayer_9","x":90}},
+{"when":{"delay":9,"facing":"south"},"apply":{"model":"techia:block/delayer_9","x":90,"y":180}},
+{"when":{"delay":9,"facing":"up"},"apply":{"model":"techia:block/delayer_9"}},
+{"when":{"delay":9,"facing":"west"},"apply":{"model":"techia:block/delayer_9","x":190,"y":270}},
+{"when":{"delay":10,"facing":"down"},"apply":{"model":"techia:block/delayer_10","x":180}},
+{"when":{"delay":10,"facing":"east"},"apply":{"model":"techia:block/delayer_10","x":90,"y":90}},
+{"when":{"delay":10,"facing":"north"},"apply":{"model":"techia:block/delayer_10","x":90}},
+{"when":{"delay":10,"facing":"south"},"apply":{"model":"techia:block/delayer_10","x":90,"y":180}},
+{"when":{"delay":10,"facing":"up"},"apply":{"model":"techia:block/delayer_10"}},
+{"when":{"delay":10,"facing":"west"},"apply":{"model":"techia:block/delayer_10","x":190,"y":270}},
+{"when":{"OR":[{"facing":"down","input":"false"},{"facing":"up","powered":"false"}]},"apply":{"model":"techia:block/connector_side"}},
+{"when":{"OR":[{"facing":"down","input":"true"},{"facing":"up","powered":"true"}]},"apply":{"model":"techia:block/connector_side_on"}},
+{"when":{"OR":[{"facing":"east","input":"false"},{"facing":"west","powered":"false"}]},"apply":{"model":"techia:block/connector_side","x":90,"y":270}},
+{"when":{"OR":[{"facing":"east","input":"true"},{"facing":"west","powered":"true"}]},"apply":{"model":"techia:block/connector_side_on","x":90,"y":270}},
+{"when":{"OR":[{"facing":"north","input":"false"},{"facing":"south","powered":"false"}]},"apply":{"model":"techia:block/connector_side","x":90,"y":180}},
+{"when":{"OR":[{"facing":"north","input":"true"},{"facing":"south","powered":"true"}]},"apply":{"model":"techia:block/connector_side_on","x":90,"y":180}},
+{"when":{"OR":[{"facing":"south","input":"false"},{"facing":"north","powered":"false"}]},"apply":{"model":"techia:block/connector_side","x":90}},
+{"when":{"OR":[{"facing":"south","input":"true"},{"facing":"north","powered":"true"}]},"apply":{"model":"techia:block/connector_side_on","x":90}},
+{"when":{"OR":[{"facing":"up","input":"false"},{"facing":"down","powered":"false"}]},"apply":{"model":"techia:block/connector_side","x":180}},
+{"when":{"OR":[{"facing":"up","input":"true"},{"facing":"down","powered":"true"}]},"apply":{"model":"techia:block/connector_side_on","x":180}},
+{"when":{"OR":[{"facing":"west","input":"false"},{"facing":"east","powered":"false"}]},"apply":{"model":"techia:block/connector_side","x":90,"y":90}},
+{"when":{"OR":[{"facing":"west","input":"true"},{"facing":"east","powered":"true"}]},"apply":{"model":"techia:block/connector_side_on","x":90,"y":90}}
+]}
\ No newline at end of file
diff --git a/main/resources/assets/techia/blockstates/inverter.json b/main/resources/assets/techia/blockstates/inverter.json
new file mode 100644
index 0000000..054eb9f
--- /dev/null
+++ b/main/resources/assets/techia/blockstates/inverter.json
@@ -0,0 +1,20 @@
+{"multipart":[
+{"when":{"facing":"down"},"apply":{"model":"techia:block/inverter","x":180}},
+{"when":{"facing":"east"},"apply":{"model":"techia:block/inverter","x":90,"y":90}},
+{"when":{"facing":"north"},"apply":{"model":"techia:block/inverter","x":90}},
+{"when":{"facing":"south"},"apply":{"model":"techia:block/inverter","x":90,"y":180}},
+{"when":{"facing":"up"},"apply":{"model":"techia:block/inverter"}},
+{"when":{"facing":"west"},"apply":{"model":"techia:block/inverter","x":190,"y":270}},
+{"when":{"OR":[{"facing":"down","input":"false"},{"facing":"up","powered":"false"}]},"apply":{"model":"techia:block/connector_side"}},
+{"when":{"OR":[{"facing":"down","input":"true"},{"facing":"up","powered":"true"}]},"apply":{"model":"techia:block/connector_side_on"}},
+{"when":{"OR":[{"facing":"east","input":"false"},{"facing":"west","powered":"false"}]},"apply":{"model":"techia:block/connector_side","x":90,"y":270}},
+{"when":{"OR":[{"facing":"east","input":"true"},{"facing":"west","powered":"true"}]},"apply":{"model":"techia:block/connector_side_on","x":90,"y":270}},
+{"when":{"OR":[{"facing":"north","input":"false"},{"facing":"south","powered":"false"}]},"apply":{"model":"techia:block/connector_side","x":90,"y":180}},
+{"when":{"OR":[{"facing":"north","input":"true"},{"facing":"south","powered":"true"}]},"apply":{"model":"techia:block/connector_side_on","x":90,"y":180}},
+{"when":{"OR":[{"facing":"south","input":"false"},{"facing":"north","powered":"false"}]},"apply":{"model":"techia:block/connector_side","x":90}},
+{"when":{"OR":[{"facing":"south","input":"true"},{"facing":"north","powered":"true"}]},"apply":{"model":"techia:block/connector_side_on","x":90}},
+{"when":{"OR":[{"facing":"up","input":"false"},{"facing":"down","powered":"false"}]},"apply":{"model":"techia:block/connector_side","x":180}},
+{"when":{"OR":[{"facing":"up","input":"true"},{"facing":"down","powered":"true"}]},"apply":{"model":"techia:block/connector_side_on","x":180}},
+{"when":{"OR":[{"facing":"west","input":"false"},{"facing":"east","powered":"false"}]},"apply":{"model":"techia:block/connector_side","x":90,"y":90}},
+{"when":{"OR":[{"facing":"west","input":"true"},{"facing":"east","powered":"true"}]},"apply":{"model":"techia:block/connector_side_on","x":90,"y":90}}
+]}
\ No newline at end of file
diff --git a/main/resources/assets/techia/models/block/connector_side.json b/main/resources/assets/techia/models/block/connector_side.json
index 14a9828..88324d7 100644
--- a/main/resources/assets/techia/models/block/connector_side.json
+++ b/main/resources/assets/techia/models/block/connector_side.json
@@ -1 +1 @@
-{"ambientocclusion":false,"textures":{"particle":"techia:block/connector"},"elements":[{"from":[12,6,6],"to":[16,10,10],"faces":{"north":{"texture":"#particle"},"south":{"texture":"#particle"},"up":{"texture":"#particle"},"down":{"texture":"#particle"}}}]}
+{"ambientocclusion":false,"textures":{"particle":"techia:block/connector"},"elements":[{"from":[6,11,6],"to":[10,16,10],"faces":{"north":{"texture":"#particle"},"east":{"texture":"#particle"},"south":{"texture":"#particle"},"west":{"texture":"#particle"}}}]}
\ No newline at end of file
diff --git a/main/resources/assets/techia/models/block/delayer_1.json b/main/resources/assets/techia/models/block/delayer_1.json
new file mode 100644
index 0000000..cfb6b45
--- /dev/null
+++ b/main/resources/assets/techia/models/block/delayer_1.json
@@ -0,0 +1 @@
+{"parent":"techia:block/connector_base","textures":{"particle":"techia:block/delay_1"}}
\ No newline at end of file
diff --git a/main/resources/assets/techia/models/block/delayer_10.json b/main/resources/assets/techia/models/block/delayer_10.json
new file mode 100644
index 0000000..0c542d1
--- /dev/null
+++ b/main/resources/assets/techia/models/block/delayer_10.json
@@ -0,0 +1 @@
+{"parent":"techia:block/connector_base","textures":{"particle":"techia:block/delay_10"}}
\ No newline at end of file
diff --git a/main/resources/assets/techia/models/block/delayer_2.json b/main/resources/assets/techia/models/block/delayer_2.json
new file mode 100644
index 0000000..012113f
--- /dev/null
+++ b/main/resources/assets/techia/models/block/delayer_2.json
@@ -0,0 +1 @@
+{"parent":"techia:block/connector_base","textures":{"particle":"techia:block/delay_2"}}
\ No newline at end of file
diff --git a/main/resources/assets/techia/models/block/delayer_3.json b/main/resources/assets/techia/models/block/delayer_3.json
new file mode 100644
index 0000000..4cbd3dc
--- /dev/null
+++ b/main/resources/assets/techia/models/block/delayer_3.json
@@ -0,0 +1 @@
+{"parent":"techia:block/connector_base","textures":{"particle":"techia:block/delay_3"}}
\ No newline at end of file
diff --git a/main/resources/assets/techia/models/block/delayer_4.json b/main/resources/assets/techia/models/block/delayer_4.json
new file mode 100644
index 0000000..0aea9b2
--- /dev/null
+++ b/main/resources/assets/techia/models/block/delayer_4.json
@@ -0,0 +1 @@
+{"parent":"techia:block/connector_base","textures":{"particle":"techia:block/delay_4"}}
\ No newline at end of file
diff --git a/main/resources/assets/techia/models/block/delayer_5.json b/main/resources/assets/techia/models/block/delayer_5.json
new file mode 100644
index 0000000..a18e331
--- /dev/null
+++ b/main/resources/assets/techia/models/block/delayer_5.json
@@ -0,0 +1 @@
+{"parent":"techia:block/connector_base","textures":{"particle":"techia:block/delay_5"}}
\ No newline at end of file
diff --git a/main/resources/assets/techia/models/block/delayer_6.json b/main/resources/assets/techia/models/block/delayer_6.json
new file mode 100644
index 0000000..d372868
--- /dev/null
+++ b/main/resources/assets/techia/models/block/delayer_6.json
@@ -0,0 +1 @@
+{"parent":"techia:block/connector_base","textures":{"particle":"techia:block/delay_6"}}
\ No newline at end of file
diff --git a/main/resources/assets/techia/models/block/delayer_7.json b/main/resources/assets/techia/models/block/delayer_7.json
new file mode 100644
index 0000000..ade2b73
--- /dev/null
+++ b/main/resources/assets/techia/models/block/delayer_7.json
@@ -0,0 +1 @@
+{"parent":"techia:block/connector_base","textures":{"particle":"techia:block/delay_7"}}
\ No newline at end of file
diff --git a/main/resources/assets/techia/models/block/delayer_8.json b/main/resources/assets/techia/models/block/delayer_8.json
new file mode 100644
index 0000000..d0da850
--- /dev/null
+++ b/main/resources/assets/techia/models/block/delayer_8.json
@@ -0,0 +1 @@
+{"parent":"techia:block/connector_base","textures":{"particle":"techia:block/delay_8"}}
\ No newline at end of file
diff --git a/main/resources/assets/techia/models/block/delayer_9.json b/main/resources/assets/techia/models/block/delayer_9.json
new file mode 100644
index 0000000..681b215
--- /dev/null
+++ b/main/resources/assets/techia/models/block/delayer_9.json
@@ -0,0 +1 @@
+{"parent":"techia:block/connector_base","textures":{"particle":"techia:block/delay_9"}}
\ No newline at end of file
diff --git a/main/resources/assets/techia/models/block/inverter.json b/main/resources/assets/techia/models/block/inverter.json
new file mode 100644
index 0000000..087cf1b
--- /dev/null
+++ b/main/resources/assets/techia/models/block/inverter.json
@@ -0,0 +1 @@
+{"parent":"techia:block/connector_base","textures":{"particle":"techia:block/invert"}}
\ No newline at end of file
diff --git a/main/resources/assets/techia/textures/block/asmite_button_off.png b/main/resources/assets/techia/textures/block/asmite_button_off.png
new file mode 100644
index 0000000000000000000000000000000000000000..46d3fe559a94641791513d81c758b5c74ee2b6e6
GIT binary patch
literal 211
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`vpiiKLn`JZCoT}!z@x{Uc5cp3
z`D6b+K4zcs?7;(vhs_Rkb#}^O%nn^4At4`b{djUx_>P_f`{(&x%`aVEPPe%Fz=UDR
z&vOT-3T&&jxFe9V9>|Y0=4iNK;GB@ybd{mRGl{`Xp^4#y+Js(%@D&P`jO!UsFr;zx
z^yYDfF<;o*p#P<C7lYXO7o424-%7A8S-#vjX@$a7))I3Dh8OLQtIof)`3Q6+gQu&X
J%Q~loCIBrFQfUAH

literal 0
HcmV?d00001

diff --git a/main/resources/assets/techia/textures/block/asmite_button_on.png b/main/resources/assets/techia/textures/block/asmite_button_on.png
new file mode 100644
index 0000000000000000000000000000000000000000..7a9a2da6fe7e5ea64bf1b94e4f191c167fb2f5a8
GIT binary patch
literal 211
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`vpiiKLn`JZCoT}!z@x{Uc5cp3
z`D6b+K4zcs?7;(vhs_Rkb#}^O%nn^4At4`b{djUx_>P_f`{(&x%`aVEPPe%Fz=UB*
zq{~r;L;H#u^Eftz7f3a%kz{emnW4DB;9wTRE)_!tWdTQq6yXzYGqmq1R5Gq-Ji(C0
z(bJp98OD5JZ-f4q!d(nv=U;Gg&VDPwwq*Ho<D?Y|S6NHU85ruWIb?*)D{ce2lEKr}
K&t;ucLK6TRM^0}5

literal 0
HcmV?d00001

diff --git a/main/resources/assets/techia/textures/block/asmite_panel.png b/main/resources/assets/techia/textures/block/asmite_panel.png
new file mode 100644
index 0000000000000000000000000000000000000000..b3abd8d1aac28271006e952bbe2c27b749ffe43c
GIT binary patch
literal 209
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Gdx`!Ln`JZCoT}!z@x{Uc5cp3
z`D6b+K4zcs?7;(vhs_Rkb#}^O%nn^4At4`b{djUx_>Nvf<Gp)vZI2!$H6>Z_HfV~7
zi?d(WkKfnQtys;voY8>cQU_l`V$)TI63-+CHw7i;6n%kI2A%^<Jdw&iJoyp__B7~j
z+1Qy_%BVB%qOi~=2|wmbmoG~ih6pfRInVuL4xg}dnI^-%4$r48--;ds-N@kS>gTe~
HDWM4flod<Y

literal 0
HcmV?d00001

diff --git a/main/resources/assets/techia/textures/block/asmite_toggle_off.png b/main/resources/assets/techia/textures/block/asmite_toggle_off.png
new file mode 100644
index 0000000000000000000000000000000000000000..fab502af1b4067ad215b15dbe09d2288e792af8f
GIT binary patch
literal 189
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EuJopAr*6y6Bh_<;L&4FJ2&U2
z{IP!@AG6PR_TYiT!)AxNIy>bsW{0kjkdP0zemprTd`GXL@u&aMjahzE>N*wMjCtP4
z#B?4C-^ky-dy)oo0b|6B1XG6CNfHf$9U_tqJPCDf>=lO@p0VaE^xeXp@Uds!gbg?Q
m5*@0ltd!fhf?^%YnHgqW(AHv&x$X&c4}+(xpUXO@geCxsbwz&w

literal 0
HcmV?d00001

diff --git a/main/resources/assets/techia/textures/block/asmite_toggle_on.png b/main/resources/assets/techia/textures/block/asmite_toggle_on.png
new file mode 100644
index 0000000000000000000000000000000000000000..3e4d6107e239bd3d4865a16db3ea68c292735996
GIT binary patch
literal 189
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EuJopAr*6y6Bh_<;L&4FJ2&U2
z{IP!@AG6PR_TYiT!)AxNIy>bsW{0kjkdP0zemprTd`GXL@u&aMjahzE>N*wMjCou_
zcmjUpzl&+uJxPPPfH7i5f+<7nB#8#W4iU))o`gC#_KL#{&scL7`flM)_}DXV!iJlD
mi4Ij&R?2N$L9q_y%nZsRx*Tscvu6X{!{F)a=d#Wzp$PzLT11}!

literal 0
HcmV?d00001

diff --git a/main/resources/assets/techia/textures/block/connector.png b/main/resources/assets/techia/textures/block/connector.png
index d18ef4e07dc06befe36031db41670c0d6aef8059..87c4b66feab126e2bcd2da80fc9c7bda93d96eb8 100644
GIT binary patch
delta 143
zcmZ3-IG=HXL_G^L0|Ud`yN`l^lxToYh%1oZx^=5Tbm_8X%Vy4;IdS5|kXdIAUk-Q;
zlwdCj@(X784+cx?m;D9`8F{)mhE&W+PDn@)2uf*Su;Eco<v1(!>JdYth9+x+<eDtc
p0ydYfP*2WP$4sv@HkvRnoGxcwaf@$J6;L+=ho`Hb%Q~loCIE`WHTM7j

delta 158
zcmV;P0Ac^10j>d%7=H)`0000V^Z#K0004DKL_t(|oMU025U`9IfZc$ZGiUz)@#6=a
z&%wa~rqk2Y8Hskm{8LX*_=#pR49k`+`_IqMPuKvM?JD-+VEWF%m0-GS>v`h5fDORB
zL6QM5n_-~L+mL}MFMw>zv{M1IkpnX-DvG#3#1`7Pz#vUXbQd)M00LSb;w#n({Qv*}
M07*qoM6N<$g2)+1vH$=8

diff --git a/main/resources/assets/techia/textures/block/connector_on.png b/main/resources/assets/techia/textures/block/connector_on.png
index bdcc76080fad695432dd95963d90e73ce0fdd535..cbe2ec674430c4388dda2e34dcf3f6390a837eca 100644
GIT binary patch
delta 143
zcmdnMIG=HXL_G^L0|Ud`yN`l^lxToYh%1oZx^-*DzCX*BEt@%W=ER8;LuQ@PGmK;h
zO0bs%`2{ol2ZN>c%YFlej67W&Ln`JZCnO{Y1f?`E*zhQ)a-0=<^@t%+LzA^Za!r<J
p0h>!#s3+&DW2RRc8%-D(PM5Q;xW%`q3aFcb!_(EzWt~$(697WXH3<L!

delta 160
zcmV;R0AK%~0k8p(7=H)`0000V^Z#K0004JML_t(|oMU025U`9IfZc$ZGiUz)@#6=a
z&%wa~rqk2Y8Hskmb=_<fzUJkr49k`+`_IqMPuKvM?QiZ}0MjBW24MP-L>O^izy@I6
zAjtrj%`jm1Vif~XUI5u<czZ6G4G&D9SX5LLae;^}v~ht!ni-JjY5)MqQyub(=5J^K
O0000<MNUMnLSTYqCPjb%

diff --git a/main/resources/assets/techia/textures/block/delay_1.png b/main/resources/assets/techia/textures/block/delay_1.png
index 6bb573fc570d8d51878693dc755c60b6c8b1f692..1d6ec22491e8147836360523a070559f5244cc39 100644
GIT binary patch
delta 123
zcmbQw*uywMqJ)K+fq~)e-A6${ia)?7#1%--oH=vi#EDzCZgp~UI{w1>J5Y$VB*-tA
z;Xe?_Tu=k4Rrhpp45^rtoS?vKpvB4MAaU#%R|1>xoWw^w6O)R}8dnJh2`OBxVc1{6
VwAxuJSP7_w!PC{xWt~$(696EoDF*-m

delta 143
zcmV;A0C4||0iOYo7=H)`0000V^Z#K0003r5L_t(|oMU025U`9IfZc$ZGiUz)@#6=a
z&%wa~rqk2Y8Hskm#*G^pii?Zk{5yB<5bpwz?I6v)y}c-g5N!Z90P_aX1`uOAP6I%;
xg@=bTJbChj0T!4fxd2;eljH(Yz%VcX0J~-%nO3=1?EnA(00>D%PDHLkV1fiBI>rD1

diff --git a/main/resources/assets/techia/textures/block/delay_10.png b/main/resources/assets/techia/textures/block/delay_10.png
new file mode 100644
index 0000000000000000000000000000000000000000..803077dc9b13e6a15fb5aab6658682703e6f159b
GIT binary patch
literal 137
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?b1=2HT&YU=LqLY);)~#Eg
zmF}Gi6k;t2@(X784+Jt7)Ie%gJY5_^D&{07DDWC+adJ6G96QF9z&5$lc#dMjsRWTA
dA%%-I3`feC_IR9`b{VLi!PC{xWt~$(6964`Dlh;5

literal 0
HcmV?d00001

diff --git a/main/resources/assets/techia/textures/block/delay_2.png b/main/resources/assets/techia/textures/block/delay_2.png
index 8642114cf9c4dad4730279e467d82f013c87965c..4c8025a49b14036485ec03401477d5b8982a228a 100644
GIT binary patch
delta 122
zcmbQw*v&XWqL_u5fq~)e-A6${ia)?7#1%--oH=vi#EDzCZgp~UI{w1>J5Y$VB*-tA
z;Xe?_Tu=k4Rr7Rl45^rtoS?vKpvB4MAaU#%R|4DQPU9&LbCeoRC5QwGDO{{!I5LH4
UkJ@4J^*|jAp00i_>zopr02v4>P5=M^

delta 143
zcmV;A0C4|{0iOYo7=H)`0000V^Z#K0003r5L_t(|oMU025U`9IfZc$ZGiUz)@#6=a
z&%wa~rqk2Y8Hskm#*G`nba8Ppn7(u84)HDk*$&g#+uI9g6Kw!C0P_aX27qh^0erUO
xGyr5<cz8IN4f8umF2EMrB)NbTFboU;0By1yndI;JCIA2c00>D%PDHLkV1neoI&lC1

diff --git a/main/resources/assets/techia/textures/block/delay_3.png b/main/resources/assets/techia/textures/block/delay_3.png
index 3d6b90fc24b114526e9d64e8109857dccac6ed1f..eee56d682abfe4b73ebcf72ec7409f0398fdc129 100644
GIT binary patch
delta 120
zcmZ3%*vU9SqL77|fq~)e-A6${ia)?7#1%--oH=vi#EDzCZgp~UI{w1>J5Y$VB*-tA
z;Xe?_Tu=k4Rq=Fj45^rtoS?vKpvB4MAfa}SD}inDX3jZ^4W|-Bf`k+<)-as%WI7u^
S>8UJGJ%gvKpUXO@geCx;5-5WJ

delta 152
zcmV;J0B8S+0jL3x7=H)`0000V^Z#K0003`EL_t(|oMU025U`9IfZc$ZGiUz)@#6=a
z&%wa~rqk2Y8Hskm#*G`{?Be2LhC6re5bpwz?I2As(A(R~;P3BGyaCt%%o{`-0J0SZ
zK(2Z6<O%TxfNTp74+pbB-U0caBo|-{ZCqfGCM3EV006=ZArZk^?LI#M0000<MNUMn
GLSTX@@<4Y0

diff --git a/main/resources/assets/techia/textures/block/delay_4.png b/main/resources/assets/techia/textures/block/delay_4.png
index e2d07acf17a018f71c04d17b0d88696edf9a2d56..8a7b2cab5d713b72d996a3958fc538f60356c257 100644
GIT binary patch
delta 123
zcmbQk*uywMqJ)K+fq~)e-A6${ia)?7#1%--oH=vi#EDzCZgp~UI{w1>J5Y$VB*-tA
z;Xe?_Tu=k4Rrhpp45^rtoS?vKpvB4MAaU#%R|1>xoWw^w6O)Px8&?Si2`OBxVK^Mj
VwCAIb?MI*%22WQ%mvv4FO#nObD#!o;

delta 140
zcmV;70CWG00h|Gl7=H)`0000V^Z#K0003i2L_t(|oMU025U`9IfZc$ZGiUz)@#6=a
z&%wa~rqk2Y8Hskm#*G^pii?Zk{5yB<5bpw*?Y+IdD25Pi05$;g21y1GvK^-ZAlt&j
u!x^4Dc>?ziNiM(^+9bJv6fg`7000E(9GUbO5;6b)002ovP6b4+LSTY7V>lB4

diff --git a/main/resources/assets/techia/textures/block/delay_5.png b/main/resources/assets/techia/textures/block/delay_5.png
index 01b1b89c07d116fd8a269d5140a22cf2932b89f5..2b80e326200d3c23d61333bac223b2286e91aef7 100644
GIT binary patch
delta 125
zcmZ3;*vB|QqKt)^fq~)e-A6${ia)?7#1%--oH=vi#EDzCZgp~UI{w1>J5Y$VB*-tA
z;Xe?_Tu=k4)%0|645^rtoS?vKpvB4MAaU#%R|4DQPU9&LA2Cf#Dl%(aB^V^6aIuEr
XBnQ*ka}5p3Kurvuu6{1-oD!M<sdp=s

delta 145
zcmV;C0B-+|0igkq7=H)`0000V^Z#K0003x7L_t(|oMU025U`9IfZc$ZGiUz)@#6=a
z&%wa~rqk2Y8Hskm#*G`nba8Ppn7(u84)HDk*$&d!+uIAqFhhto02_dLgJ=UlHiG~@
z+i@BIvMoG39L$FKog^1v3vH5IKnfTJ1^@s8`yN2Tz}tKP015yANkvXXu0mjfH%~c)

diff --git a/main/resources/assets/techia/textures/block/delay_6.png b/main/resources/assets/techia/textures/block/delay_6.png
index 28a45506a5e740027f89502763cf1a88ed3776f0..ac24b213aa784624a3bef2109dcd234c18e1e689 100644
GIT binary patch
delta 122
zcmZ3%*v&XWqL_u5fq~)e-A6${ia)?7#1%--oH=vi#EDzCZgp~UI{w1>J5Y$VB*-tA
z;Xe?_Tu=k4Rr7Rl45^rtoS?vKpvB4MAfa}SD}iltH}{l>IZ6$u5=4T86fV{<oDXBV
U$81}15U7K})78&qol`;+0Qt=+QUCw|

delta 152
zcmV;J0B8S;0jL3x7=H)`0000V^Z#K0003`EL_t(|oMU025U`9IfZc$ZGiUz)@#6=a
z&%wa~rqk2Y8Hskm#*G`{?Be2LhC6re5bpwz?I2Ac(A(P!#{T~P#2bJOz`Q}U0U%pp
z0OXn{Po5BO0LZrR@Nh62<Q<UzNpb<U(8dJ@X+ol_0RT|ABN1rmdJlL20000<MNUMn
GLSTZfcSHOD

diff --git a/main/resources/assets/techia/textures/block/delay_7.png b/main/resources/assets/techia/textures/block/delay_7.png
new file mode 100644
index 0000000000000000000000000000000000000000..3fbf00d1752149f2b9d452cd1f6b2f1159fddee0
GIT binary patch
literal 138
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?b1=2HT&YU=L;?}KOot&JG
zzi|Ez6k;t2@(X784+Jt7)Ie%gJzX3_D&{07DDWC+adJ6G96QF9z$PrjtaS9rBc@R0
eB`OY!elqO4&$N0?ZQePc1_n=8KbLh*2~7Z5bSnM;

literal 0
HcmV?d00001

diff --git a/main/resources/assets/techia/textures/block/delay_8.png b/main/resources/assets/techia/textures/block/delay_8.png
new file mode 100644
index 0000000000000000000000000000000000000000..16b3f4453f86d2cd61ccee6fc79dce4d670403b7
GIT binary patch
literal 140
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?b1=2HT&YU=L;?}KOot&JG
zzi|Ez6k;t2@(X784+Jt7)Ie(0JzX3_D&{07DDWC+adJ6G96QF9z$QHB;UlJrNkwLj
gs|16D6fV{<9RAI;r=Z_%FHj4Er>mdKI;Vst0LJ$#@c;k-

literal 0
HcmV?d00001

diff --git a/main/resources/assets/techia/textures/block/delay_9.png b/main/resources/assets/techia/textures/block/delay_9.png
new file mode 100644
index 0000000000000000000000000000000000000000..170f56e0d661b2e5377d3a3875b1eeb724f73b98
GIT binary patch
literal 139
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!73?$#)eFPHV5AX?b1=2HT&YU=L;?}KOot&JG
zzi|Ez6k;t2@(X784+Jt7)Ie(0JY5_^D&{07DDWC+adJ6G96QF9z&5#?d&<KcrG`@p
fB0)k57i$<!ZeTiV<>vMosDr`N)z4*}Q$iB}k+3To

literal 0
HcmV?d00001

diff --git a/main/resources/assets/techia/textures/block/invert.png b/main/resources/assets/techia/textures/block/invert.png
index 2b270e7a7463c6182376b154ba5fb6cb54967818..a284175c8068effe57766cc72eeec1df206e2459 100644
GIT binary patch
delta 122
zcmZ3%*v&XWqL_u5fq~)e-A6${ia)?7#1%--oH=vi#EDK$PFuHbeO9`6Do}{EB*-tA
z;Xe?_Tu=k4Rr7Rl45^rtoS?vKpvB4MAfa}SD}inDX3i;zk8~PNC5QwGDO{{!IHk>W
U_R7MGjX)g?p00i_>zopr0QZ+FNdN!<

delta 152
zcmV;J0B8S;0jL3x7=H)`0000V^Z#K0003`EL_t(|oMU025U`9IfZc$ZGiUz)@#6=a
z&%wa~rqk2Y8Hskm#*G`nba8PpLvL>{gTKE&@h$+_4$=q$Ak855ojZ4kHvk)ed4p&J
zKsJK_%nRY+;lvvNvJIvI<aAvA$7ukz&?d<MQot}U003w=A`z}~P4avI0000<MNUMn
GLSTXmE<SYt

diff --git a/main/resources/data/techia/recipes/intersector.json b/main/resources/data/techia/intersector.json
similarity index 100%
rename from main/resources/data/techia/recipes/intersector.json
rename to main/resources/data/techia/intersector.json
diff --git a/main/resources/data/techia/recipes/asmite_button.json b/main/resources/data/techia/recipes/asmite_button.json
new file mode 100644
index 0000000..1cda498
--- /dev/null
+++ b/main/resources/data/techia/recipes/asmite_button.json
@@ -0,0 +1,7 @@
+{"type": "techia:workbench",
+"items": {
+	"techia:letium": 1,
+	"techia:asmite_ingot": 2
+},
+"result": "techia:asmite_button",
+"count": 2}
\ No newline at end of file
diff --git a/main/resources/data/techia/recipes/asmite_toggle.json b/main/resources/data/techia/recipes/asmite_toggle.json
new file mode 100644
index 0000000..e80cd71
--- /dev/null
+++ b/main/resources/data/techia/recipes/asmite_toggle.json
@@ -0,0 +1,7 @@
+{"type": "techia:workbench",
+"items": {
+	"techia:letium": 1,
+	"techia:asmite_ingot": 2
+},
+"result": "techia:asmite_toggle",
+"count": 2}
\ No newline at end of file
diff --git a/main/resources/data/techia/recipes/asmite_wall_button.json b/main/resources/data/techia/recipes/asmite_wall_button.json
new file mode 100644
index 0000000..4b84fed
--- /dev/null
+++ b/main/resources/data/techia/recipes/asmite_wall_button.json
@@ -0,0 +1,7 @@
+{"type": "techia:workbench",
+"items": {
+	"techia:letium": 1,
+	"techia:asmite_ingot": 1
+},
+"result": "techia:asmite_wall_button",
+"count": 2}
\ No newline at end of file
diff --git a/main/resources/data/techia/recipes/asmite_wall_toggle.json b/main/resources/data/techia/recipes/asmite_wall_toggle.json
new file mode 100644
index 0000000..606c772
--- /dev/null
+++ b/main/resources/data/techia/recipes/asmite_wall_toggle.json
@@ -0,0 +1,7 @@
+{"type": "techia:workbench",
+"items": {
+	"techia:letium": 1,
+	"techia:asmite_ingot": 1
+},
+"result": "techia:asmite_wall_toggle",
+"count": 2}
\ No newline at end of file