SnLib v1.23.0
Placeholders on an event thread.
SnPapi.applyHere(viewer, text)resolves PAPI on the calling thread, the documented escape hatch for text assembled inside an event (above allAsyncChatEvent) that has no later main-thread point to resolve at. Fail-open;applyandapplyOnMainremain the answer everywhere else.SnLang.get(key, viewer, Ph...)/getList(key, viewer, Ph...)render a fragment FOR a viewer, for text spliced into something else rather than sent.
Strictly additive, japicmp gate passes. SnApi.LEVEL 14 -> 15.