For Mod Developers

Developer Setup

Learn how to add Shogi to your project.

What is Shogi?

Shogi is a rule-based effect evaluation system for Minecraft mods.

It lets your mod expose named properties and then resolve them against runtime context instead of supporting only static configurations. That means values can depend on things like the player, dimension, distance, item state, or any custom context your integration provides.

For most integrations, you only need the embeddable shogi-api: your mod exposes hooks, players configure rules, and your mod can still fall back to default behavior when Shogi is not installed. If you need advanced runtime features such as classes from shogi-common or .networked() values, you will also depend on Shogi itself as a regular mod dependency.

Prerequisites

In order to use Shogi, you should have

  • an understanding of Java and Minecraft Modding
  • an IDE like IntelliJ IDEA
  • the ability to clone a Git repository

Adding Shogi to your Project

Add Shogi's API as an included library so that it will be embedded inside of your mod's jar. That way, Shogi support will be optional and your mod will fall back to default value providers if players do not have Shogi installed. Note that the artifact is called shogi-api and works across all loaders.

If you want to use advanced Shogi features, such as classes from shogi-common or .networked() values, you will need to also add a dependency on shogi-common and its loader-specific variants - these artifacts should not be included in your mod's jar and instead be declared as a regular mod dependency.

common/build.gradle
repositories {
    maven {
        url = 'https://maven.twelveiterations.com/repository/maven-public/'
        content {
            includeGroup 'net.blay09.mods'
        }
    }
}

dependencies {
    implementation("net.blay09.mods:shogi-api:${shogi_version}") {
        changing = shogi_version.endsWith('SNAPSHOT')
    }
}
fabric/build.gradle
repositories {
    maven {
        url = 'https://maven.twelveiterations.com/repository/maven-public/'
        content {
            includeGroup 'net.blay09.mods'
        }
    }
}

dependencies {
    include("net.blay09.mods:shogi-api:${shogi_version}") {
        changing = shogi_version.contains('SNAPSHOT')
    }
}
neoforge/build.gradle
repositories {
    maven {
        url = 'https://maven.twelveiterations.com/repository/maven-public/'
        content {
            includeGroup 'net.blay09.mods'
        }
    }
}

dependencies {
    implementation("net.blay09.mods:shogi-api:${shogi_version}") {
        changing = shogi_version.contains('SNAPSHOT')
    }
}
forge/build.gradle
repositories {
    maven {
        url = 'https://maven.twelveiterations.com/repository/maven-public/'
        content {
            includeGroup 'net.blay09.mods'
        }
    }
}

dependencies {
    implementation("net.blay09.mods:shogi-api:${shogi_version}") {
        changing = shogi_version.contains('SNAPSHOT')
    }
}

I'm lost - what should I do?

If you can't find the answer you're looking for in these pages, try looking at Blay's various visible source mods, or ask a question in the Balm Developers Discord.