Package com.ultikits.ultitools.utils
package com.ultikits.ultitools.utils
-
ClassDescriptionUtility class for annotation processing operations.Simple rate limiter for UltiCloud API calls.Basic type determination utility class.Bean copy utility class.Utility class for ensuring proper class loader usage throughout the plugin.GEN-07's observe-only classload filter audit (D-14): reproduces the exact matching semantics of the three name-based filter layers
SecurityPolicy.isSafeClassName(String)used to enforce before D-12/D-13, and records what each removed layer WOULD have refused -- it refuses nothing itself.The four removed filter layers, in the exact orderisSafeClassNameevaluated them.The three command-facing entry points behind/ulticloud login|logout|status.An immutable view ofCloudAuthManager.status()'s result.The single owner of one UltiCloud login's entire lifetime.Turns a module'sCodeSource.getLocation()URL into theFileit names -- the one resolver the language subsystem uses, so language discovery (Localized.supported()), the dictionary reader and resource extraction inUltiToolsPlugincan never disagree about where a module's JAR (or exploded class directory) is (#676 case 26).Common utility class providing general-purpose helper methods.Utility class for configuration editor operations.The single owner ofdata.json. Any other class that opens a reader or writer on that file is a defect (D-12) -- route the operation throughCredentialStore.read(),CredentialStore.write(Map)orCredentialStore.update(UnaryOperator)instead.The outcome of aCredentialStore.read()call.Utility class for handling plugin dependency and package scanning operations.Utility class for economy operations using Vault.One frame's match outcome: theEconomyUtils.MatchKind, plus the resolved module name when (and only when)kind == RESOLVED.The three possible outcomes of matching one stack frame againstprefixToModule(Codex P2, PR #463, round 3): a barenullreturn collapsed "this frame belongs to no registered module" and "this frame's closest root is claimed by two or more DIFFERENT modules" into the same value, and the last two review rounds both found a defect that traces straight back to that conflation — aNONEframe must let the per-frame walk continue outward (a real non-match, no evidence either way), while anAMBIGUOUSframe must terminate the walk immediately (real evidence that a module frame exists here, but WHICH module cannot be determined) — seeEconomyUtils.attributeModule(StackTraceElement[], Map)'s own javadoc for why continuing past an ambiguous frame is itself the bug.File operation utility class.Resolves the framework's own operator-, player-, panel- and e-mail-facing text through the language catalogue (lang/en.json,lang/zh.json), so it follows the server'slanguagesetting.Utility class for HTTP file download operations.Progress callback interface for download operations.Utility class for HTTP request operations.A fluent builder for creating ItemStacks with various properties.Utility class for ItemStack serialization and deserialization.JSON path utility class - replaces hutool-json's putByPath/getByPath functionalityMessage utils.An extremely simple JSON builder.A super simple representation of a JSON object.The files of the module subsystem and the transactions that change them: which folder modules load from, and how/upm updatereplaces a module's JAR (#505, #513).Where the latest version of a module, and its download, come from.Named points of a transaction; a test crashes at one to reproduce that window.How a JAR is downloaded.A file a destructive step touches, and the recorded hashes it may hold; none means it must be absent.How files are moved and deleted; a test substitutes a failing one.File work that may fail with anIOException.The catalogue keys of every line this class produces.A step found a file the transaction cannot identify; the record is held for the operator.Thrown byModuleFileTransactions.Catalogue.latestVersion(java.lang.String)when the catalogue answers that versions of the module exist but none is compatible with this framework's API level (HTTP 409 from the level-filteredlatest; plan 18-40), so staging can say so instead of "no download".The persisted record of one transaction.WhatModuleFileTransactions.recordedIdentity(com.ultikits.ultitools.utils.ModuleFileTransactions.Removal, java.io.File)found: the same file, a different file, or -- with the read error -- a file whose content could not be read to tell.A record whose names would leave their folder, or that this version does not understand.One file aREMOVErecord deletes at the next start, and what it was when recorded.A module an uninstall removed, in every form a transaction can name it by: the identify-strings and runtime names of the instances it unloaded (plus the argument it was given), and the file names of its JARs -- the ones those instances were loaded from, the ones the start-up scan recorded as declaring their main class, and the ones it deleted or recorded for deletion.One line for the start-up log, with its catalogue key and arguments.WhatModuleFileTransactions.reserve(com.ultikits.ultitools.utils.ModuleFileTransactions.Record, java.io.File, java.lang.String, java.util.List<com.ultikits.ultitools.abstracts.UltiToolsPlugin>, java.util.function.Function<com.ultikits.ultitools.abstracts.UltiToolsPlugin, java.io.File>)decided: the module and JAR to stage an update for, or the refusal.Which start-up step a rollback is finished from; it decides what the log line says.The outcome.Turns a silently-skipped class from a module's startup scan into a single, named, loud line an operator actually reads (D-19).What the framework and its modules share about official language files (#608).Logs why a framework language file was not replaced; the file stays as it was in every case but one.Utility class for package scanning and class discovery operations.Utility class for plugin initialization and WebSocket communication.A dispatch-table entry pairing a handler with theCapabilitythat must be enabled before it runs (D-10), and with which side records that decision's verdict in theRemoteActionLog(CR-01, 06-REVIEW.md).Which side of a capability-gated dispatch records theRemoteActionLogverdict for the enabled branch (CR-01, 06-REVIEW.md).Utility class for plugin installation and management operations.Raised when the name the operator typed could be more than one loaded module's, so the uninstall changed nothing.What one archive says about which module it holds -- the single reader both identity resolution and entry classification use, so the two cannot drift apart.A catalogue answer whosedatais a string, with its HTTP status kept.What one entry of the modules folder is, relative to the module being uninstalled.The reasons, as catalogue keys (Chinese, with their English values inlang/en.json); a nestedKeysholder likeModuleFileTransactions.Keys.Everything later decisions need about which module this is, resolved once.Raised when a module's own unload threw.What a filesystem probe answered, keeping "unknown" out of "no".What the module loader and the loaded instances say about an uninstall's targets, read before anything is unloaded.The uninstall could not delete these JARs now -- the running server holds them open, or the folder is not writable -- and has recorded them, so the next start deletes them before any module loads (#518).The uninstall could not delete these JARs now and could not record their deletion for the next start either (#518).The entries an uninstall could not identify, carried on whatever failure leaves the method.Raised when the uninstall refuses to act because its outcome would be undefined: two possible targets, or a target whose JAR another running module shares.What an uninstall did, and what it could not determine.Forwards the records of a dedicated diagnostics logger to the framework's own plugin logger, so they reach the server console at their real level and in the server's normal log format (#557).Reads a module's ownplugin.ymlstraight from its class's code source, given only a bareClass<?>- before anyUltiToolsPlugininstance exists (D-12).The subset of a module'splugin.ymlthis framework needs: its declaredname:andmain:(both nullable - absent when the archive has none or reading failed), itsloadAfter:list, and its Bukkit-levelsoftdepend:/depend:lists (all three never null; empty when absent or reading failed), and its declaredversion:andapi-version:as text (both nullable, like name and main), which the load-failure refusal quotes to identify the module.Shared implementation of the "replace a file in place, preserving what the operator set up" operation used by everycreateTempFile+ atomic-Files.move(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...)replace-in-place site in this framework.Callbacks aPosixAttributePreserver.replaceInPlace(java.io.File, byte[], com.ultikits.ultitools.utils.PosixAttributePreserver.ReplaceInPlaceListener)caller supplies so each replace-in-place site can log accurate, resource-specific wording for exactly how the operation was declined or degraded -- this shared operation does not know or care whethertargetis a language catalogue or a provenance sidecar, only the caller does.Reflection utility class.Records the SHA-256 digest of every resource fileUltiToolsPlugin.saveResources(boolean)extracts, so a later boot can distinguish "the operator edited this file" from "an old jar extracted this and nobody has touched it since" (#441, D-05/D-06/D-07).Provides NO runtime constraint on class loading or reflection (GEN-07, D-12, since 6.3.0).SecurityPolicy.isSafeClassName(String)andSecurityPolicy.isSafeParameterType(Class)now unconditionally returntrue;SecurityPolicy.addTrustedPackage(String)andSecurityPolicy.addDangerousClass(String)are no-ops.Simple HTTP client implementation using HttpURLConnection.The only thing that writes the UltiCloud credential to disk.Performs an authenticated UltiCloud request on a module's behalf, without ever handing the module the server's UltiCloud token.What happened to a request.The result of one call: anUltiCloudRequests.Outcome, and for a completed exchange its status and body.Semantic version comparison utility class.The answer to one catalogue version lookup, as the start-up update check needs it: a version was found, the catalogue confirmed it has nothing to offer, or the lookup failed (the catalogue could not be reached, answered with an error status, or sent a body that could not be read).What the lookup established.Utility class for version checking and comparison operations.Cross-version compatibility utility class using XSeries.