Checklist

Everything to verify before you release a plugin with ComfiConf support.

AreaCheck
DependencycompileOnly (Gradle) or provided (Maven) dependency on com.comficonf:comficonf-api; nothing shaded.
Soft dependencysoftdepend: [ComfiConf] in plugin.yml, or the paper-plugin.yml dependency with load: BEFORE, required: false, join-classpath: true.
Optional hookThe main class references no API type; the integration is called only after isPluginEnabled("ComfiConf"); a test scans the class files.
Resource idA stable resource id namespace:name.
Schemadescribe() declares every editable field with labels, descriptions and constraints; object lists have an itemKey.
Bukkit YAMLMapped with SectionMapper, with keyedSection for lists stored as sections keyed by id.
read()Derives values and revision from the same bytes, returns secrets as String, and never turns unexpected values (such as byte[] from !!binary) into text.
validate()Checks only cross-field and storage rules, including text the storage cannot hold unchanged (for YAML: control characters, reported by SectionMapper.validate).
apply()Re-checks baseRevision, preserves undeclared data, checks that the new bytes read back to the proposed values, writes with SafeFileWriter, activates the values from the written bytes and returns APPLIED only when they are active.
RestartRestart-only fields use restartRequired() and lead to SAVED_RESTART_REQUIRED.
SecretsSecrets are sensitive() or writeOnly() and never logged.
Shared filesFiles shared between servers are symbolic links, not hard links: SafeFileWriter replaces the file, so other hard-linked names keep the old content.
LifecycleYour reload command calls notifyChanged(); onDisable unregisters.
TestsUnit tests cover read, validate, apply, conflict and the round trip.

Listing your plugin

If your plugin is on Modrinth, add ComfiConf as an optional dependency of your version, so server owners find it. Point owners to the user documentation for installing and pairing the bridge.

Built from f6347d4 on

On this page