import: ch.njol.skript.ScriptLoader ch.njol.skript.ScriptLoader$ScriptInfo java.nio.file.Files java.io.File java.io.FilenameFilter ch.njol.skript.util.FileUtils java.nio.file.StandardCopyOption ch.njol.skript.log.RetainingLogHandler ch.njol.skript.log.TimingLogHandler ch.njol.util.OpenCloseable java.util.logging.Level java.nio.file.Paths ch.njol.skript.classes.Changer$ChangerUtils ch.njol.skript.classes.Changer$ChangeMode options: static-sk-loader: ScriptLoader prefix: * &6eSK debug: false expression: patterns: FOLDER FILE LOAD UNLOAD RELOAD PREFIX-DISABLED get: if pattern = 1: return "FOLDER" else if pattern = 2: return "FILE" else if pattern = 3: return "LOAD" else if pattern = 4: return "UNLOAD" else if pattern = 5: return "RELOAD" else if pattern = 6: return "-" function esk_error_handler(error-handler: Object, s: sender = console): set {_file-regex} to "\s(?=\(.+(\.sk), )" set {_$} to "<##eeea04>" loop ...{_error-handler}.getErrors(): if loop-value.getLevel() = Level.SEVERE: set {_$} to "<##a70808>" set {_file-e::*} to regex loop-value.toString() split at {_file-regex} set {_file-name} to (1st element of ((2nd element of ({_file-e::2} split at "(")) split at ", ")) set {_line} to (1st element of ((2nd element of ({_file-e::2} split at "line ")) split at ":")) parsed as number set {_final-error::1} to (join {_$} and {_file-e::1}) set {_final-error::2} to (join "&7" and {_file-e::2}) set {_Path} to (join "plugins/", {_file-name}.replaceAll(".[.]\\", "")) set {_lines::*} to ...Files.readAllLines(Paths.get({_Path})) set {_final::1.0} to "&7(Line %{_line}-1%) &f%{_lines::%{_line}-1%} ? ""%" set {_final::1.1} to "&7(Line %{_line}%) <##dd641d>%{_lines::%{_line}%} ? ""%" set {_final::1.2} to "&7(Line %{_line}+1%) &f%{_lines::%{_line}+1%} ? ""%" set {_err} to {_error-handler}.getNumErrors() set {_err-m} to "An &c1&f error" set {_err-m} to "An &c%{_err}%&f errors" if {_err} > 1 send "{@prefix} &c&l!&f -> %{_err-m}% in the skript &e%{_Path}%" to {_s} send "&c%{_file-e::1}%" to {_s} send "" to {_s} send formatted {_final::*} to {_s} send "","{@prefix} &a&l* &fLoaded &f%{_Path}% &7in &a%{ESK::TIMMING}.getTimeTaken()%ms &7with &c%{_err}%&7 error" to {_s} send "{@prefix} &a&l* &fSkript &e%{_Path}%&f &cwasn't &csuccessfully enabled" to {_s} function esk_parser(file: Object, newfile: Object, s: sender, type: String = "LOAD") :: boolean: set {_HANDLER} to new RetainingLogHandler().start() set {ESK::TIMMING} to new TimingLogHandler().start() set {_OpenCloseable} to new OpenCloseable({_HANDLER}, {ESK::TIMMING}) if {_type} = LOAD: Files.move({_file}.toPath(), {_newfile}.toPath(), StandardCopyOption.REPLACE_EXISTING) {@static-sk-loader}.loadScripts({@static-sk-loader}.loadStructure({_newfile})) if {_type} = RELOAD: set {_new} to new File(join "plugins\Skript\scripts\..\..\..\", "%{_newfile}%") {@static-sk-loader}.reloadScript({_new}) if ({_HANDLER}.getNumErrors() > 0): esk_error_handler({_HANDLER}, {_s}) return false return true function esk_unload_script(loader: Object, enabled-file: Object, disabled-file: Object, s: sender): set {_new} to new File(join "plugins\Skript\scripts\..\..\..\", "%{_enabled-file}%") {_loader}.unloadScript({_new}) Files.move({_enabled-file}.toPath(), {_disabled-file}.toPath(), StandardCopyOption.REPLACE_EXISTING) send "{@prefix} &c&l* &fSkript &e%{_disabled-file}.getPath()%&f unload &asuccessfully" to {_s} send last java exception to console function esk_debug_loader(type: string, enabled: Object, disabled: Object, sender: sender): if {_type} = LOAD: send "load" to {_sender} send "&aEnabled: &f%{_enabled}%" to {_sender} send "&cDisabled: &f%{_disabled}%" to {_sender} if {_type} = UNLOAD: send "unload" to {_sender} send "&cDisabled: &f%{_disabled}%" to {_sender} send "&aEnabled: &f%{_enabled}%" to {_sender} if {_type} = RELOAD: send "reload" to {_sender} effect esk (1:load|0:unload|2:reload) [custom] s(c|k)ript[[s] from] %string% [%sender%]: trigger: set {_f} to new File(expr-1) set {_TYPE} to FILE if expr-1 end with ".sk" else FOLDER if parse mark = 1: set {_STATUS} to LOAD else if parse mark = 0: set {_STATUS} to UNLOAD else if parse mark = 2: set {_STATUS} to RELOAD set {_s} to expr-2 if {_TYPE} = FILE: if {_STATUS} = LOAD: #* #* @var {_disabledfile} representing the disabled file #* @var {_enabledfile} representing the new enabled / loaded file #* set {_enabledfile} to {_f} set {_disabledfile} to new File(join {_f}.getParent(), "/", PREFIX-DISABLED,{_f}.getName()) loop ...new File({_enabledfile}.getParent()).listFiles(): if loop-value.getName().matches(".*.*\.sk$"): if loop-value.getName() = {_disabledfile}.getName(): if esk_parser({_disabledfile}, {_enabledfile}, {_s}) = true: if {-foundError} = true: send "{@prefix} &a&l* &fSkript &e%{_enabledfile}.getName()%&f wasn't successfully enabled" to {_s} else: send "{@prefix} &a&l* &fSkript &e%{_enabledfile}.getName()%&f was successfully enabled" to {_s} else: send "{@prefix} &c&l! &fThis skript &e%{_enabledfile}.getPath()%&f is already enabled" to {_s} esk_debug_loader(LOAD, {_enabledfile}, {_disabledfile}, {_s}) if {@debug} = true if {_STATUS} = UNLOAD: #* #* @var {_disabledfile} representing the disabled file #* @var {_enabledfile} representing the new enabled / loaded file #* set {_enabledfile} to {_f} set {_disabledfile} to new File(join {_f}.getParent(), "/", PREFIX-DISABLED,{_f}.getName()) loop ...new File({_enabledfile}.getParent()).listFiles(): if loop-value.getName().matches(".*.*\.sk$"): if loop-value.getName() = {_enabledfile}.getName(): esk_unload_script({@static-sk-loader},{_enabledfile},{_disabledfile}, {_s}) else: send "{@prefix} &c&l! &fThis skript &e%{_disabledfile}.getPath()%&f is already &cdisabled" to {_s} esk_debug_loader(UNLOAD, {_enabledfile}, {_disabledfile}, {_s}) if {@debug} = true if {_STATUS} = RELOAD: #* #* @var {_disabledfile} representing the disabled file #* @var {_enabledfile} representing the new enabled / loaded file #* set {_enabledfile} to {_f} set {_disabledfile} to new File(join {_f}.getParent(), "/", PREFIX-DISABLED,{_f}.getName()) if esk_parser({_disabledfile}, {_enabledfile}, {_s}, RELOAD) = true: send "{@prefix} &a&l* &fReloaded skript &e%{_enabledfile}.getName()%&f was successfully enabled" to {_s} if {_TYPE} = FOLDER: if {_STATUS} = LOAD: #* #* @var {_disabledfile} representing the disabled file #* @var {_enabledfile} representing the new enabled / loaded file #* loop ...new File(expr-1).listFiles(): if loop-value.getName().matches(".*.*\.sk$"): if loop-value.getName() start with PREFIX-DISABLED: set {_disabledfile} to loop-value set {_enabledfile} to new File(join loop-value.getParent(), "/", loop-value.getName().replaceAll(PREFIX-DISABLED, "")) esk_parser({_disabledfile}, {_enabledfile}, {_s}) = true: send "{@prefix} &a&l* &fSkript &e%{_enabledfile}.getName()%&f was &asuccessfully enabled" to {_s} else: send "{@prefix} &c&l! &fThis skript &e%loop-value.getPath()%&f is already enabled" to {_s} if {_STATUS} = UNLOAD: #* #* @var {_disabledfile} representing the disabled file #* @var {_enabledfile} representing the new enabled / loaded file #* loop ...new File(expr-1).listFiles(): if loop-value.getName().matches(".*.*\.sk$"): if loop-value.getName() doesn't start with PREFIX-DISABLED: set {_enabledfile} to loop-value set {_disabledfile} to new File(join loop-value.getParent(), "/", PREFIX-DISABLED, loop-value.getName()) esk_unload_script({@static-sk-loader},{_enabledfile},{_disabledfile}, {_s}) else: send "{@prefix} &c&l! &fThis skript &e%loop-value.getPath()%&f is already &cdisabled" to {_s} if {_STATUS} = RELOAD: #* #* @var {_disabledfile} representing the disabled file #* @var {_enabledfile} representing the new enabled / loaded file #* set {-un} to true loop ...new File(expr-1).listFiles(): if loop-value.getName().matches(".*.*\.sk$"): if loop-value.getName() doesn't start with PREFIX-DISABLED: set {-enabledfile} to loop-value set {_disabledfile} to new File(join loop-value.getParent(), "/", PREFIX-DISABLED, loop-value.getName()) if esk_parser({_disabledfile}, {-enabledfile}, {_s}, RELOAD) = false: set {-un} to false if {-un} = true: send "{@prefix} &a&l* &fAll Skripts in the folder &e%{-enabledfile}.getParent()%&f was &asuccessfully reloaded" to {_s} else: send "{@prefix} &a&l* &fAll Skripts in the folder &e%{-enabledfile}.getParent()%&f wasn't &csuccessfully reloaded" to {_s} send last java exception to {_s}