LinkFSProvider.java

net.minecraft.server.packs.linkfs.LinkFSProvider

信息

  • 全限定名:net.minecraft.server.packs.linkfs.LinkFSProvider
  • 类型:package-private class
  • 包:net.minecraft.server.packs.linkfs
  • 源码路径:src/main/java/net/minecraft/server/packs/linkfs/LinkFSProvider.java
  • 起始行号:L34
  • 继承:FileSystemProvider
  • 职责:

    TODO

字段/常量

  • SCHEME
    • 类型: String
    • 修饰符: public static final
    • 源码定位: L35
    • 说明:

      TODO

内部类/嵌套类型

构造器

方法

下面的方法块按源码顺序生成。

public String getScheme() @ L37

  • 方法名:getScheme
  • 源码定位:L37
  • 返回类型:String
  • 修饰符:public

参数:

说明:

TODO

public FileSystem newFileSystem(URI uri, Map<String,?> env) @ L42

  • 方法名:newFileSystem
  • 源码定位:L42
  • 返回类型:FileSystem
  • 修饰符:public

参数:

  • uri: URI
  • env: Map<String,?>

说明:

TODO

public FileSystem getFileSystem(URI uri) @ L47

  • 方法名:getFileSystem
  • 源码定位:L47
  • 返回类型:FileSystem
  • 修饰符:public

参数:

  • uri: URI

说明:

TODO

public Path getPath(URI uri) @ L52

  • 方法名:getPath
  • 源码定位:L52
  • 返回类型:Path
  • 修饰符:public

参数:

  • uri: URI

说明:

TODO

public SeekableByteChannel newByteChannel(Path path, Set<?extends OpenOption> options, FileAttribute<?>... attrs) @ L57

  • 方法名:newByteChannel
  • 源码定位:L57
  • 返回类型:SeekableByteChannel
  • 修饰符:public

参数:

  • path: Path
  • options: Set<?extends OpenOption>
  • attrs: FileAttribute<?>…

说明:

TODO

public DirectoryStream<Path> newDirectoryStream(Path dir, Filter<?super Path> filter) @ L74

  • 方法名:newDirectoryStream
  • 源码定位:L74
  • 返回类型:DirectoryStream
  • 修饰符:public

参数:

  • dir: Path
  • filter: Filter<?super Path>

说明:

TODO

public void createDirectory(Path dir, FileAttribute<?>... attrs) @ L103

  • 方法名:createDirectory
  • 源码定位:L103
  • 返回类型:void
  • 修饰符:public

参数:

  • dir: Path
  • attrs: FileAttribute<?>…

说明:

TODO

public void delete(Path path) @ L108

  • 方法名:delete
  • 源码定位:L108
  • 返回类型:void
  • 修饰符:public

参数:

  • path: Path

说明:

TODO

public void copy(Path source, Path target, CopyOption... options) @ L113

  • 方法名:copy
  • 源码定位:L113
  • 返回类型:void
  • 修饰符:public

参数:

  • source: Path
  • target: Path
  • options: CopyOption…

说明:

TODO

public void move(Path source, Path target, CopyOption... options) @ L118

  • 方法名:move
  • 源码定位:L118
  • 返回类型:void
  • 修饰符:public

参数:

  • source: Path
  • target: Path
  • options: CopyOption…

说明:

TODO

public boolean isSameFile(Path path, Path path2) @ L123

  • 方法名:isSameFile
  • 源码定位:L123
  • 返回类型:boolean
  • 修饰符:public

参数:

  • path: Path
  • path2: Path

说明:

TODO

public boolean isHidden(Path path) @ L128

  • 方法名:isHidden
  • 源码定位:L128
  • 返回类型:boolean
  • 修饰符:public

参数:

  • path: Path

说明:

TODO

public FileStore getFileStore(Path path) @ L133

  • 方法名:getFileStore
  • 源码定位:L133
  • 返回类型:FileStore
  • 修饰符:public

参数:

  • path: Path

说明:

TODO

public void checkAccess(Path path, AccessMode... modes) @ L138

  • 方法名:checkAccess
  • 源码定位:L138
  • 返回类型:void
  • 修饰符:public

参数:

  • path: Path
  • modes: AccessMode…

说明:

TODO

public <V extends FileAttributeView> V getFileAttributeView(Path path, Class<V> type, LinkOption... options) @ L165

  • 方法名:getFileAttributeView
  • 源码定位:L165
  • 返回类型: V
  • 修饰符:public

参数:

  • path: Path
  • type: Class
  • options: LinkOption…

说明:

TODO

public <A extends BasicFileAttributes> A readAttributes(Path path, Class<A> type, LinkOption... options) @ L171

参数:

说明:

TODO

public Map<String,Object> readAttributes(Path path, String attributes, LinkOption... options) @ L181

  • 方法名:readAttributes
  • 源码定位:L181
  • 返回类型:Map<String,Object>
  • 修饰符:public

参数:

  • path: Path
  • attributes: String
  • options: LinkOption…

说明:

TODO

public void setAttribute(Path path, String attribute, Object value, LinkOption... options) @ L186

  • 方法名:setAttribute
  • 源码定位:L186
  • 返回类型:void
  • 修饰符:public

参数:

  • path: Path
  • attribute: String
  • value: Object
  • options: LinkOption…

说明:

