Skip to content

Compatibility

Compatibility rules tell Shine where to step aside when another mod or resource pack provides overlapping visuals. They never enable a disabled feature or change the player's settings. Rules are additive, and a rule targeting a feature group also applies to its descendants.

Known Integrations

ModBehavior
SodiumShine includes Sodium rendering compatibility. Water Reflections require Sodium.
IrisShine disables bloom, full-screen post-processing, and rim light while an Iris shader pack is active.
VulkanModShine declares VulkanMod incompatible, so the two mods cannot be loaded together.

Feature IDs

Rules target stable namespaced IDs such as shine:bloom, shine:grass_blades, and shine:algae_flecks. Group IDs can target a complete branch without listing every child feature.

The complete catalog is bundled in the Shine jar at:

text
assets/shine/api/feature_catalog.json

It contains each feature's display name, category, parents, group status, and aliases. Java integrations can use the constants in com.bloom.api.v2.ShineFeatures.

Compatibility Resources

A mod or resource pack can provide static rules under:

text
assets/<namespace>/shine/compatibility/*.json

These files use the shine-compat-v2 schema and require no Java integration.

json
{
  "schema": "shine-compat-v2",
  "requiredMods": ["example_mod"],
  "featureRules": [
    {
      "id": "own_grass_renderer",
      "feature": "shine:grass_blades",
      "mode": "claim",
      "reason": "Example Mod renders its own grass blades"
    }
  ],
  "contentRules": [
    {
      "id": "exclude_algae_hosts",
      "feature": "shine:algae_flecks",
      "mode": "exclude",
      "selector": {
        "blocks": ["#example_mod:algae_hosts"]
      },
      "reason": "Example Mod supplies algae for these blocks"
    }
  ]
}

featureRules accept suppress and claim. Both prevent Shine from handling the selected feature where the selector matches; claim identifies the external integration as the owner. The default mode is suppress.

contentRules accept include and exclude, with exclude as the default. For Bloom, include applies the player's configured default source strength to matching content. For Rim Light, it adds matching terrain to the mask. Suppression, ownership, and exclusion take priority over inclusion.

Rules accept id, enabled, feature, mode, selector, requiredMods, and reason. enabled defaults to true. requiredMods can appear on the root or an individual rule; every listed mod must be loaded for that declaration to apply.

Selectors

KeyMatches
dimensionsDimension IDs.
biomesBiome IDs and biome tags.
blocksBlock IDs and block tags.
fluidsFluid IDs and fluid tags.
itemsItem IDs and item tags.
entityTypesEntity type IDs and entity tags.
particleTypesParticle type IDs.
texturesTexture IDs.
soundsSound IDs.
renderPhasesSemantic post-processing phases.

Values inside one selector key are ORed. Populated selector keys are ANDed. A value beginning with # is a registry tag. * satisfies its selector key even when no value for that context was supplied. Singular key names are also accepted.

An omitted or empty selector is global. A specific ID or tag requires matching context; if that context is unavailable, the selector does not match.

Local Rules

The in-game rule editor stores global, mod-conditioned rules in:

text
config/shine_compatibility.json
json
{
  "schema": "shine-compatibility-v2",
  "rules": [
    {
      "id": "example_renderer_post",
      "enabled": true,
      "modIds": ["example_renderer"],
      "mode": "claim",
      "features": ["shine:post_processing"],
      "reason": "Example Renderer owns post-processing"
    }
  ]
}

A local rule activates when any listed mod is loaded. A rule without modId or modIds is always active. Local rules support suppress and claim; use compatibility resources or the Java API for contextual selectors.

Open Performance > Compatibility Diagnostics > Edit Rules in Shine Studio to edit, save, and reload local rules.

Diagnostics

Open Performance > Compatibility Diagnostics to inspect the feature tree, configured and effective state, active rules, selectors, ownership, registered contributions, and integration errors. The screen can reload local rules and copy a report.

Malformed resources and failed callbacks are isolated to the affected rule or integration and are listed in diagnostics. Dynamic rules and renderer contributions are documented in Depend on Shine.