Я хочу, чтобы вы переделали мой генератор карт, потому, что я сам не справляюсь: «import random
import json
def generate_random_voxel_layer(z, chamber_size):
    layer = {}
    for y in range(chamber_size[1], -1, -1):
        row = ['1' if random.random() > 0.8 else '0' for _ in range(chamber_size[0])] #Обеспечиваем проходимость
        row[0] = row[-1] = '1'
        row[chamber_size[0]//2] = '0'
        layer[f"Y{y}"] = f"f{''.join(row)}"
    return layer
def count_empty_neighbors(x, y, z, chamber_size, voxels):
    directions = [
        (1, 0, 0), (-1, 0, 0), (0, 1, 0), (0, -1, 0),
        (0, 0, 1), (0, 0, -1)
    ]
    empty_neighbors = 0
    for dx, dy, dz in directions:
        nx, ny, nz = x + dx, y + dy, z + dz
        if 0 <= nx < chamber_size[0] and 0 <= ny < chamber_size[1] and 0 <= nz < chamber_size[2]:
            if voxels["Solid"][f"Z{nz}"][f"Y{ny}"][nx] == '0':
                empty_neighbors += 1
    return empty_neighbors
def remove_isolated_voxels(chamber_size, voxels):
    for z in range(chamber_size[2] + 1):
        for y in range(chamber_size[1] + 1):
            for x in range(chamber_size[0]):
                if voxels["Solid"][f"Z{z}"][f"Y{y}"][x] == '1':
                    empty_neighbors = count_empty_neighbors(x, y, z, chamber_size, voxels)
                    if empty_neighbors >= 5:  # Убираем блок, если он окружен 5 или более пустыми блоками
                        voxel_row = list(voxels["Solid"][f"Z{z}"][f"Y{y}"])
                        voxel_row[x] = '0'
                        voxels["Solid"][f"Z{z}"][f"Y{y}"] = ''.join(voxel_row)
def generate_random_voxels(chamber_size):
    voxels = {}
    voxel_types = ["Solid", "Portal0", "Portal1", "Portal2"]
    for voxel_type in voxel_types:
        voxels[voxel_type] = {}
        for z in range(chamber_size[2] + 1):
            voxels[voxel_type][f"Z{z}"] = generate_random_voxel_layer(z, chamber_size)
    remove_isolated_voxels(chamber_size, voxels)
    return voxels
def generate_random_angles(surface_type):
    if surface_type == "floor":
        return "0 0 0"
    elif surface_type == "ceiling":
        return "180 0 0"
    elif surface_type == "wall":
        return f"0 {random.choice([0, 90, 180, 270])} 0"
def is_valid_position(x, y, z, chamber_size, voxels, items):
    if x < 1 or x >= chamber_size[0] - 1 or y < 1 or y >= chamber_size[1] - 1:
        return False
    if z < 1 or z >= chamber_size[2]:
        return False
    if voxels["Solid"][f"Z{z}"][f"Y{y}"][x] == '1':
        return False
    if voxels["Solid"][f"Z{z-1}"][f"Y{y}"][x] == '0':
        return False
    for item in items:
        item_x, item_y, item_z = map(int, item["VoxelPos"].split())
        if item_x == x and item_y == y and item_z == z:
            return False  # Уже есть объект в этой позиции
    return True
def find_valid_position(chamber_size, voxels, items, tries=1000):
    for _ in range(tries):
        x = random.randint(0, chamber_size[0] - 2)
        y = random.randint(0, chamber_size[1] - 2)
        z = random.randint(0, chamber_size[2] - 1)
        if is_valid_position(x, y, z, chamber_size, voxels, items):
            return x, y, z
    return None
def count_buttons(items, button_type):
    count = 0
    for item in items:
        if item["Type"] == "ITEM_BUTTON_FLOOR":
            button_value = item.get("ITEM_PROPERTY_BUTTON_TYPE")
            if button_value == button_type:
                count += 1
            else:
                continue
    return count
def generate_random_items(chamber_size, voxels):
    items = []
    button_indices = []
    # Обязательные двери
    entry_x, entry_y, entry_z = 1, chamber_size[1] // 2, 0
    exit_x, exit_y, exit_z = chamber_size[0] - 2, chamber_size[1] // 2, 0
    doors = [
        {
            "Index": "0",
            "Type": "ITEM_ENTRY_DOOR",
            "Deletable": "0",
            "VoxelPos": f"{entry_x} {entry_y} 0",
            "LocalPos": "0 0 0",
            "Angles": "-90 -90 0",
			"ITEM_PROPERTY_DOOR_IS_COOP": "0",
            "Facing": "0 0 0",
            "ConnectionVisiblity": "0",
			"DoorInstanceID": "6.000000",
			"Enabled": "1"
        },
        {
            "Index": "1",
            "Type": "ITEM_COOP_ENTRY_DOOR",
            "Deletable": "0",
            "VoxelPos": f"{entry_x} {entry_y} 0",
            "LocalPos": "0 0 0",
            "Angles": "-90 -90 0",
			"ITEM_PROPERTY_DOOR_IS_COOP": "0",
            "Facing": "0 0 0",
            "ConnectionVisiblity": "0",
			"DoorInstanceID": "0.000000",
			"Enabled": "0"
        },
        {
            "Index": "2",
            "Type": "ITEM_EXIT_DOOR",
            "Deletable": "0",
            "VoxelPos": f"{exit_x} {exit_y} 0",
            "LocalPos": "0 0 0",
            "Angles": "-90 90 0",
			"ITEM_PROPERTY_CONNECTION_COUNT": "0",
			"ITEM_PROPERTY_START_OPEN": "1",
			"ITEM_PROPERTY_DOOR_IS_COOP": "0",
            "Facing": "0 0 0",
            "ConnectionVisiblity": "0",
			"DoorInstanceID": "1.000000",
			"Enabled": "1"
        },
        {
            "Index": "3",
            "Type": "ITEM_COOP_EXIT_DOOR",
            "Deletable": "0",
            "VoxelPos": f"{exit_x} {exit_y} 0",
            "LocalPos": "0 0 0",
            "Angles": "-90 90 0",
			"ITEM_PROPERTY_CONNECTION_COUNT": "0",
			"ITEM_PROPERTY_START_OPEN": "0",
			"ITEM_PROPERTY_COOP_EXIT_STARTS_LOCKED": "0",
            "Facing": "0 0 0",
            "ConnectionVisiblity": "0",
			"DoorInstanceID": "3.000000",
			"Enabled": "0"
        }
    ]
    items.extend(doors)
    other_items = [
        "ITEM_BUTTON_FLOOR",
        "ITEM_OBSERVATION_ROOM", "ITEM_BARRIER_HAZARD", "ITEM_BUTTON_PEDESTAL", "ITEM_TURRET"
    ]
    current_index = 4
    for _ in range(11):  # Генерируем дополнительно 11 предметов
        item_type = random.choice(other_items)
        position = find_valid_position(chamber_size, voxels, items)
        if position is None:
            continue  # Пропускаем, если не удалось найти валидную позицию
        x, y, z = position
        surface_type = "floor" if z == 0 else "ceiling" if z == chamber_size[2] else "wall"
        angles = generate_random_angles(surface_type)
        if item_type == "ITEM_OBSERVATION_ROOM":
            angles = random.choice(["-90 0 0", "0 0 0"])
        item = {
            "Index": str(current_index),
            "Type": item_type,
            "Deletable": "1",
            "VoxelPos": f"{x} {y} {z}",
            "LocalPos": "0 0 0",
            "Angles": angles,
            "Facing": "0 0 0",
            "ConnectionVisiblity": "0"
        }
        current_index += 1
        # Добавляем специфичные свойства для некоторых типов предметов
        if item_type == "ITEM_BUTTON_FLOOR":
            item["ITEM_PROPERTY_BUTTON_TYPE"] = str(random.randint(0, 1))
            button_indices.append(item["Index"])
        elif item_type in ["ITEM_CUBE", "ITEM_DROPPER_CUBE"]:
            item["ITEM_PROPERTY_CUBE_TYPE"] = "0"
        elif item_type == "ITEM_BARRIER_HAZARD":
            item["ITEM_PROPERTY_BARRIER_HAZARD_TYPE"] = "0"
            item["ITEM_PROPERTY_START_ENABLED"] = "1"
        elif item_type == "ITEM_BUTTON_PEDESTAL":
            item["ITEM_PROPERTY_TIMER_DELAY"] = str(random.randint(2, 15))
            item["ITEM_PROPERTY_TIMER_SOUND"] = "0"
        elif item_type == "ITEM_TURRET":
            item["Angles"] = "0 0 0"
            if surface_type == "floor":
                facing_angle = random.choice([0, 90, 180, 270])
                item["Facing"] = f"0 {facing_angle} 0"
            elif surface_type == "wall":
                valid_facing_angles = []
                if x > 1:
                    valid_facing_angles.append(0)  # Направление вправо
                if x < chamber_size[0] - 2:
                    valid_facing_angles.append(180)  # Направление влево
                if y > 1:
                    valid_facing_angles.append(270)  # Направление вниз
                if y < chamber_size[1] - 2:
                    valid_facing_angles.append(90)  # Направление вверх
                if valid_facing_angles:
                    facing_angle = random.choice(valid_facing_angles)
                    item["Facing"] = f"0 {facing_angle} 0"
            elif surface_type == "ceiling":
                facing_angle = random.choice([0, 90, 180, 270])
                item["Facing"] = f"0 {facing_angle} 0"
        else:
            item["Angles"] = generate_random_angles(surface_type)
            item["Facing"] = "0 0 0"
        items.append(item)
    for button_index in button_indices:
        position = find_valid_position(chamber_size, voxels, items)
        if position is None:
            continue
        x, y, z = position
        cube_index = str(current_index)
        current_index += 1
        cube_item = {
            "Index": cube_index,
            "Type": "ITEM_CUBE",
            "Deletable": "1",
            "VoxelPos": f"{x} {y} {z}",
            "LocalPos": "0 0 0",
            "Angles": "0 0 0",
            "Facing": "0 0 0",
            "ConnectionVisibility": "0",
            "ITEM_PROPERTY_CUBE_TYPE": "0"
        }
        items.append(cube_item)
        dropper_index = str(current_index)
        current_index += 1
        dropper_item = {
            "Index": dropper_index,
            "Type": "ITEM_DROPPER_CUBE",
            "Deletable": "1",
            "VoxelPos": f"{x} {y} {z+1}",
            "LocalPos": "0 0 0",
            "Angles": "0 0 0",
            "ITEM_PROPERTY_DROPPER_ENABLED": "1",
			"ITEM_PROPERTY_AUTO_DROP_CUBE":	"1",
			"ITEM_PROPERTY_AUTO_RESPAWN_CUBE": "1",
            "Facing": "0 0 0",
            "ConnectionVisibility": "0"
        }
        items.append(dropper_item)
    return items
def generate_random_connections(items):
    connections = []
    seen_connections = set()
    buttons = [item for item in items if item["Type"] in ["ITEM_BUTTON_FLOOR", "ITEM_BUTTON_PEDESTAL"]]
    doors = [item for item in items if item["Type"] == "ITEM_EXIT_DOOR"]
    cubes = [item for item in items if item["Type"] in ["ITEM_CUBE"]]
    droppers = [item for item in items if item["Type"] == "ITEM_DROPPER_CUBE"]
    necessary_connections = [
        {"Sender": "0", "Receiver": "1", "Type": "CONNECTION_BARRIER_ANCHOR_TO_EXTENT"},
        {"Sender": "2", "Receiver": "3", "Type": "CONNECTION_BARRIER_ANCHOR_TO_EXTENT"}
    ]
    connections.extend(necessary_connections)
    connection_counts = {door["Index"]: 0 for door in doors}
    for button in buttons:
        if doors:
            door = random.choice(doors)
            conn_key = (button["Index"], door["Index"])
            if conn_key not in seen_connections:
                connections.append({
                    "Sender": button["Index"],
                    "Receiver": door["Index"],
                    "Type": "CONNECTION_STANDARD"
                })
                seen_connections.add(conn_key)
                connection_counts[door["Index"]] += 1
    for cube in cubes:
        if buttons:
            button = random.choice(buttons)
            conn_key = (cube["Index"], button["Index"])
            if conn_key not in seen_connections:
                connections.append({
                    "Sender": cube["Index"],
                    "Receiver": button["Index"],
                    "Type": "CONNECTION_STANDARD"
                })
                seen_connections.add(conn_key)

    for dropper in droppers:
        for cube in cubes:
            conn_key = (cube["Index"], dropper["Index"])
            if conn_key not in seen_connections:
                connections.append({
                    "Sender": cube["Index"],
                    "Receiver": dropper["Index"],
                    "Type": "CONNECTION_BOX_DROPPER"
                })
                seen_connections.add(conn_key)
    for door in doors:
        connection_count = connection_counts[door["Index"]]
        door["ITEM_PROPERTY_CONNECTION_COUNT"] = str(connection_count)
        if connection_count > 0:
            door["ITEM_PROPERTY_START_OPEN"] = "0"
        else:
            door["ITEM_PROPERTY_START_OPEN"] = "1"
    return connections
def generate_random_map():
    chamber_size = [random.randint(3, 10), random.randint(5, 10), random.randint(3, 6)]
    voxels = generate_random_voxels(chamber_size)
    items = generate_random_items(chamber_size, voxels)
    map_data = {
        "AppID": "644",
        "Version": "14",
        "FileID": "0x0000000000000000",
        "Timestamp_Created": "0x0000000066A51551",
        "Timestamp_Modified": "0x0000000066A51551",
        "CompileTime": "15.000000",
        "Coop": "0",
        "Title": "Random Map",
        "Description": "This is a randomly generated map.",
        "PreviewDirty": "1",
        "ChamberSize": f"{chamber_size[0]} {chamber_size[1]} {chamber_size[2]}",
        "Voxels": voxels,
        "Items": {
            "Item": items
        },
        "Connections": {
            "Connection": generate_random_connections(items)
        }
    }
    return map_data
def format_map_data(map_data):
    def format_item(item):
        return "\n".join([f'\t\t\t"{k}"\t\t"{v}"' for k, v in item.items()])
    def format_connection(connection):
        return "\n".join([f'\t\t\t"{k}"\t\t"{v}"' for k, v in connection.items()])
    formatted_map = ['"portal2_puzzle"', '{']
    for key, value in map_data.items():
        if key == "Voxels":
            formatted_map.append(f'\t"Voxels"')
            formatted_map.append('\t{')
            for voxel_type, voxel_data in value.items():
                formatted_map.append(f'\t\t"{voxel_type}"')
                formatted_map.append('\t\t{')
                for z, z_data in voxel_data.items():
                    formatted_map.append(f'\t\t\t"{z}"')
                    formatted_map.append('\t\t\t{')
                    for y, y_data in z_data.items():
                        formatted_map.append(f'\t\t\t\t"{y}"\t\t"{y_data}"')
                    formatted_map.append('\t\t\t}')
                formatted_map.append('\t\t}')
            formatted_map.append('\t}')
        elif key == "Items":
            formatted_map.append(f'\t"Items"')
            formatted_map.append('\t{')
            for item in value["Item"]:
                formatted_map.append('\t\t"Item"')
                formatted_map.append('\t\t{')
                formatted_map.append(format_item(item))
                formatted_map.append('\t\t}')
            formatted_map.append('\t}')
        elif key == "Connections":
            formatted_map.append(f'\t"Connections"')
            formatted_map.append('\t{')
            for connection in value["Connection"]:
                formatted_map.append('\t\t"Connection"')
                formatted_map.append('\t\t{')
                formatted_map.append(format_connection(connection))
                formatted_map.append('\t\t}')
            formatted_map.append('\t}')
        else:
            formatted_map.append(f'\t"{key}"\t\t"{value}"')
    formatted_map.append('}')
    return "\n".join(formatted_map)
if __name__ == "__main__":
    map_data = generate_random_map()
    formatted_map = format_map_data(map_data)
    print(formatted_map)», и вот пример ХОРОШЕЙ карты (правда, очень очень простой): «"portal2_puzzle"
{
	"AppID"		"644"
	"Version"		"14"
	"FileID"		"0x0000000000000000"
	"Timestamp_Created"		"0x0000000066C0DB99"
	"Timestamp_Modified"		"0x0000000066F0300A"
	"CompileTime"		"15.000000"
	"Coop"		"0"
	"Title"		"TEST"
	"Description"		"TEST"
	"PreviewDirty"		"1"
	"ChamberSize"		"8 6 3"
	"Voxels"
	{
		"Solid"
		{
			"Z0"
			{
				"Y6"		"f000000000"
				"Y5"		"f111110000"
				"Y4"		"f111110000"
				"Y3"		"f111110000"
				"Y2"		"f000000000"
				"Y1"		"f000000000"
				"Y0"		"f000000000"
			}
			"Z1"
			{
				"Y6"		"f000000000"
				"Y5"		"f111110000"
				"Y4"		"f111110000"
				"Y3"		"f111110000"
				"Y2"		"f000000000"
				"Y1"		"f000000000"
				"Y0"		"f000000000"
			}
			"Z2"
			{
				"Y6"		"f000000000"
				"Y5"		"f111110000"
				"Y4"		"f111110000"
				"Y3"		"f111110000"
				"Y2"		"f000010000"
				"Y1"		"f000010000"
				"Y0"		"f000010000"
			}
			"Z3"
			{
				"Y6"		"f000000000"
				"Y5"		"f111111110"
				"Y4"		"f111111110"
				"Y3"		"f111111110"
				"Y2"		"f111111110"
				"Y1"		"f111111110"
				"Y0"		"f111111110"
			}
		}
		"Portal0"
		{
			"Z0"
			{
				"Y6"		"f111110000"
				"Y5"		"f111111001"
				"Y4"		"f111111111"
				"Y3"		"f111111111"
				"Y2"		"f111111111"
				"Y1"		"f111111111"
				"Y0"		"f111111111"
			}
			"Z1"
			{
				"Y6"		"f111110000"
				"Y5"		"f111111001"
				"Y4"		"f111111111"
				"Y3"		"f111111111"
				"Y2"		"f111111111"
				"Y1"		"f111111111"
				"Y0"		"f111111111"
			}
			"Z2"
			{
				"Y6"		"f111111111"
				"Y5"		"f111111001"
				"Y4"		"f111111001"
				"Y3"		"f111111001"
				"Y2"		"f111111001"
				"Y1"		"f111111001"
				"Y0"		"f111111001"
			}
			"Z3"
			{
				"Y6"		"f111111111"
				"Y5"		"f111100001"
				"Y4"		"f111100001"
				"Y3"		"f111100001"
				"Y2"		"f100000001"
				"Y1"		"f100000001"
				"Y0"		"f100000001"
			}
		}
		"Portal1"
		{
			"Z0"
			{
				"Y6"		"f111111110"
				"Y5"		"f111111110"
				"Y4"		"f111111111"
				"Y3"		"f111111111"
				"Y2"		"f111111111"
				"Y1"		"f111111111"
				"Y0"		"f111111111"
			}
			"Z1"
			{
				"Y6"		"f111111110"
				"Y5"		"f111111110"
				"Y4"		"f111111111"
				"Y3"		"f111111111"
				"Y2"		"f111111111"
				"Y1"		"f111111111"
				"Y0"		"f111111111"
			}
			"Z2"
			{
				"Y6"		"f111111111"
				"Y5"		"f111111111"
				"Y4"		"f111110001"
				"Y3"		"f111110001"
				"Y2"		"f111010001"
				"Y1"		"f111010001"
				"Y0"		"f111111111"
			}
			"Z3"
			{
				"Y6"		"f111111111"
				"Y5"		"f111000001"
				"Y4"		"f111000001"
				"Y3"		"f111000001"
				"Y2"		"f000000001"
				"Y1"		"f000000001"
				"Y0"		"f111111111"
			}
		}
		"Portal2"
		{
			"Z0"
			{
				"Y6"		"f111110000"
				"Y5"		"f111111110"
				"Y4"		"f111111111"
				"Y3"		"f111111111"
				"Y2"		"f111111111"
				"Y1"		"f111111111"
				"Y0"		"f111111111"
			}
			"Z1"
			{
				"Y6"		"f111110000"
				"Y5"		"f111110000"
				"Y4"		"f111111111"
				"Y3"		"f111111111"
				"Y2"		"f111111111"
				"Y1"		"f111111111"
				"Y0"		"f111111111"
			}
			"Z2"
			{
				"Y6"		"f111111111"
				"Y5"		"f111110001"
				"Y4"		"f111110001"
				"Y3"		"f111110001"
				"Y2"		"f111010001"
				"Y1"		"f111010001"
				"Y0"		"f111010001"
			}
			"Z3"
			{
				"Y6"		"f111111111"
				"Y5"		"f111111111"
				"Y4"		"f111111111"
				"Y3"		"f111111111"
				"Y2"		"f111111111"
				"Y1"		"f111111111"
				"Y0"		"f111111111"
			}
		}
	}
	"Items"
	{
		"Item"
		{
			"Index"		"0"
			"Type"		"ITEM_ENTRY_DOOR"
			"Deletable"		"0"
			"VoxelPos"		"1 0 0"
			"LocalPos"		"0 0 0"
			"Angles"		"-90 -90 0"
			"ITEM_PROPERTY_DOOR_IS_COOP"		"0"
			"Facing"		"0 0 0"
			"ConnectionVisiblity"		"0"
			"DoorInstanceID"		"6.000000"
			"Enabled"		"1"
		}
		"Item"
		{
			"Index"		"1"
			"Type"		"ITEM_COOP_ENTRY_DOOR"
			"Deletable"		"0"
			"VoxelPos"		"1 0 0"
			"LocalPos"		"0 0 0"
			"Angles"		"-90 -90 0"
			"ITEM_PROPERTY_DOOR_IS_COOP"		"0"
			"Facing"		"0 0 0"
			"ConnectionVisiblity"		"0"
			"DoorInstanceID"		"0.000000"
			"Enabled"		"0"
		}
		"Item"
		{
			"Index"		"2"
			"Type"		"ITEM_EXIT_DOOR"
			"Deletable"		"0"
			"VoxelPos"		"6 5 0"
			"LocalPos"		"0 0 0"
			"Angles"		"-90 90 0"
			"ITEM_PROPERTY_CONNECTION_COUNT"		"1"
			"ITEM_PROPERTY_START_OPEN"		"0"
			"ITEM_PROPERTY_DOOR_IS_COOP"		"0"
			"Facing"		"0 0 0"
			"ConnectionVisiblity"		"0"
			"DoorInstanceID"		"1.000000"
			"Enabled"		"1"
		}
		"Item"
		{
			"Index"		"3"
			"Type"		"ITEM_COOP_EXIT_DOOR"
			"Deletable"		"0"
			"VoxelPos"		"6 5 0"
			"LocalPos"		"0 0 0"
			"Angles"		"-90 90 0"
			"ITEM_PROPERTY_CONNECTION_COUNT"		"0"
			"ITEM_PROPERTY_DOOR_IS_COOP"		"0"
			"ITEM_PROPERTY_COOP_EXIT_STARTS_LOCKED"		"1"
			"Facing"		"0 0 0"
			"ConnectionVisiblity"		"0"
			"DoorInstanceID"		"3.000000"
			"Enabled"		"0"
		}
		"Item"
		{
			"Index"		"4"
			"Type"		"ITEM_OBSERVATION_ROOM"
			"Deletable"		"0"
			"VoxelPos"		"7 2 1"
			"LocalPos"		"0 0 0"
			"Angles"		"-90 0 0"
			"Facing"		"0 0 0"
			"ConnectionVisiblity"		"0"
		}
		"Item"
		{
			"Index"		"5"
			"Type"		"ITEM_BARRIER_HAZARD"
			"Deletable"		"1"
			"VoxelPos"		"4 2 0"
			"LocalPos"		"0 0 0"
			"Angles"		"0 0 90"
			"ITEM_PROPERTY_CONNECTION_COUNT"		"1"
			"ITEM_PROPERTY_BARRIER_HAZARD_TYPE"		"0"
			"ITEM_PROPERTY_START_ENABLED"		"1"
			"Facing"		"0 0 0"
			"ConnectionVisiblity"		"0"
		}
		"Item"
		{
			"Index"		"6"
			"Type"		"ITEM_BARRIER_HAZARD_EXTENT"
			"Deletable"		"0"
			"VoxelPos"		"4 2 0"
			"LocalPos"		"0 0 0"
			"Angles"		"90 0 0"
			"Facing"		"0 0 0"
			"ConnectionVisiblity"		"0"
		}
		"Item"
		{
			"Index"		"7"
			"Type"		"ITEM_BARRIER_HAZARD_EXTENT"
			"Deletable"		"0"
			"VoxelPos"		"4 2 1"
			"LocalPos"		"0 0 0"
			"Angles"		"-90 180 0"
			"Facing"		"0 0 0"
			"ConnectionVisiblity"		"0"
		}
		"Item"
		{
			"Index"		"8"
			"Type"		"ITEM_BUTTON_FLOOR"
			"Deletable"		"1"
			"VoxelPos"		"6 1 0"
			"LocalPos"		"0 0 0"
			"Angles"		"0 0 0"
			"ITEM_PROPERTY_BUTTON_TYPE"		"0"
			"Facing"		"0 0 0"
			"ConnectionVisiblity"		"0"
		}
		"Item"
		{
			"Index"		"9"
			"Type"		"ITEM_CUBE"
			"Deletable"		"1"
			"VoxelPos"		"1 1 0"
			"LocalPos"		"0 0 0"
			"Angles"		"0 0 0"
			"ITEM_PROPERTY_CUBE_TYPE"		"0"
			"ITEM_PROPERTY_DROPPER_ENABLED"		"1"
			"ITEM_PROPERTY_AUTO_DROP_CUBE"		"1"
			"ITEM_PROPERTY_AUTO_RESPAWN_CUBE"		"1"
			"Facing"		"0 0 0"
			"ConnectionVisiblity"		"0"
		}
		"Item"
		{
			"Index"		"10"
			"Type"		"ITEM_DROPPER_CUBE"
			"Deletable"		"1"
			"VoxelPos"		"1 1 2"
			"LocalPos"		"0 0 0"
			"Angles"		"0 180 180"
			"ITEM_PROPERTY_CONNECTION_COUNT"		"0"
			"ITEM_PROPERTY_CUBE_TYPE"		"0"
			"ITEM_PROPERTY_DROPPER_ENABLED"		"1"
			"ITEM_PROPERTY_AUTO_DROP_CUBE"		"1"
			"ITEM_PROPERTY_AUTO_RESPAWN_CUBE"		"1"
			"Facing"		"0 0 0"
			"ConnectionVisiblity"		"0"
		}
		"Item"
		{
			"Index"		"11"
			"Type"		"ITEM_BUTTON_FLOOR"
			"Deletable"		"1"
			"VoxelPos"		"6 4 0"
			"LocalPos"		"0 0 0"
			"Angles"		"0 0 0"
			"ITEM_PROPERTY_BUTTON_TYPE"		"1"
			"Facing"		"0 0 0"
			"ConnectionVisiblity"		"0"
		}
	}
	"Connections"
	{
		"Connection"
		{
			"Sender"		"0"
			"Receiver"		"1"
			"Type"		"CONNECTION_BARRIER_ANCHOR_TO_EXTENT"
		}
		"Connection"
		{
			"Sender"		"2"
			"Receiver"		"3"
			"Type"		"CONNECTION_BARRIER_ANCHOR_TO_EXTENT"
		}
		"Connection"
		{
			"Sender"		"5"
			"Receiver"		"6"
			"Type"		"CONNECTION_BARRIER_ANCHOR_TO_EXTENT"
		}
		"Connection"
		{
			"Sender"		"5"
			"Receiver"		"7"
			"Type"		"CONNECTION_BARRIER_ANCHOR_TO_EXTENT"
		}
		"Connection"
		{
			"Sender"		"9"
			"Receiver"		"10"
			"Type"		"CONNECTION_BOX_DROPPER"
		}
		"Connection"
		{
			"Sender"		"8"
			"Receiver"		"5"
			"Type"		"CONNECTION_STANDARD"
		}
		"Connection"
		{
			"Sender"		"11"
			"Receiver"		"2"
			"Type"		"CONNECTION_STANDARD"
		}
	}
}»