// 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;
                break;

            case BlockID.NOTE_BLOCK:
                block = new NoteBlock(data);
                break;*/

            default:
                block = new BaseBlock(id, data);
                break;
        }
        return block;
    }

    /**
     * Loads a schematic from the given file into a CuboidClipboard
     * @param file The file to load from
     * @return The CuboidClipboard containing the contents of this schematic
     * @throws IOException If an error occurs while reading data
     * @throws DataException if data is not in the correct format
     */
    public abstract Cuboid load(File file) throws IOException, DataException;

    /**
     * Saves the data from the specified CuboidClipboard to the given file, overwriting any
     * existing data in the file
     * @param clipboard The clipboard to get data from
     * @param file The file to save to
     * @throws IOException If an error occurs while writing data
     * @throws DataException If the clipboard has data which cannot be stored
     */
// 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;

                break;

            case BlockID.NOTE_BLOCK:
                block = new NoteBlock(data);
                break;*/

            default:
                block = new BaseBlock(id, data);
                break;
        }
        return block;
    }

    /**
     * Loads a schematic from the given file into a CuboidClipboard
     * @param file The file to load from
     * @return The CuboidClipboard containing the contents of this schematic
     * @throws IOException If an error occurs while reading data
     * @throws DataException if data is not in the correct format
     */
    public abstract Cuboid load(File file) throws IOException, DataException;

    /**
     * Saves the data from the specified CuboidClipboard to the given file, overwriting any
     * existing data in the file
     * @param clipboard The clipboard to get data from
     * @param file The file to save to
     * @throws IOException If an error occurs while writing data
     * @throws DataException If the clipboard has data which cannot be stored
     */
    public abstract void save(Cuboid clipboard, File file) throws IOException, DataException;