// Path: src/main/java/ch/n1b/worldedit/schematic/block/BaseBlock.java
// public class BaseBlock extends Block {
//     
//     /**
//      * Construct the block with its type, with default data value 0.
//      *
//      * @param type type ID of block
//      */
//     public BaseBlock(int type) {
//         this(type, 0);
//     }
// 
//     /**
//      * Construct the block with its type and data.
//      *
//      * @param type type ID of block
//      * @param data data value
//      */
//     public BaseBlock(int type, int data) {
//         super(type, data);
//     }
// 
//     /**
//      * Get the type of block.
//      * 
//      * @return the type
//      */
//     public int getType() {
//         return getId();
//     }
// 
//     /**
//      * Set the type of block.
//      * 
//      * @param type the type to set
//      */
//     public void setType(int type) {
//         setId(type);
//     }
// 
//     /**
//      * Returns true if it's air.
//      *
//      * @return if air
//      */
//     public boolean isAir() {
//         return getType() == BlockID.AIR;
//     }
// 
//     /**
//      * Rotate this block 90 degrees.
//      * 
//      * @return new data value
//      */
//     public int rotate90() {
//         int newData = BlockData.rotate90(getType(), getData());
//         setData(newData);
//         return newData;
//     }
// 
//     /**
//      * Rotate this block -90 degrees.
//      * 
//      * @return new data value
//      */
//     public int rotate90Reverse() {
//         int newData = BlockData.rotate90Reverse(getType(), getData());
//         setData((short) newData);
//         return newData;
//     }
// 
//     /**
//      * Checks whether the type ID and data value are equal.
//      */
//     @Override
//     public boolean equals(Object o) {
//         if (!(o instanceof BaseBlock)) {
//             return false;
//         }
// 
//         final BaseBlock otherBlock = (BaseBlock) o;
//         if (getType() != otherBlock.getType()) {
//             return false;
//         }
// 
//         return getData() == otherBlock.getData();
//     }
// }
// 
// Path: src/main/java/ch/n1b/worldedit/schematic/data/DataException.java
// public class DataException extends Exception {
//     private static final long serialVersionUID = 5806521052111023788L;
// 
//     public DataException(String msg) {
//         super(msg);
//     }
// 
//     public DataException() {
//         super();
//     }
// }


import java.util.Map;
import java.util.Set;
import ch.n1b.worldedit.schematic.block.BaseBlock;
import ch.n1b.worldedit.schematic.data.DataException;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
    }

    private final String name;
    private final String[] lookupNames;

    protected SchematicFormat(String name, String... lookupNames) {
        this.name = name;
        List<String> registeredLookupNames = new ArrayList<String>(lookupNames.length);
        for (int i = 0; i < lookupNames.length; ++i) {
            if (i == 0 || !SCHEMATIC_FORMATS.containsKey(lookupNames[i].toLowerCase())) {
                SCHEMATIC_FORMATS.put(lookupNames[i].toLowerCase(), this);
                registeredLookupNames.add(lookupNames[i].toLowerCase());
            }
        }
        this.lookupNames = registeredLookupNames.toArray(new String[registeredLookupNames.size()]);
    }

    /**
     * Gets the official/display name for this schematic format
     *
     * @return The display name for this schematic format
     */
    public String getName() {
        return name;
    }

    public String[] getLookupNames() {
        return lookupNames;
    }

// Path: src/main/java/ch/n1b/worldedit/schematic/block/BaseBlock.java
// public class BaseBlock extends Block {
//     
//     /**
//      * Construct the block with its type, with default data value 0.
//      *
//      * @param type type ID of block
//      */
//     public BaseBlock(int type) {
//         this(type, 0);
//     }
// 
//     /**
//      * Construct the block with its type and data.
//      *
//      * @param type type ID of block
//      * @param data data value
//      */
//     public BaseBlock(int type, int data) {
//         super(type, data);
//     }
// 
//     /**
//      * Get the type of block.
//      * 
//      * @return the type
//      */
//     public int getType() {
//         return getId();
//     }
// 
//     /**
//      * Set the type of block.
//      * 
//      * @param type the type to set
//      */
//     public void setType(int type) {
//         setId(type);
//     }
// 
//     /**
//      * Returns true if it's air.
//      *
//      * @return if air
//      */
//     public boolean isAir() {
//         return getType() == BlockID.AIR;
//     }
// 
//     /**
//      * Rotate this block 90 degrees.
//      * 
//      * @return new data value
//      */
//     public int rotate90() {
//         int newData = BlockData.rotate90(getType(), getData());
//         setData(newData);
//         return newData;
//     }
// 
//     /**
//      * Rotate this block -90 degrees.
//      * 
//      * @return new data value
//      */
//     public int rotate90Reverse() {
//         int newData = BlockData.rotate90Reverse(getType(), getData());
//         setData((short) newData);
//         return newData;
//     }
// 
//     /**
//      * Checks whether the type ID and data value are equal.
//      */
//     @Override
//     public boolean equals(Object o) {
//         if (!(o instanceof BaseBlock)) {
//             return false;
//         }
// 
//         final BaseBlock otherBlock = (BaseBlock) o;
//         if (getType() != otherBlock.getType()) {
//             return false;
//         }
// 
//         return getData() == otherBlock.getData();
//     }
// }
// 
// Path: src/main/java/ch/n1b/worldedit/schematic/data/DataException.java
// public class DataException extends Exception {
//     private static final long serialVersionUID = 5806521052111023788L;
// 
//     public DataException(String msg) {
//         super(msg);
//     }
// 
//     public DataException() {
//         super();
//     }
// }


// Path: src/main/java/ch/n1b/worldedit/schematic/schematic/SchematicFormat.java
import java.util.Map;
import java.util.Set;
import ch.n1b.worldedit.schematic.block.BaseBlock;
import ch.n1b.worldedit.schematic.data.DataException;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;

    }

    private final String name;
    private final String[] lookupNames;

    protected SchematicFormat(String name, String... lookupNames) {
        this.name = name;
        List<String> registeredLookupNames = new ArrayList<String>(lookupNames.length);
        for (int i = 0; i < lookupNames.length; ++i) {
            if (i == 0 || !SCHEMATIC_FORMATS.containsKey(lookupNames[i].toLowerCase())) {
                SCHEMATIC_FORMATS.put(lookupNames[i].toLowerCase(), this);
                registeredLookupNames.add(lookupNames[i].toLowerCase());
            }
        }
        this.lookupNames = registeredLookupNames.toArray(new String[registeredLookupNames.size()]);
    }

    /**
     * Gets the official/display name for this schematic format
     *
     * @return The display name for this schematic format
     */
    public String getName() {
        return name;
    }

    public String[] getLookupNames() {
        return lookupNames;
    }

    public BaseBlock getBlockForId(int id, short data) {