mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2025-11-04 23:53:01 +00:00
The server side changes are pretty straightforward: - Level.isClientSide is now a method. - NeoForge has switched to a Fabric-style item/fluid storage API. This is a fairly simple migration, as we've got support for this already! This does mean that we need a wrapper type here too. We really should support generics in the generic method system :/. Unfortunately, this is another rough update on the rendering front. The main change here is that BE renderers now a) have separate extract/render phases and b) "draw" to a scene graph (SubmitNodeCollector) rather than directly. - Update lectern models to use the model/layer system, rather than constructing model parts directly. We don't *need* to do this, but makes this a bit more consistent with vanilla. - Remove TurtleUpgradeModel.renderForLevel. I could not figure out a way to make this look nice with the separate extract/render phases. This is made worse by the fact that CC:T doesn't actually use this anywhere, so not sure what we actually need! Something to bring back in the future, if other people need it. - The turtle/monitor F3 info now uses vanilla's debug renderer system. We could maybe make the monitor one use a gizmo in future updates, so it renders coordinates in-world instead. Not sure. Unfortunately, some bits are entirely broken right now: - Breaking progress for turtles. There's no way to do custom breaking progress, so we just render this as normal custom geometry, which has all sorts of depth-buffer issues. - Monitors do not use a VBO (again, no way to do this), and render every frame. This means monitors are pretty slow to render right now (one or two is fine, but monitor arrays are unusable). Will need to submit PRs to the various mod loaders for this.
228 lines
7.1 KiB
Plaintext
228 lines
7.1 KiB
Plaintext
// SPDX-FileCopyrightText: 2022 The CC: Tweaked Developers
|
|
//
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
import cc.tweaked.gradle.CCTweakedExtension
|
|
import cc.tweaked.gradle.CCTweakedPlugin
|
|
import com.diffplug.gradle.spotless.FormatExtension
|
|
import com.diffplug.spotless.LineEnding
|
|
import net.ltgt.gradle.errorprone.CheckSeverity
|
|
import net.ltgt.gradle.errorprone.errorprone
|
|
import java.nio.charset.StandardCharsets
|
|
|
|
plugins {
|
|
`java-library`
|
|
idea
|
|
jacoco
|
|
checkstyle
|
|
id("com.diffplug.spotless")
|
|
id("net.ltgt.errorprone")
|
|
// Required for cross-project dependencies in Fabric
|
|
id("net.fabricmc.fabric-loom-companion")
|
|
}
|
|
|
|
val modVersion: String by extra
|
|
val mcVersion: String by extra
|
|
|
|
group = "cc.tweaked"
|
|
version = modVersion
|
|
|
|
base.archivesName.convention("cc-tweaked-$mcVersion-${project.name}")
|
|
|
|
java {
|
|
toolchain { languageVersion = CCTweakedPlugin.JDK_VERSION }
|
|
sourceCompatibility = CCTweakedPlugin.JAVA_VERSION
|
|
targetCompatibility = CCTweakedPlugin.JAVA_VERSION
|
|
|
|
withSourcesJar()
|
|
}
|
|
|
|
repositories {
|
|
mavenCentral()
|
|
|
|
val mainMaven = maven("https://maven.squiddev.cc/mirror") {
|
|
name = "SquidDev"
|
|
}
|
|
|
|
exclusiveContent {
|
|
forRepositories(mainMaven)
|
|
filter {
|
|
includeGroup("cc.tweaked")
|
|
// Things we mirror
|
|
includeGroup("com.simibubi.create")
|
|
includeGroup("net.commoble.morered")
|
|
includeGroup("dev.architectury")
|
|
includeGroup("maven.modrinth")
|
|
includeGroup("me.shedaniel.cloth")
|
|
includeGroup("me.shedaniel")
|
|
includeGroup("mezz.jei")
|
|
includeGroup("org.teavm")
|
|
includeModule("com.terraformersmc", "modmenu")
|
|
}
|
|
}
|
|
}
|
|
|
|
dependencies {
|
|
val libs = project.extensions.getByType<VersionCatalogsExtension>().named("libs")
|
|
checkstyle(libs.findLibrary("checkstyle").get())
|
|
|
|
constraints {
|
|
checkstyle("org.codehaus.plexus:plexus-container-default:2.1.1") {
|
|
because("2.1.0 depends on deprecated Google collections module")
|
|
}
|
|
}
|
|
|
|
errorprone(libs.findLibrary("errorProne-core").get())
|
|
errorprone(libs.findLibrary("nullAway").get())
|
|
}
|
|
|
|
// Configure default JavaCompile tasks with our arguments.
|
|
sourceSets.all {
|
|
tasks.named(compileJavaTaskName, JavaCompile::class.java) {
|
|
// Explicitly set release, as that limits the APIs we can use to the right version of Java.
|
|
options.release = CCTweakedPlugin.JAVA_TARGET.asInt()
|
|
|
|
options.compilerArgs.addAll(
|
|
listOf(
|
|
"-Xlint",
|
|
// Processing just gives us "No processor claimed any of these annotations", so skip that!
|
|
"-Xlint:-processing",
|
|
// We violate this pattern too often for it to be a helpful warning. Something to improve one day!
|
|
"-Xlint:-this-escape",
|
|
),
|
|
)
|
|
|
|
options.errorprone {
|
|
check("InvalidBlockTag", CheckSeverity.OFF) // Broken by @cc.xyz
|
|
check("InlineMeSuggester", CheckSeverity.OFF) // Minecraft uses @Deprecated liberally
|
|
// Too many false positives right now. Maybe we need an indirection for it later on.
|
|
check("AssignmentExpression", CheckSeverity.OFF) // I'm a bad person.
|
|
check("ReferenceEquality", CheckSeverity.OFF)
|
|
check("EnumOrdinal", CheckSeverity.OFF) // For now. We could replace most of these with EnumMap.
|
|
check("OperatorPrecedence", CheckSeverity.OFF) // For now.
|
|
check("NonOverridingEquals", CheckSeverity.OFF) // Peripheral.equals makes this hard to avoid
|
|
check("FutureReturnValueIgnored", CheckSeverity.OFF) // Too many false positives with Netty
|
|
check("InvalidInlineTag", CheckSeverity.OFF) // Triggered by @snippet. Can be removed on Java 21.
|
|
option("UnusedMethod:ExemptingMethodAnnotations", "dan200.computercraft.api.lua.LuaFunction")
|
|
|
|
check("NullAway", CheckSeverity.ERROR)
|
|
option(
|
|
"NullAway:AnnotatedPackages",
|
|
listOf("dan200.computercraft", "cc.tweaked", "net.fabricmc.fabric.api").joinToString(","),
|
|
)
|
|
option("NullAway:ExcludedFieldAnnotations", listOf("org.spongepowered.asm.mixin.Shadow").joinToString(","))
|
|
option("NullAway:CastToNonNullMethod", "dan200.computercraft.core.util.Nullability.assertNonNull")
|
|
option("NullAway:CheckOptionalEmptiness")
|
|
option("NullAway:AcknowledgeRestrictiveAnnotations")
|
|
|
|
excludedPaths = ".*/jmh_generated/.*"
|
|
}
|
|
}
|
|
}
|
|
|
|
tasks.compileTestJava {
|
|
options.errorprone {
|
|
check("NullAway", CheckSeverity.OFF)
|
|
}
|
|
}
|
|
|
|
tasks.withType(JavaCompile::class.java).configureEach {
|
|
options.encoding = "UTF-8"
|
|
}
|
|
|
|
tasks.processResources {
|
|
exclude("**/*.license")
|
|
exclude(".cache")
|
|
}
|
|
|
|
tasks.withType(AbstractArchiveTask::class.java).configureEach {
|
|
isPreserveFileTimestamps = false
|
|
isReproducibleFileOrder = true
|
|
filePermissions {}
|
|
dirPermissions {}
|
|
}
|
|
|
|
tasks.jar {
|
|
manifest {
|
|
attributes(
|
|
"Specification-Title" to "computercraft",
|
|
"Specification-Vendor" to "SquidDev",
|
|
"Specification-Version" to "1",
|
|
"Implementation-Title" to "cctweaked-${project.name}",
|
|
"Implementation-Version" to modVersion,
|
|
"Implementation-Vendor" to "SquidDev",
|
|
)
|
|
}
|
|
}
|
|
|
|
tasks.javadoc {
|
|
options {
|
|
val stdOptions = this as StandardJavadocDocletOptions
|
|
stdOptions.addBooleanOption("Xdoclint:all,-missing", true)
|
|
stdOptions.links("https://docs.oracle.com/en/java/javase/21/docs/api/")
|
|
}
|
|
}
|
|
|
|
tasks.test {
|
|
finalizedBy("jacocoTestReport")
|
|
|
|
useJUnitPlatform()
|
|
testLogging {
|
|
events("skipped", "failed")
|
|
}
|
|
}
|
|
|
|
tasks.withType(JacocoReport::class.java).configureEach {
|
|
reports.xml.required = true
|
|
reports.html.required = true
|
|
}
|
|
|
|
project.plugins.withType(CCTweakedPlugin::class.java) {
|
|
// Set up jacoco to read from /all/ our source directories.
|
|
val cct = project.extensions.getByType<CCTweakedExtension>()
|
|
project.tasks.named("jacocoTestReport", JacocoReport::class.java) {
|
|
for (ref in cct.sourceSets.get()) sourceDirectories.from(ref.allSource.sourceDirectories)
|
|
}
|
|
}
|
|
|
|
tasks.register("checkstyle") {
|
|
description = "Run Checkstyle on all sources"
|
|
group = LifecycleBasePlugin.VERIFICATION_GROUP
|
|
dependsOn(tasks.withType(Checkstyle::class.java))
|
|
}
|
|
|
|
spotless {
|
|
encoding = StandardCharsets.UTF_8
|
|
lineEndings = LineEnding.UNIX
|
|
|
|
fun FormatExtension.defaults() {
|
|
endWithNewline()
|
|
trimTrailingWhitespace()
|
|
leadingTabsToSpaces(4)
|
|
}
|
|
|
|
java {
|
|
defaults()
|
|
importOrder("", "javax|java", "\\#")
|
|
removeUnusedImports()
|
|
}
|
|
|
|
kotlinGradle {
|
|
defaults()
|
|
ktlint()
|
|
}
|
|
|
|
kotlin {
|
|
defaults()
|
|
ktlint()
|
|
}
|
|
}
|
|
|
|
idea.module {
|
|
excludeDirs.addAll(project.files("run", "out", "logs").files)
|
|
|
|
// Force Gradle to write to inherit the output directory from the parent, instead of writing to out/xxx/classes.
|
|
// This is required for Loom, and we patch Forge's run configurations to work there.
|
|
inheritOutputDirs = true
|
|
}
|