Branch 1.20
This mod adds Scala library to Minecraft 1.20 with Forge. NO COMPATIBILITY WITH 1.19 version of SLP.
-
For Player - Download Jar file from Curse Forge or Modrinth and move the file to your
modsfolder. This mod will not appear in mods list. -
For Developer
See this repository for example.In your
build.gradle, add below code in the top-level.repositories { maven { name = "kotori316" url = uri("https://maven.kotori316.com") content { includeModule("com.kotori316", "ScalableCatsForce".toLowerCase()) includeModule("org.typelevel", "cats-core_3") includeModule("org.typelevel", "cats-kernel_3") includeModule("org.typelevel", "cats-free_3") } } } dependencies { // Change forge and minecraft version. minecraft 'net.minecraftforge:forge:1.20.1-47.1.43' compileOnly(group: 'org.scala-lang', name: 'scala-library', version: '3.3.0') // Add if you need this library. I use a modified version of Cats to avoid some module errors. compileOnly(group: 'org.typelevel', name: 'cats-core_3', version: '2.9.2-kotori') // The language loader. You can put the jar to the mods dir instead of declaring in `build.gradle.kts`. // This file is needed as the scala library will not be loaded in dev environment due to change of classpath by Forge. runtimeOnly(group: "com.kotori316", name: "ScalableCatsForce".toLowerCase(), version: "3.3.0-build-2", classifier: "with-library") { transitive(false) } }- If the Minecraft client doesn't launch with an exception to modules, change scala dependency from "implementation" to "compileOnly" and add slp mod in mods directory.
- Change library version if needed.
- See detail pages in CurseForge or Modrinth to get which library version is included in the Jar file.
- From 1.20 version, SLP includes Scala 3
- May not have binary compatibility with jars build with Scala2.
- Files build with Scala2 may throw error if you use "Macthing on case classes" in your code.
- This is due to internal change in Scala3.
- Though SLP jar contains all classes from Scala2, this kind of error happens.
- Compile with Scala3 will not cause these runtime errors.
- May not have binary compatibility with jars build with Scala2.
In this section, I note some points you should care.
- Avoid use of
Mod.EventBusSubscriberin Java code. This will cause exception in "compileScala" task.
- Use in Scala code will not throw exception.
- If you got compile error "ambiguous reference to overloaded definition", specify the return type.
- For example,
val offsetPos = pos.relative(direction)will cause this error becauserelativeis declared both inBlockPosandVec3i, and the return types aren't same. So, the compiler can't determine which method to call. To resolve this issue, specify the return type as follows.val offsetPos: BlockPos = pos.relative(direction)
- Scala - GitHub - is licenced under the Apache License, Version 2.0.
- Cats - GitHub - is licenced under
the Licence.
- SLP uses modified version of Cats to avoid module error.