@Override
    protected void saveNBT(NBTTagCompound data) {
        super.saveNBT(data);
//        MiscTools.writeUUID(data, "uuid", uuid);
        NBTTagList tagList = new NBTTagList();
        for (Map.Entry<WorldCoordinate, WorldCoordinate> cache : trackCache.entrySet()) {
            NBTTagCompound entry = new NBTTagCompound();
            if (cache.getKey() != null && cache.getValue() != null) {
                cache.getKey().writeToNBT(entry, "key");
                cache.getValue().writeToNBT(entry, "value");
                tagList.appendTag(entry);
            }
        }
        data.setTag("trackCache", tagList);
//        if (RailcraftConfig.printSignalDebug()) {
//            Deque<WorldCoordinate> test = new LinkedList<WorldCoordinate>();
//            NBTTagList list = data.getTagList("pairings", 10);
//            for (byte entry = 0; entry < list.tagCount(); entry++) {
//                NBTTagCompound tag = list.getCompoundTagAt(entry);
//                int[] c = tag.getIntArray("coords");
//                test.add(new WorldCoordinate(c[0], c[1], c[2], c[3]));
//            }
//            boolean isConsistent = test.containsAll(getPairs());
//            printDebug("Signal Block saved NBT. [{0}, {1}, {2}] [verified: {3}] [changedAspect: {4}] [data: {5}]", tile.xCoord, tile.yCoord, tile.zCoord, isConsistent, changedAspect, test);
        printDebug("Signal Block saved NBT. [{0}, {1}, {2}] [changedAspect: {3}] [data: {4}]", tile.xCoord, tile.yCoord, tile.zCoord, changedAspect, pairings);
//            savedData.put(uuid, new LinkedList<WorldCoordinate>(pairings));
//        }
    }