/
Download button on the bottom of the page or check main page.
ClassNotFoundException / AbstractMethodError in
EngineChat$PaperChatListener): multiple layers of shade-related breakage were
present and are fully resolved:
net.kyori.adventure.* string literals in the bytecode
constant pool to com.pvpindex.lib.adventure.*. At runtime Paper's classloader
cannot find that relocated namespace, causing ClassNotFoundException. String
literals are now constructed at runtime via String.valueOf concatenation so shade
never sees the full class name in the constant pool.ChatRenderer
directly; LambdaMetafactory cannot reliably link it against Paper 26.x runtime
classes. The renderer now uses ChatRenderer.viewerUnaware() and a Proxy-based
InvocationHandler that implements only the 3-parameter ViewerUnaware.render
method, eliminating cross-version descriptor mismatches.EngineChat now contains zero net.kyori.adventure imports; all adventure
interactions go through java.lang.reflect against classes loaded from Paper's own
classloader, so shade has nothing to rewrite in type descriptors either.PaperChatListener that installs a ChatRenderer.ViewerUnaware proxy; Spigot/Bukkit
servers use a LegacyChatListener with AsyncPlayerChatEvent.setFormat. Reflection
handles and the cached MiniMessage instance are resolved once at listener construction
time to avoid per-message overhead./f create, /f join, and any other
command that saves a model): H2 2.x does not implement the VALUES(col) function
reference inside ON DUPLICATE KEY UPDATE that Jaloquent generates, causing a
JdbcSQLSyntaxErrorException (error code 42122) on every save against an H2
backend. Upsert SQL is now transparently rewritten to MERGE INTO … KEY(id) before
execution, which H2 fully supports. MySQL/MariaDB backends are unaffected.factions.chat.show-tag: false in
config.yml). Operators must opt in by setting show-tag: true. Previously it was
enabled for all players by default.
Modern Factions refactor, old-school factions but with modern QOL features