Modscraper Modscraper Minecraft
Krysztal's Language Scala logo

Krysztal's Language Scala

Mod

A fork of fabric-language-scala, but support the newest version of Scala3

Type

Mod

Modrinth Downloads

4,008

Modrinth ID

Ptd0Ha1s

Last Updated

Apr 12, 2026

Description

Krysztal's fork of fabric-language-scala

Modrinth Version

中文简体

This is a fork of fabric-language-scala, support the newest Scala3 version.

Why fork?

The number of people who use Scala is very small, but the power of Scala's expressiveness makes the language practically perfect for developing mods.

The original fabric-language-scala was unmaintained and the maintainers couldn't spare any more effort to maintain it, so it slowly became unmaintained and non-functional.

Support for Scala3 is, if anything, almost non-existent.

So I decided to fork it and maintain it myself and implement it to be compatible with the original fabric-language-scala,named krysztal-language-scala.

NOTE

  • This language adapter will synchronize content upstream as much as possible and will ensure availability as much as possible.
  • If you are DEVELOPER, please reading FOR_DEVELOPER, and remind your user which Scala3 version you used
    • I suggested you should using the newest version as possible
  • If you are USER, please reading FOR_USER

How to use?

Add dependence

Add those lines to your project's build.gradle

plugins { ... id 'scala' // Add `scala` plugin for gradle ... } repositories { ... maven { url "https://maven.krysztal.dev/releases" } ... } dependencies { ... modImplementation "dev.krysztal:krysztal-language-scala:${project.kls_version}+scala.${project.scala_version}" ... }

Usage: class

Suppose your entry name is ExampleEntry.scala

import net.fabricmc.api.ModInitializer; class ExampleEntry extends ModInitializer { lazy val logger = LoggerFactory.getLogger("KMMO") override def onInitialize(): Unit = { logger.info("Hi") } }

And in fabric.mod.json

... "entrypoints": { "main": [ "dev.example.ExampleEntry" ], }, ...

But thanks to Scala's excellent interoperability with Java, we can use this library simply as a Java entry point :)

Usage: object

Suppose your entry name is ExampleEntry.scala

import net.fabricmc.api.ModInitializer; object ExampleEntry extends ModInitializer { lazy val logger = LoggerFactory.getLogger("KMMO") override def onInitialize(): Unit = { logger.info("Hi") } }

And in fabric.mod.json

... "entrypoints": { "main": [ { "adapter": "scala", "value": "dev.example.ExampleEntry" } ], }, ...

Known issues

unknown invokedynamic bsm: scala/runtime*

This issues caused by scala's class loading mechanism.

It won't affect almost anything. Ignore it.

Compatibility

Mod Loaders

Fabric

Game Versions

1.17 1.17.1-pre1 1.17.1-pre2 1.17.1-pre3 1.17.1-rc1 1.17.1-rc2 1.17.1 21w37a 21w38a 21w39a +270 more

Similar Mods

Included in Modpacks

External Resources