CLASS net/minecraft/class_4239 net/minecraft/util/PathUtil COMMENT A class holding path-related utility methods. FIELD field_18955 RESERVED_WINDOWS_NAMES Ljava/util/regex/Pattern; FIELD field_18956 FILE_NAME_WITH_COUNT Ljava/util/regex/Pattern; FIELD field_33384 MAX_NAME_LENGTH I FIELD field_40712 VALID_FILE_NAME Ljava/util/regex/Pattern; METHOD method_19773 getNextUniqueName (Ljava/nio/file/Path;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; COMMENT {@return a filename, prefixed with {@code name}, that does not currently COMMENT exist inside {@code path}} COMMENT COMMENT @implNote This strips any illegal characters from {@code name}, then COMMENT attempts to make a directory with the name and the extension. If this succeeds, COMMENT the directory is deleted and the name with the extension is returned. If not, it COMMENT appends {@code (1)} to the name and tries again until it succeeds. COMMENT COMMENT @throws IOException if creating the temporary directory fails, e.g. due to {@code path} COMMENT not being a directory ARG 0 path ARG 1 name ARG 2 extension METHOD method_20200 isNormal (Ljava/nio/file/Path;)Z COMMENT {@return whether {@code path} is already normalized} ARG 0 path METHOD method_20201 isAllowedName (Ljava/nio/file/Path;)Z COMMENT {@return whether {@code path} does not contain reserved Windows file names} COMMENT COMMENT @apiNote This returns {@code false} for reserved names regardless of whether the platform COMMENT the game is running is actually Windows. Note that this does not check for COMMENT illegal characters or file permissions. ARG 0 path METHOD method_20202 getResourcePath (Ljava/nio/file/Path;Ljava/lang/String;Ljava/lang/String;)Ljava/nio/file/Path; ARG 0 path ARG 1 resourceName ARG 2 extension METHOD method_34675 getPosixFullPath (Ljava/lang/String;)Ljava/lang/String; COMMENT {@return the full path of {@code path} with directory separator normalized COMMENT to {@code /}} ARG 0 path METHOD method_34676 normalizeToPosix (Ljava/lang/String;)Ljava/lang/String; COMMENT {@return the normalized path of {@code path} with directory separator normalized COMMENT to {@code /}} ARG 0 path METHOD method_46344 getPath (Ljava/nio/file/Path;Ljava/util/List;)Ljava/nio/file/Path; COMMENT {@return {@code paths} resolved as a path from {@code root}} COMMENT COMMENT

If {@code paths} is empty, this returns {@code root}. ARG 0 root ARG 1 paths METHOD method_46345 validatePath ([Ljava/lang/String;)V COMMENT Validates that {@code paths} is not empty and does not contain invalid segments COMMENT (such as {@code .}, {@code ..}, or otherwise {@linkplain #isFileNameValid invalid names}). COMMENT COMMENT @throws IllegalArgumentException when the {@code paths} are invalid ARG 0 paths METHOD method_46346 split (Ljava/lang/String;)Lcom/mojang/serialization/DataResult; COMMENT {@return {@code path} split by {@code /}, or an error result if the path is invalid} COMMENT COMMENT

All path segments must be a {@linkplain #isFileNameValid valid file name}. Additionally, COMMENT {@code .} and {@code ..} are forbidden. ARG 0 path METHOD method_46347 isFileNameValid (Ljava/lang/String;)Z COMMENT {@return whether {@code name} is a valid file name} COMMENT COMMENT @apiNote A valid file name contains only ASCII lowercase alphabets, ASCII digits, COMMENT a dot, or an underscore. Unlike {@link Identifier} paths, hyphens are not allowed. ARG 0 name METHOD method_47525 createDirectories (Ljava/nio/file/Path;)V COMMENT A symbolic-link safe version of {@link java.nio.file.Files#createDirectories}. ARG 0 path