TODO

private static LinkFSPath toLinkPath(Path path) @ L191

  • 方法名:toLinkPath
  • 源码定位:L191
  • 返回类型:LinkFSPath
  • 修饰符:private static

参数:

  • path: Path

说明:

TODO

代码

class LinkFSProvider extends FileSystemProvider {
    public static final String SCHEME = "x-mc-link";
 
    @Override
    public String getScheme() {
        return "x-mc-link";
    }
 
    @Override
    public FileSystem newFileSystem(URI uri, Map<String, ?> env) {
        throw new UnsupportedOperationException();
    }
 
    @Override
    public FileSystem getFileSystem(URI uri) {
        throw new UnsupportedOperationException();
    }
 
    @Override
    public Path getPath(URI uri) {
        throw new UnsupportedOperationException();
    }
 
    @Override
    public SeekableByteChannel newByteChannel(Path path, Set<? extends OpenOption> options, FileAttribute<?>... attrs) throws IOException {
        if (!options.contains(StandardOpenOption.CREATE_NEW)
            && !options.contains(StandardOpenOption.CREATE)
            && !options.contains(StandardOpenOption.APPEND)
            && !options.contains(StandardOpenOption.WRITE)) {
            Path targetPath = toLinkPath(path).toAbsolutePath().getTargetPath();
            if (targetPath == null) {
                throw new NoSuchFileException(path.toString());
            } else {
                return Files.newByteChannel(targetPath, options, attrs);
            }
        } else {
            throw new UnsupportedOperationException();
        }
    }
 
    @Override
    public DirectoryStream<Path> newDirectoryStream(Path dir, Filter<? super Path> filter) throws IOException {
        final PathContents.DirectoryContents directoryContents = toLinkPath(dir).toAbsolutePath().getDirectoryContents();
        if (directoryContents == null) {
            throw new NotDirectoryException(dir.toString());
        } else {
            return new DirectoryStream<Path>() {
                {
                    Objects.requireNonNull(LinkFSProvider.this);
                }
 
                @Override
                public Iterator<Path> iterator() {
                    return directoryContents.children().values().stream().filter(path -> {
                        try {
                            return filter.accept(path);
                        } catch (IOException var3) {
                            throw new DirectoryIteratorException(var3);
                        }
                    }).map(path -> (Path)path).iterator();
                }
 
                @Override
                public void close() {
                }
            };
        }
    }
 
    @Override
    public void createDirectory(Path dir, FileAttribute<?>... attrs) {
        throw new ReadOnlyFileSystemException();
    }
 
    @Override
    public void delete(Path path) {
        throw new ReadOnlyFileSystemException();
    }
 
    @Override
    public void copy(Path source, Path target, CopyOption... options) {
        throw new ReadOnlyFileSystemException();
    }
 
    @Override
    public void move(Path source, Path target, CopyOption... options) {
        throw new ReadOnlyFileSystemException();
    }
 
    @Override
    public boolean isSameFile(Path path, Path path2) {
        return path instanceof LinkFSPath && path2 instanceof LinkFSPath && path.equals(path2);
    }
 
    @Override
    public boolean isHidden(Path path) {
        return false;
    }
 
    @Override
    public FileStore getFileStore(Path path) {
        return toLinkPath(path).getFileSystem().store();
    }
 
    @Override
    public void checkAccess(Path path, AccessMode... modes) throws IOException {
        if (modes.length == 0 && !toLinkPath(path).exists()) {
            throw new NoSuchFileException(path.toString());
        } else {
            AccessMode[] var3 = modes;
            int var4 = modes.length;
            int var5 = 0;
 
            while (var5 < var4) {
                AccessMode mode = var3[var5];
                switch (mode) {
                    case READ:
                        if (!toLinkPath(path).exists()) {
                            throw new NoSuchFileException(path.toString());
                        }
                    default:
                        var5++;
                        break;
                    case EXECUTE:
                    case WRITE:
                        throw new AccessDeniedException(mode.toString());
                }
            }
        }
    }
 
    @Override
    public <V extends FileAttributeView> @Nullable V getFileAttributeView(Path path, Class<V> type, LinkOption... options) {
        LinkFSPath linkPath = toLinkPath(path);
        return (V)(type == BasicFileAttributeView.class ? linkPath.getBasicAttributeView() : null);
    }
 
    @Override
    public <A extends BasicFileAttributes> A readAttributes(Path path, Class<A> type, LinkOption... options) throws IOException {
        LinkFSPath linkPath = toLinkPath(path).toAbsolutePath();
        if (type == BasicFileAttributes.class) {
            return (A)linkPath.getBasicAttributes();
        } else {
            throw new UnsupportedOperationException("Attributes of type " + type.getName() + " not supported");
        }
    }
 
    @Override
    public Map<String, Object> readAttributes(Path path, String attributes, LinkOption... options) {
        throw new UnsupportedOperationException();
    }
 
    @Override
    public void setAttribute(Path path, String attribute, Object value, LinkOption... options) {
        throw new ReadOnlyFileSystemException();
    }
 
    private static LinkFSPath toLinkPath(@Nullable Path path) {
        if (path == null) {
            throw new NullPointerException();
        } else if (path instanceof LinkFSPath p) {
            return p;
        } else {
            throw new ProviderMismatchException();
        }
    }
}

引用的其他类