1
0
mirror of https://github.com/SquidDev-CC/CC-Tweaked synced 2025-01-27 01:14:46 +00:00

Merge branch 'mc-1.18.x' into mc-1.19.x

This commit is contained in:
Jonathan Coates 2022-06-23 22:41:48 +01:00
commit 92c613a7a2
No known key found for this signature in database
GPG Key ID: B9E431FF07C98D06
13 changed files with 150 additions and 148 deletions

View File

@ -35,7 +35,8 @@ repositories {
} }
dependencies { dependencies {
implementation fg.deobf("org.squiddev:cc-tweaked-${mc_version}:${cct_version}") compileOnly fg.deobf("org.squiddev:cc-tweaked-${mc_version}:${cct_version}:api")
runtimeOnly fg.deobf("org.squiddev:cc-tweaked-${mc_version}:${cct_version}")
} }
``` ```

View File

@ -1,30 +1,19 @@
buildscript {
repositories {
mavenCentral()
maven { url = "https://maven.minecraftforge.net" }
maven { url = 'https://maven.parchmentmc.org' }
}
dependencies {
classpath 'net.minecraftforge.gradle:ForgeGradle:5.1.+'
classpath "org.spongepowered:mixingradle:0.7.+"
classpath 'org.parchmentmc:librarian:1.+'
}
}
plugins { plugins {
id "checkstyle" id "checkstyle"
id "jacoco" id "jacoco"
id "maven-publish" id "maven-publish"
id "com.github.hierynomus.license" version "0.16.1" id "org.cadixdev.licenser" version "0.6.1"
id "com.matthewprenger.cursegradle" version "1.4.0" id "com.matthewprenger.cursegradle" version "1.4.0"
id "com.github.breadmoirai.github-release" version "2.2.12" id "com.github.breadmoirai.github-release" version "2.2.12"
id "org.jetbrains.kotlin.jvm" version "1.6.0" id "org.jetbrains.kotlin.jvm" version "1.7.0"
id "com.modrinth.minotaur" version "1.2.1" id "com.modrinth.minotaur" version "2.+"
id "net.minecraftforge.gradle" version "5.1.+"
id "org.spongepowered.mixin" version "0.7.+"
id "org.parchmentmc.librarian.forgegradle" version "1.+"
id "com.github.johnrengelman.shadow" version "7.1.2"
} }
apply plugin: 'net.minecraftforge.gradle' import org.apache.tools.ant.taskdefs.condition.Os
apply plugin: "org.spongepowered.mixin"
apply plugin: 'org.parchmentmc.librarian.forgegradle'
version = mod_version version = mod_version
@ -39,12 +28,7 @@ java {
withSourcesJar() withSourcesJar()
withJavadocJar() withJavadocJar()
} registerFeature("extraMods") { usingSourceSet(sourceSets.main) }
tasks.withType(JavaExec).configureEach {
javaLauncher = javaToolchains.launcherFor {
languageVersion = javaVersion
}
} }
sourceSets { sourceSets {
@ -64,6 +48,7 @@ minecraft {
property 'forge.logging.markers', 'REGISTRIES' property 'forge.logging.markers', 'REGISTRIES'
property 'forge.logging.console.level', 'debug' property 'forge.logging.console.level', 'debug'
forceExit = false
mods { mods {
computercraft { computercraft {
@ -108,6 +93,8 @@ minecraft {
gameTestServer { gameTestServer {
workingDirectory project.file('test-files/server') workingDirectory project.file('test-files/server')
property("forge.logging.console.level", "info")
mods { mods {
cctest { cctest {
source sourceSets.testMod source sourceSets.testMod
@ -133,6 +120,10 @@ mixin {
add sourceSets.main, 'computercraft.mixins.refmap.json' add sourceSets.main, 'computercraft.mixins.refmap.json'
} }
reobf {
shadowJar {}
}
repositories { repositories {
mavenCentral() mavenCentral()
maven { maven {
@ -142,7 +133,7 @@ repositories {
} }
configurations { configurations {
shade shade { transitive = false }
implementation.extendsFrom shade implementation.extendsFrom shade
cctJavadoc cctJavadoc
@ -158,21 +149,19 @@ dependencies {
minecraft "net.minecraftforge:forge:${mc_version}-${forge_version}" minecraft "net.minecraftforge:forge:${mc_version}-${forge_version}"
annotationProcessor 'org.spongepowered:mixin:0.8.4:processor' annotationProcessor 'org.spongepowered:mixin:0.8.4:processor'
compileOnly fg.deobf("mezz.jei:jei-1.19-forge-api:11.0.0.206") extraModsCompileOnly fg.deobf("mezz.jei:jei-1.19-forge-api:11.0.0.206")
compileOnly fg.deobf("mezz.jei:jei-1.19-common-api:11.0.0.206") extraModsCompileOnly fg.deobf("mezz.jei:jei-1.19-common-api:11.0.0.206")
runtimeOnly fg.deobf("mezz.jei:jei-1.19-forge:11.0.0.206") extraModsRuntimeOnly fg.deobf("mezz.jei:jei-1.19-forge:11.0.0.206")
shade 'org.squiddev:Cobalt:0.5.5' shade 'org.squiddev:Cobalt:0.5.5'
shade('io.netty:netty-codec-http:4.1.76.Final') { shade 'io.netty:netty-codec-http:4.1.76.Final'
exclude group: "*"
}
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
testImplementation 'org.junit.jupiter:junit-jupiter-params:5.7.0' testImplementation 'org.junit.jupiter:junit-jupiter-params:5.7.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
testImplementation 'org.hamcrest:hamcrest:2.2' testImplementation 'org.hamcrest:hamcrest:2.2'
testImplementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.0' testImplementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.0'
testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2' testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.2'
testModImplementation sourceSets.main.output testModImplementation sourceSets.main.output
testModExtra('org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.0') { testModExtra('org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.0') {
@ -184,15 +173,19 @@ dependencies {
// Compile tasks // Compile tasks
compileTestModJava {
dependsOn(compileJava)
}
javadoc { javadoc {
include "dan200/computercraft/api/**/*.java" include "dan200/computercraft/api/**/*.java"
} }
task luaJavadoc(type: Javadoc) { def apiJar = tasks.register("apiJar", Jar.class) {
archiveClassifier.set("api")
from(sourceSets.main.output) {
include "dan200/computercraft/api/**/*"
}
}
assemble.dependsOn(apiJar)
def luaJavadoc = tasks.register("luaJavadoc", Javadoc.class) {
description "Generates documentation for Java-side Lua functions." description "Generates documentation for Java-side Lua functions."
group "documentation" group "documentation"
@ -210,6 +203,9 @@ task luaJavadoc(type: Javadoc) {
} }
jar { jar {
finalizedBy("reobfJar")
archiveClassifier.set("slim")
manifest { manifest {
attributes([ attributes([
"Specification-Title" : "computercraft", "Specification-Title" : "computercraft",
@ -218,20 +214,29 @@ jar {
"Implementation-Title" : "CC: Tweaked", "Implementation-Title" : "CC: Tweaked",
"Implementation-Version" : "${mod_version}", "Implementation-Version" : "${mod_version}",
"Implementation-Vendor" : "SquidDev", "Implementation-Vendor" : "SquidDev",
"Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ") "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"),
,
"MixinConfigs" : "computercraft.mixins.json", "MixinConfigs" : "computercraft.mixins.json",
]) ])
} }
duplicatesStrategy(DuplicatesStrategy.WARN)
from configurations.shade.collect { it.isDirectory() ? it : zipTree(it) }
} }
jar.finalizedBy('reobfJar') shadowJar {
finalizedBy("reobfShadowJar")
[compileJava, compileTestJava, compileTestModJava].forEach { archiveClassifier.set("")
configurations = [project.configurations.shade]
relocate("org.squiddev.cobalt", "cc.tweaked.internal.cobalt")
relocate("io.netty.handler.codec.http", "cc.tweaked.internal.netty")
minimize()
}
assemble.dependsOn("shadowJar")
[
tasks.named("compileJava", JavaCompile.class),
tasks.named("compileTestJava", JavaCompile.class),
tasks.named("compileTestModJava", JavaCompile.class)
].forEach {
it.configure { it.configure {
options.compilerArgs << "-Xlint" << "-Xlint:-processing" options.compilerArgs << "-Xlint" << "-Xlint:-processing"
} }
@ -295,17 +300,11 @@ sourcesJar {
// Web tasks // Web tasks
import com.hierynomus.gradle.license.tasks.LicenseCheck
import com.hierynomus.gradle.license.tasks.LicenseFormat
import com.modrinth.minotaur.TaskModrinthUpload
import org.apache.tools.ant.taskdefs.condition.Os
List<String> mkCommand(String command) { List<String> mkCommand(String command) {
return Os.isFamily(Os.FAMILY_WINDOWS) ? ["cmd", "/c", command] : ["sh", "-c", command] return Os.isFamily(Os.FAMILY_WINDOWS) ? ["cmd", "/c", command] : ["sh", "-c", command]
} }
task rollup(type: Exec) { def rollup = tasks.register("rollup", Exec.class) {
group = "build" group = "build"
description = "Bundles JS into rollup" description = "Bundles JS into rollup"
@ -318,9 +317,10 @@ task rollup(type: Exec) {
commandLine mkCommand('"node_modules/.bin/rollup" --config rollup.config.js') commandLine mkCommand('"node_modules/.bin/rollup" --config rollup.config.js')
} }
task illuaminateDocs(type: Exec, dependsOn: [rollup, luaJavadoc]) { def illuaminateDocs = tasks.register("illuaminateDocs", Exec.class) {
group = "build" group = "documentation"
description = "Generates docs using Illuaminate" description = "Generates docs using Illuaminate"
dependsOn(rollup, luaJavadoc)
inputs.files(fileTree("doc")).withPropertyName("docs") inputs.files(fileTree("doc")).withPropertyName("docs")
inputs.files(fileTree("src/main/resources/data/computercraft/lua/rom")).withPropertyName("lua rom") inputs.files(fileTree("src/main/resources/data/computercraft/lua/rom")).withPropertyName("lua rom")
@ -333,9 +333,10 @@ task illuaminateDocs(type: Exec, dependsOn: [rollup, luaJavadoc]) {
commandLine mkCommand('"bin/illuaminate" doc-gen') commandLine mkCommand('"bin/illuaminate" doc-gen')
} }
task jsxDocs(type: Exec, dependsOn: [illuaminateDocs]) { def jsxDocs = tasks.register("jsxDocs", Exec) {
group = "build" group = "documentation"
description = "Post-processes documentation to statically render some dynamic content." description = "Post-processes documentation to statically render some dynamic content."
dependsOn(illuaminateDocs)
inputs.files(fileTree("src/web")).withPropertyName("sources") inputs.files(fileTree("src/web")).withPropertyName("sources")
inputs.file("src/generated/export/index.json").withPropertyName("export") inputs.file("src/generated/export/index.json").withPropertyName("export")
@ -347,7 +348,11 @@ task jsxDocs(type: Exec, dependsOn: [illuaminateDocs]) {
commandLine mkCommand('"node_modules/.bin/ts-node" --esm src/web/transform.tsx') commandLine mkCommand('"node_modules/.bin/ts-node" --esm src/web/transform.tsx')
} }
task docWebsite(type: Copy, dependsOn: [jsxDocs]) { def docWebsite = tasks.register("docWebsite", Copy.class) {
group = "documentation"
description = "Copy additional assets to the website directory."
dependsOn(jsxDocs)
from('doc') { from('doc') {
include 'logo.png' include 'logo.png'
include 'images/**' include 'images/**'
@ -382,94 +387,75 @@ jacocoTestReport {
} }
} }
check.dependsOn jacocoTestReport test.finalizedBy("jacocoTestReport")
license { license {
mapping("java", "SLASHSTAR_STYLE") header = file('config/license/main.txt')
strictCheck true lineEnding = '\n'
newLine = false
ext.year = Calendar.getInstance().get(Calendar.YEAR) properties {
} year = Calendar.getInstance().get(Calendar.YEAR)
}
[licenseMain, licenseFormatMain].forEach { include("**/*.java") // We could apply to Kotlin, but for now let's not
it.configure { matching("dan200/computercraft/api/**") {
include("**/*.java") header = file('config/license/api.txt')
exclude("dan200/computercraft/api/**")
header file('config/license/main.txt')
} }
} }
[licenseTest, licenseFormatTest, licenseTestMod, licenseFormatTestMod].forEach { check.dependsOn("licenseCheck")
it.configure {
include("**/*.java")
header file('config/license/main.txt')
}
}
gradle.projectsEvaluated { def testServerClassDumpDir = new File(buildDir, "jacocoClassDump/runTestServer")
tasks.withType(LicenseFormat) {
outputs.upToDateWhen { false }
}
}
def testServer = tasks.register("testServer", JavaExec.class) {
task licenseAPI(type: LicenseCheck) group("In-game tests")
task licenseFormatAPI(type: LicenseFormat) description("Runs tests on a temporary Minecraft instance.")
[licenseAPI, licenseFormatAPI].forEach { dependsOn("cleanTestServer")
it.configure { finalizedBy("jacocoTestServerReport")
source = sourceSets.main.java
include("dan200/computercraft/api/**")
header file('config/license/api.txt')
}
}
tasks.register("testServer", JavaExec.class).configure {
it.group('In-game tests')
it.description("Runs tests on a temporary Minecraft instance.")
it.dependsOn("prepareRunGameTestServer", "cleanTestServer", 'compileTestModJava')
// Copy from runTestServer. We do it in this slightly odd way as runTestServer // Copy from runTestServer. We do it in this slightly odd way as runTestServer
// isn't created until the task is configured (which is no good for us). // isn't created until the task is configured (which is no good for us).
JavaExec exec = tasks.getByName("runGameTestServer") JavaExec exec = tasks.getByName("runGameTestServer")
dependsOn(exec.getDependsOn())
exec.copyTo(it) exec.copyTo(it)
it.setClasspath(exec.getClasspath()) setClasspath(exec.getClasspath())
it.mainClass = exec.mainClass mainClass = exec.mainClass
it.setArgs(exec.getArgs()) javaLauncher = exec.javaLauncher
setArgs(exec.getArgs())
// Jacoco and modlauncher don't play well together as the classes loaded in-game don't // Jacoco and modlauncher don't play well together as the classes loaded in-game don't
// match up with those written to disk. We get Jacoco to dump all classes to disk, and // match up with those written to disk. We get Jacoco to dump all classes to disk, and
// use that when generating the report. // use that when generating the report.
def coverageOut = new File(buildDir, "jacocoClassDump/testServer")
jacoco.applyTo(it) jacoco.applyTo(it)
it.jacoco.setIncludes(["dan200.computercraft.*"]) it.jacoco.setIncludes(["dan200.computercraft.*"])
it.jacoco.setClassDumpDir(coverageOut) it.jacoco.setClassDumpDir(testServerClassDumpDir)
it.outputs.dir(coverageOut) outputs.dir(testServerClassDumpDir)
// Older versions of modlauncher don't include a protection domain (and thus no code // Older versions of modlauncher don't include a protection domain (and thus no code
// source). Jacoco skips such classes by default, so we need to explicitly include them. // source). Jacoco skips such classes by default, so we need to explicitly include them.
it.jacoco.setIncludeNoLocationClasses(true) it.jacoco.setIncludeNoLocationClasses(true)
} }
tasks.register("jacocoTestServerReport", JacocoReport.class).configure { tasks.register("jacocoTestServerReport", JacocoReport.class) {
it.group('In-game') group("In-game tests")
it.description("Generate coverage reports for testServer") description("Generate coverage reports for testServer")
it.dependsOn("testServer") dependsOn(testServer)
it.executionData(new File(buildDir, "jacoco/testServer.exec")) executionData(new File(buildDir, "jacoco/testServer.exec"))
it.sourceDirectories.from(sourceSets.main.allJava.srcDirs) sourceDirectories.from(sourceSets.main.allJava.srcDirs)
it.classDirectories.from(new File(buildDir, "jacocoClassDump/testServer")) classDirectories.from(testServerClassDumpDir)
it.reports { reports {
xml.enabled true xml.enabled true
html.enabled true html.enabled true
} }
} }
check.dependsOn("jacocoTestServerReport") check.dependsOn(testServer)
// Upload tasks // Upload tasks
task checkRelease { def checkRelease = tasks.register("checkRelease") {
group "upload" group "upload"
description "Verifies that everything is ready for a release" description "Verifies that everything is ready for a release"
@ -507,7 +493,7 @@ task checkRelease {
if (!ok) throw new IllegalStateException("Could not check release") if (!ok) throw new IllegalStateException("Could not check release")
} }
} }
check.dependsOn checkRelease check.dependsOn(checkRelease)
def isStable = false def isStable = false
@ -517,36 +503,28 @@ curseforge {
id = '282001' id = '282001'
releaseType = isStable ? 'release' : 'alpha' releaseType = isStable ? 'release' : 'alpha'
changelog = "Release notes can be found on the GitHub repository (https://github.com/cc-tweaked/CC-Tweaked/releases/tag/v${mc_version}-${mod_version})." changelog = "Release notes can be found on the GitHub repository (https://github.com/cc-tweaked/CC-Tweaked/releases/tag/v${mc_version}-${mod_version})."
mainArtifact(shadowJar)
addGameVersion "${mc_version}" addGameVersion "${mc_version}"
} }
} }
tasks.register('publishModrinth', TaskModrinthUpload.class).configure { modrinth {
dependsOn('assemble', 'reobfJar')
onlyIf {
project.hasProperty('modrinthApiKey')
}
token = project.hasProperty('modrinthApiKey') ? project.getProperty('modrinthApiKey') : '' token = project.hasProperty('modrinthApiKey') ? project.getProperty('modrinthApiKey') : ''
projectId = 'gu7yAYhd' projectId = 'gu7yAYhd'
versionNumber = "${project.mc_version}-${project.mod_version}" versionNumber = "${project.mc_version}-${project.mod_version}"
uploadFile = jar versionType = isStable ? 'release' : 'alpha'
versionType = isStable ? 'RELEASE' : 'ALPHA' uploadFile = shadowJar
addGameVersion(project.mc_version) gameVersions = [project.mc_version]
changelog = "Release notes can be found on the [GitHub repository](https://github.com/cc-tweaked/CC-Tweaked/releases/tag/v${mc_version}-${mod_version})." changelog = "Release notes can be found on the [GitHub repository](https://github.com/cc-tweaked/CC-Tweaked/releases/tag/v${mc_version}-${mod_version})."
addLoader('forge')
}
tasks.withType(GenerateModuleMetadata) {
// We can't generate metadata as that includes Forge as a dependency.
enabled = false
} }
publishing { publishing {
publications { publications {
maven(MavenPublication) { maven(MavenPublication) {
from components.java from components.java
artifact(apiJar)
fg.component(it)
pom { pom {
name = 'CC: Tweaked' name = 'CC: Tweaked'
@ -565,11 +543,9 @@ publishing {
licenses { licenses {
license { license {
name = 'ComputerCraft Public License, Version 1.0' name = 'ComputerCraft Public License, Version 1.0'
url = 'https://github.com/cc-tweaked/CC-Tweaked/blob/mc-1.15.x/LICENSE' url = 'https://github.com/cc-tweaked/CC-Tweaked/blob/mc-1.16.x/LICENSE'
} }
} }
withXml { asNode().remove(asNode().get("dependencies")) }
} }
} }
} }
@ -617,10 +593,11 @@ githubRelease {
prerelease !isStable prerelease !isStable
} }
def uploadTasks = ["publish", "curseforge", "publishModrinth", "githubRelease"] def uploadTasks = ["publish", "curseforge", "modrinth", "githubRelease"]
uploadTasks.forEach { tasks.getByName(it).dependsOn checkRelease } uploadTasks.forEach { tasks.named(it) { dependsOn(checkRelease) } }
task uploadAll(dependsOn: uploadTasks) { tasks.register("uploadAll") {
group "upload" group = "upload"
description "Uploads to all repositories (Maven, Curse, Modrinth, GitHub release)" description = "Uploads to all repositories (Maven, Curse, Modrinth, GitHub release)"
dependsOn(uploadTasks)
} }

View File

@ -1,7 +1,8 @@
org.gradle.jvmargs=-Xmx3G org.gradle.jvmargs=-Xmx3G
kotlin.stdlib.default.dependency=false
# Mod properties # Mod properties
mod_version=1.100.7 mod_version=1.100.8
# Minecraft properties (update mods.toml when changing) # Minecraft properties (update mods.toml when changing)
mc_version=1.19 mc_version=1.19

Binary file not shown.

View File

@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

View File

@ -1 +0,0 @@
rootProject.name = "cc-tweaked-${mc_version}"

17
settings.gradle.kts Normal file
View File

@ -0,0 +1,17 @@
pluginManagement {
repositories {
gradlePluginPortal()
maven("https://maven.minecraftforge.net")
maven("https://maven.parchmentmc.org")
}
resolutionStrategy {
eachPlugin {
if (requested.id.id == "org.spongepowered.mixin") {
useModule("org.spongepowered:mixingradle:${requested.version}")
}
}
}
}
val mc_version: String by settings
rootProject.name = "cc-tweaked-${mc_version}"

View File

@ -13,8 +13,8 @@ import dan200.computercraft.shared.computer.core.ClientComputerRegistry;
import dan200.computercraft.shared.computer.core.ServerComputerRegistry; import dan200.computercraft.shared.computer.core.ServerComputerRegistry;
import dan200.computercraft.shared.peripheral.monitor.MonitorRenderer; import dan200.computercraft.shared.peripheral.monitor.MonitorRenderer;
import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod;
import org.apache.logging.log4j.LogManager; import org.slf4j.Logger;
import org.apache.logging.log4j.Logger; import org.slf4j.LoggerFactory;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -81,7 +81,7 @@ public final class ComputerCraft
public static final ServerComputerRegistry serverComputerRegistry = new ServerComputerRegistry(); public static final ServerComputerRegistry serverComputerRegistry = new ServerComputerRegistry();
// Logging // Logging
public static final Logger log = LogManager.getLogger( MOD_ID ); public static final Logger log = LoggerFactory.getLogger( MOD_ID );
public ComputerCraft() public ComputerCraft()
{ {

View File

@ -58,7 +58,7 @@ public final class TileDiskDrive extends TileGeneric implements DefaultInventory
} }
Component customName; Component customName;
private LockCode lockCode; private LockCode lockCode = LockCode.NO_LOCK;
private final Map<IComputerAccess, MountInfo> computers = new HashMap<>(); private final Map<IComputerAccess, MountInfo> computers = new HashMap<>();

View File

@ -55,7 +55,7 @@ public final class TilePrinter extends TileGeneric implements DefaultSidedInvent
private static final int[] SIDE_SLOTS = new int[] { 0 }; private static final int[] SIDE_SLOTS = new int[] { 0 };
Component customName; Component customName;
private LockCode lockCode; private LockCode lockCode = LockCode.NO_LOCK;
private final NonNullList<ItemStack> inventory = NonNullList.withSize( SLOTS, ItemStack.EMPTY ); private final NonNullList<ItemStack> inventory = NonNullList.withSize( SLOTS, ItemStack.EMPTY );
private final SidedCaps<IItemHandler> itemHandlerCaps = private final SidedCaps<IItemHandler> itemHandlerCaps =

View File

@ -21,6 +21,6 @@ CC: Tweaked is a fork of ComputerCraft, adding programmable computers, turtles a
[[dependencies.computercraft]] [[dependencies.computercraft]]
modId="forge" modId="forge"
mandatory=true mandatory=true
versionRange="[41.0.6,42)" versionRange="[41.0.38,42)"
ordering="NONE" ordering="NONE"
side="BOTH" side="BOTH"

View File

@ -1,7 +1,13 @@
# New features in CC: Tweaked 1.100.8
Several bug fixes:
* Fix NPE within disk drive and printer code.
# New features in CC: Tweaked 1.100.7 # New features in CC: Tweaked 1.100.7
* Fix failing to launch outside of a dev environment. * Fix failing to launch outside of a dev environment.
# New features in CC: Tweaked 1.100.6 # New features in CC: Tweaked 1.100.6
* Various documentation improvements (MCJack123, FayneAldan). * Various documentation improvements (MCJack123, FayneAldan).

View File

@ -1,5 +1,6 @@
New features in CC: Tweaked 1.100.7 New features in CC: Tweaked 1.100.8
* Fix failing to launch outside of a dev environment. Several bug fixes:
* Fix NPE within disk drive and printer code.
Type "help changelog" to see the full version history. Type "help changelog" to see the full version history.