From 031d4ade2c6459d91c0440daaec60d9af24c74c8 Mon Sep 17 00:00:00 2001 From: Brian Neumann-Fopiano Date: Mon, 7 Sep 2026 23:28:48 -0400 Subject: [PATCH] Wire Iris jar shrink - Wire the ProGuard shrink pass into the Bukkit artifact with the core, Bukkit plugin and NMS compile classpaths as library jars - Map the fourteen SlimJar relocations so runtime-downloaded libraries resolve under their relocated names - Add packaging/shrink.pro keeping the public API, Iris events, platform SPI, VolmLib integration contract and Bukkit event handler lists - Lower maximumBukkitArtifactBytes to 7,600,000 so verifyBukkitArtifact enforces the same budget as the packaging gate - Build VolmitSender.name() from the sender name instead of the relocated CommandSender.name() reference, which cannot resolve on Paper 26.2 --- build.gradle | 22 ++++++++++++++++++- .../iris/util/common/plugin/VolmitSender.java | 2 +- packaging/shrink.pro | 10 +++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 packaging/shrink.pro diff --git a/build.gradle b/build.gradle index 453114eb6..a8a1303d2 100644 --- a/build.gradle +++ b/build.gradle @@ -84,7 +84,7 @@ String fabricArtifactName = irisArtifactName('Fabric', "${minecraftVersion}+${lo String forgeArtifactName = irisArtifactName('Forge', "${minecraftVersion}+${loaderDisplayVersion(forgeVersion)}") String neoForgeArtifactName = irisArtifactName('NeoForge', "${minecraftVersion}+${loaderDisplayVersion(neoForgeVersion)}") File pluginOutDirectory = layout.projectDirectory.dir('../PluginOuts').asFile -long maximumBukkitArtifactBytes = 8_000_000L +long maximumBukkitArtifactBytes = 7_600_000L apply plugin: ApiGenerator // Where `buildAll` drops the per-platform jars for a local test server. Use the approved sibling @@ -746,6 +746,26 @@ pluginPackaging { releaseCompression = providers.gradleProperty('compactRelease').map { it.toBoolean() }.getOrElse(false) prunePrefixes = ['art/arcane/volmlib/'] keepPrefixes = ['art/arcane/volmlib/util/matter/slices/'] + shrinkRules = [file('packaging/shrink.pro')] + shrinkLibraries.from(provider { project(':core').configurations.compileClasspath }) + shrinkLibraries.from(provider { project(':adapters:bukkit:plugin').configurations.compileClasspath }) + shrinkLibraries.from(provider { project(':adapters:bukkit:nms:v26_2_R1').configurations.compileClasspath }) + shrinkRelocations = [ + 'com.dfsek.paralithic': 'art.arcane.iris.util.paralithic', + 'com.google.gson': 'art.arcane.iris.util.gson', + 'com.googlecode.concurrentlinkedhashmap': 'art.arcane.iris.util.lru', + 'io.papermc.lib': 'art.arcane.iris.util.paper', + 'net.kyori': 'art.arcane.iris.util.kyori', + 'org.bstats': 'art.arcane.iris.util.metrics', + 'org.apache.maven': 'art.arcane.iris.util.maven', + 'org.codehaus.plexus': 'art.arcane.iris.util.plexus', + 'org.eclipse.sisu': 'art.arcane.iris.util.sisu', + 'org.eclipse.aether': 'art.arcane.iris.util.aether', + 'com.google.inject': 'art.arcane.iris.util.guice', + 'org.dom4j': 'art.arcane.iris.util.dom4j', + 'org.jaxen': 'art.arcane.iris.util.jaxen', + 'com.github.benmanes.caffeine': 'art.arcane.iris.util.caffeine' + ] } } } diff --git a/core/src/main/java/art/arcane/iris/util/common/plugin/VolmitSender.java b/core/src/main/java/art/arcane/iris/util/common/plugin/VolmitSender.java index 6a2678351..3a9b31033 100644 --- a/core/src/main/java/art/arcane/iris/util/common/plugin/VolmitSender.java +++ b/core/src/main/java/art/arcane/iris/util/common/plugin/VolmitSender.java @@ -359,7 +359,7 @@ public class VolmitSender implements CommandSender { @NotNull @Override public Component name() { - return s.name(); + return Component.text(getName()); } @Override diff --git a/packaging/shrink.pro b/packaging/shrink.pro new file mode 100644 index 000000000..5f381fdf8 --- /dev/null +++ b/packaging/shrink.pro @@ -0,0 +1,10 @@ +-keep class art.arcane.iris.api.** { *; } +-keep class art.arcane.iris.core.events.** { *; } +-keep class art.arcane.iris.spi.** { *; } +-keep class art.arcane.volmlib.integration.** { *; } +-keep class * implements art.arcane.volmlib.integration.IntegrationServiceContract { *; } +-keep class * implements art.arcane.volmlib.integration.ReloadAware { *; } +-keepclassmembers class * extends org.bukkit.event.Event { + public static org.bukkit.event.HandlerList getHandlerList(); + public org.bukkit.event.HandlerList getHandlers(); +}