59 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package net.minecraft.server.packs.repository;
 | |
| 
 | |
| import java.io.IOException;
 | |
| import java.nio.file.Files;
 | |
| import java.nio.file.LinkOption;
 | |
| import java.nio.file.NoSuchFileException;
 | |
| import java.nio.file.Path;
 | |
| import java.nio.file.attribute.BasicFileAttributes;
 | |
| import java.util.List;
 | |
| import net.minecraft.world.level.validation.DirectoryValidator;
 | |
| import net.minecraft.world.level.validation.ForbiddenSymlinkInfo;
 | |
| import org.jetbrains.annotations.Nullable;
 | |
| 
 | |
| public abstract class PackDetector<T> {
 | |
| 	private final DirectoryValidator validator;
 | |
| 
 | |
| 	protected PackDetector(DirectoryValidator validator) {
 | |
| 		this.validator = validator;
 | |
| 	}
 | |
| 
 | |
| 	@Nullable
 | |
| 	public T detectPackResources(Path path, List<ForbiddenSymlinkInfo> forbiddenSymlinkInfos) throws IOException {
 | |
| 		Path path2 = path;
 | |
| 
 | |
| 		BasicFileAttributes basicFileAttributes;
 | |
| 		try {
 | |
| 			basicFileAttributes = Files.readAttributes(path, BasicFileAttributes.class, LinkOption.NOFOLLOW_LINKS);
 | |
| 		} catch (NoSuchFileException var6) {
 | |
| 			return null;
 | |
| 		}
 | |
| 
 | |
| 		if (basicFileAttributes.isSymbolicLink()) {
 | |
| 			this.validator.validateSymlink(path, forbiddenSymlinkInfos);
 | |
| 			if (!forbiddenSymlinkInfos.isEmpty()) {
 | |
| 				return null;
 | |
| 			}
 | |
| 
 | |
| 			path2 = Files.readSymbolicLink(path);
 | |
| 			basicFileAttributes = Files.readAttributes(path2, BasicFileAttributes.class, LinkOption.NOFOLLOW_LINKS);
 | |
| 		}
 | |
| 
 | |
| 		if (basicFileAttributes.isDirectory()) {
 | |
| 			this.validator.validateKnownDirectory(path2, forbiddenSymlinkInfos);
 | |
| 			if (!forbiddenSymlinkInfos.isEmpty()) {
 | |
| 				return null;
 | |
| 			} else {
 | |
| 				return !Files.isRegularFile(path2.resolve("pack.mcmeta"), new LinkOption[0]) ? null : this.createDirectoryPack(path2);
 | |
| 			}
 | |
| 		} else {
 | |
| 			return basicFileAttributes.isRegularFile() && path2.getFileName().toString().endsWith(".zip") ? this.createZipPack(path2) : null;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	@Nullable
 | |
| 	protected abstract T createZipPack(Path path) throws IOException;
 | |
| 
 | |
| 	@Nullable
 | |
| 	protected abstract T createDirectoryPack(Path path) throws IOException;
 | |
| }
 |