diff --git a/build.gradle b/build.gradle index 62f21b9..6ae3e0c 100644 --- a/build.gradle +++ b/build.gradle @@ -1,1166 +1,103 @@ -//version: 1701481996 -/* - * DO NOT CHANGE THIS FILE! - * Also, you may replace this file at any time if there is an update available. - * Please check https://github.com/GregTechCEu/Buildscripts/blob/master/build.gradle for updates. - * You can also run ./gradlew updateBuildScript to update your buildscript. - */ - -import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar -import com.gtnewhorizons.retrofuturagradle.mcp.ReobfuscatedJar -import com.modrinth.minotaur.dependencies.ModDependency -import com.modrinth.minotaur.dependencies.VersionDependency -import org.gradle.api.tasks.testing.logging.TestExceptionFormat -import org.gradle.api.tasks.testing.logging.TestLogEvent -import org.gradle.internal.logging.text.StyledTextOutputFactory -import org.jetbrains.gradle.ext.Gradle - -import static org.gradle.internal.logging.text.StyledTextOutput.Style - -plugins { - id 'java' - id 'java-library' - id 'base' - id 'eclipse' - id 'maven-publish' - id 'org.jetbrains.gradle.plugin.idea-ext' version '1.1.7' - id 'com.gtnewhorizons.retrofuturagradle' version '1.3.25' - id 'net.darkhax.curseforgegradle' version '1.1.17' apply false - id 'com.modrinth.minotaur' version '2.8.6' apply false - id 'com.diffplug.spotless' version '6.13.0' apply false - id 'com.palantir.git-version' version '3.0.0' apply false - id 'com.github.johnrengelman.shadow' version '8.1.1' apply false - id 'org.jetbrains.kotlin.jvm' version '1.8.0' apply false - id 'org.jetbrains.kotlin.kapt' version '1.8.0' apply false - id 'com.google.devtools.ksp' version '1.8.0-1.0.9' apply false -} - -def out = services.get(StyledTextOutputFactory).create('an-output') - - -// Project properties - -// Required properties: we don't know how to handle these being missing gracefully -checkPropertyExists("modName") -checkPropertyExists("modId") -checkPropertyExists("modGroup") -checkPropertyExists("minecraftVersion") // hard-coding this makes it harder to immediately tell what version a mod is in (even though this only really supports 1.12.2) -checkPropertyExists("apiPackage") -checkPropertyExists("accessTransformersFile") -checkPropertyExists("usesMixins") -checkPropertyExists("mixinsPackage") -checkPropertyExists("coreModClass") -checkPropertyExists("containsMixinsAndOrCoreModOnly") - -// Optional properties: we can assume some default behavior if these are missing -propertyDefaultIfUnset("modVersion", "") -propertyDefaultIfUnset("includeMCVersionJar", false) -propertyDefaultIfUnset("autoUpdateBuildScript", false) -propertyDefaultIfUnset("modArchivesBaseName", project.modId) -propertyDefaultIfUnsetWithEnvVar("developmentEnvironmentUserName", "Developer", "DEV_USERNAME") -propertyDefaultIfUnset("generateGradleTokenClass", "") -propertyDefaultIfUnset("gradleTokenModId", "") -propertyDefaultIfUnset("gradleTokenModName", "") -propertyDefaultIfUnset("gradleTokenVersion", "") -propertyDefaultIfUnset("includeWellKnownRepositories", true) -propertyDefaultIfUnset("includeCommonDevEnvMods", true) -propertyDefaultIfUnset("noPublishedSources", false) -propertyDefaultIfUnset("forceEnableMixins", false) -propertyDefaultIfUnsetWithEnvVar("enableCoreModDebug", false, "CORE_MOD_DEBUG") -propertyDefaultIfUnset("generateMixinConfig", true) -propertyDefaultIfUnset("usesShadowedDependencies", false) -propertyDefaultIfUnset("minimizeShadowedDependencies", true) -propertyDefaultIfUnset("relocateShadowedDependencies", true) -propertyDefaultIfUnset("separateRunDirectories", false) -propertyDefaultIfUnsetWithEnvVar("modrinthProjectId", "", "MODRINTH_PROJECT_ID") -propertyDefaultIfUnset("modrinthRelations", "") -propertyDefaultIfUnsetWithEnvVar("curseForgeProjectId", "", "CURSEFORGE_PROJECT_ID") -propertyDefaultIfUnset("curseForgeRelations", "") -propertyDefaultIfUnsetWithEnvVar("releaseType", "release", "RELEASE_TYPE") -propertyDefaultIfUnset("generateDefaultChangelog", false) -propertyDefaultIfUnset("customMavenPublishUrl", "") -propertyDefaultIfUnset("enableModernJavaSyntax", false) -propertyDefaultIfUnset("enableSpotless", false) -propertyDefaultIfUnset("enableJUnit", false) -propertyDefaultIfUnsetWithEnvVar("deploymentDebug", false, "DEPLOYMENT_DEBUG") - - -// Project property assertions - -final String javaSourceDir = 'src/main/java/' -final String scalaSourceDir = 'src/main/scala/' -final String kotlinSourceDir = 'src/main/kotlin/' - -final String modGroupPath = modGroup.toString().replace('.' as char, '/' as char) -final String apiPackagePath = apiPackage.toString().replace('.' as char, '/' as char) - -String targetPackageJava = javaSourceDir + modGroupPath -String targetPackageScala = scalaSourceDir + modGroupPath -String targetPackageKotlin = kotlinSourceDir + modGroupPath - -if (!getFile(targetPackageJava).exists() && !getFile(targetPackageScala).exists() && !getFile(targetPackageKotlin).exists()) { - throw new GradleException("Could not resolve \"modGroup\"! Could not find ${targetPackageJava} or ${targetPackageScala} or ${targetPackageKotlin}") -} - -if (apiPackage) { - targetPackageJava = javaSourceDir + modGroupPath + '/' + apiPackagePath - targetPackageScala = scalaSourceDir + modGroupPath + '/' + apiPackagePath - targetPackageKotlin = kotlinSourceDir + modGroupPath + '/' + apiPackagePath - if (!getFile(targetPackageJava).exists() && !getFile(targetPackageScala).exists() && !getFile(targetPackageKotlin).exists()) { - throw new GradleException("Could not resolve \"apiPackage\"! Could not find ${targetPackageJava} or ${targetPackageScala} or ${targetPackageKotlin}") - } -} - -if (accessTransformersFile) { - for (atFile in accessTransformersFile.split(",")) { - String targetFile = 'src/main/resources/' + atFile.trim() - if (!getFile(targetFile).exists()) { - throw new GradleException("Could not resolve \"accessTransformersFile\"! Could not find " + targetFile) - } - tasks.deobfuscateMergedJarToSrg.accessTransformerFiles.from(targetFile) - tasks.srgifyBinpatchedJar.accessTransformerFiles.from(targetFile) - } -} - -if (usesMixins.toBoolean()) { - if (mixinsPackage.isEmpty()) { - throw new GradleException("\"usesMixins\" requires \"mixinsPackage\" to be set!") - } - final String mixinPackagePath = mixinsPackage.toString().replaceAll('\\.', '/') - targetPackageJava = javaSourceDir + modGroupPath + '/' + mixinPackagePath - targetPackageScala = scalaSourceDir + modGroupPath + '/' + mixinPackagePath - targetPackageKotlin = kotlinSourceDir + modGroupPath + '/' + mixinPackagePath - if (!getFile(targetPackageJava).exists() && !getFile(targetPackageScala).exists() && !getFile(targetPackageKotlin).exists()) { - throw new GradleException("Could not resolve \"mixinsPackage\"! Could not find ${targetPackageJava} or ${targetPackageScala} or ${targetPackageKotlin}") - } -} - -if (coreModClass) { - final String coreModPath = coreModClass.toString().replaceAll('\\.', '/') - String targetFileJava = javaSourceDir + modGroupPath + '/' + coreModPath + '.java' - String targetFileScala = scalaSourceDir + modGroupPath + '/' + coreModPath + '.scala' - String targetFileScalaJava = scalaSourceDir + modGroupPath + '/' + coreModPath + '.java' - String targetFileKotlin = kotlinSourceDir + modGroupPath + '/' + coreModPath + '.kt' - if (!getFile(targetFileJava).exists() && !getFile(targetFileScala).exists() && !getFile(targetFileScalaJava).exists() && !getFile(targetFileKotlin).exists()) { - throw new GradleException("Could not resolve \"coreModClass\"! Could not find ${targetFileJava} or ${targetFileScala} or ${targetFileScalaJava} or ${targetFileKotlin}") - } -} - - -// Plugin application - -// Scala -if (getFile('src/main/scala').exists()) { - apply plugin: 'scala' -} - -if (getFile('src/main/kotlin').exists()) { - apply plugin: 'org.jetbrains.kotlin.jvm' -} - -// Kotlin -pluginManager.withPlugin('org.jetbrains.kotlin.jvm') { - kotlin { - jvmToolchain(8) - } - def disabledKotlinTaskList = [ - "kaptGenerateStubsMcLauncherKotlin", - "kaptGenerateStubsPatchedMcKotlin", - "kaptGenerateStubsInjectedTagsKotlin", - "compileMcLauncherKotlin", - "compilePatchedMcKotlin", - "compileInjectedTagsKotlin", - "kaptMcLauncherKotlin", - "kaptPatchedMcKotlin", - "kaptInjectedTagsKotlin", - "kspMcLauncherKotlin", - "kspPatchedMcKotlin", - "kspInjectedTagsKotlin", - ] - tasks.configureEach { task -> - if (task.name in disabledKotlinTaskList) { - task.enabled = false - } - } -} - -// Spotless -//noinspection GroovyAssignabilityCheck -project.extensions.add(com.diffplug.blowdryer.Blowdryer, 'Blowdryer', com.diffplug.blowdryer.Blowdryer) // make Blowdryer available in plugin application -if (enableSpotless.toBoolean()) { - apply plugin: 'com.diffplug.spotless' - - // Spotless auto-formatter - // See https://github.com/diffplug/spotless/tree/main/plugin-gradle - // Can be locally toggled via spotless:off/spotless:on comments - spotless { - encoding 'UTF-8' - - format 'misc', { - target '.gitignore' - - trimTrailingWhitespace() - indentWithSpaces(4) - endWithNewline() - } - java { - target 'src/main/java/**/*.java', 'src/test/java/**/*.java' // exclude api as they are not our files - - def orderFile = project.file('spotless.importorder') - if (!orderFile.exists()) { - orderFile = Blowdryer.file('spotless.importorder') - } - def formatFile = project.file('spotless.eclipseformat.xml') - if (!formatFile.exists()) { - formatFile = Blowdryer.file('spotless.eclipseformat.xml') - } - - toggleOffOn() - importOrderFile(orderFile) - removeUnusedImports() - endWithNewline() - //noinspection GroovyAssignabilityCheck - eclipse('4.19.0').configFile(formatFile) - } - scala { - target 'src/*/scala/**/*.scala' - scalafmt('3.7.1') - } - } -} - -// Git version checking, also checking for if this is a submodule -if (project.file('.git/HEAD').isFile() || project.file('.git').isFile()) { - apply plugin: 'com.palantir.git-version' -} - -// Shadowing -if (usesShadowedDependencies.toBoolean()) { - apply plugin: 'com.github.johnrengelman.shadow' -} - - -// Configure Java - -java { - toolchain { - if (enableModernJavaSyntax.toBoolean()) { - languageVersion.set(JavaLanguageVersion.of(17)) - } else { - languageVersion.set(JavaLanguageVersion.of(8)) - } - // Azul covers the most platforms for Java 8+ toolchains, crucially including MacOS arm64 - vendor.set(JvmVendorSpec.AZUL) - } - if (!noPublishedSources.toBoolean()) { - withSourcesJar() - } -} - -tasks.withType(JavaCompile).configureEach { - options.encoding = 'UTF-8' - - if (enableModernJavaSyntax.toBoolean()) { - if (it.name in ['compileMcLauncherJava', 'compilePatchedMcJava']) { - return - } - - sourceCompatibility = 17 - options.release.set(8) - - javaCompiler.set(javaToolchains.compilerFor { - languageVersion.set(JavaLanguageVersion.of(17)) - vendor.set(JvmVendorSpec.AZUL) - }) - } -} - -tasks.withType(ScalaCompile).configureEach { - options.encoding = 'UTF-8' -} - - -// Allow others using this buildscript to have custom gradle code run -if (getFile('addon.gradle').exists()) { - apply from: 'addon.gradle' -} else if (getFile('addon.gradle.kts').exists()) { - apply from: 'addon.gradle.kts' -} - - -// Configure Minecraft - -// Try to gather mod version from git tags if version is not manually specified -if (!modVersion) { - try { - modVersion = gitVersion() - } catch (Exception ignored) { - out.style(Style.Failure).text( - "Mod version could not be determined! Property 'modVersion' is not set, and either git is not installed or no git tags exist.\n" + - "Either specify a mod version in 'gradle.properties', or create at least one tag in git for this project." - ) - modVersion = 'NO-GIT-TAG-SET' - } -} - -if (includeMCVersionJar.toBoolean()){ - version = "${minecraftVersion}-${modVersion}" -} -else { - version = modVersion -} - -group = modGroup - -base { - archivesName = modArchivesBaseName -} - -minecraft { - mcVersion = minecraftVersion - username = developmentEnvironmentUserName.toString() - useDependencyAccessTransformers = true - - // Automatic token injection with RetroFuturaGradle - if (gradleTokenModId) { - injectedTags.put gradleTokenModId, modId - } - if (gradleTokenModName) { - injectedTags.put gradleTokenModName, modName - } - if (gradleTokenVersion) { - injectedTags.put gradleTokenVersion, modVersion - } - - // JVM arguments - extraRunJvmArguments.add("-ea:${modGroup}") - if (usesMixins.toBoolean()) { - extraRunJvmArguments.addAll([ - '-Dmixin.hotSwap=true', - '-Dmixin.checks.interfaces=true', - '-Dmixin.debug.export=true' - ]) - } - - if (enableCoreModDebug.toBoolean()) { - extraRunJvmArguments.addAll([ - '-Dlegacy.debugClassLoading=true', - '-Dlegacy.debugClassLoadingFiner=true', - '-Dlegacy.debugClassLoadingSave=true' - ]) - } -} - -if (coreModClass) { - for (runTask in ['runClient', 'runServer']) { - tasks.named(runTask).configure { - extraJvmArgs.add("-Dfml.coreMods.load=${modGroup}.${coreModClass}") - } - } -} - -if (generateGradleTokenClass) { - tasks.injectTags.outputClassName.set(generateGradleTokenClass) -} - -tasks.named('processIdeaSettings').configure { - dependsOn('injectTags') -} - - -// Repositories - -// Allow unsafe repos but warn -repositories.configureEach { repo -> - if (repo instanceof UrlArtifactRepository) { - if (repo.getUrl() != null && repo.getUrl().getScheme() == "http" && !repo.allowInsecureProtocol) { - logger.warn("Deprecated: Allowing insecure connections for repo '${repo.name}' - add 'allowInsecureProtocol = true'") - repo.allowInsecureProtocol = true - } - } -} - -// Allow adding custom repositories to the buildscript -if (getFile('repositories.gradle').exists()) { - apply from: 'repositories.gradle' -} else if (getFile('repositories.gradle.kts').exists()) { - apply from: 'repositories.gradle.kts' -} - -repositories { - if (includeWellKnownRepositories.toBoolean() || includeCommonDevEnvMods.toBoolean()) { - exclusiveContent { - forRepository { - //noinspection ForeignDelegate - maven { - name = 'Curse Maven' - url = 'https://www.cursemaven.com' - // url = 'https://beta.cursemaven.com' - } - } - filter { - includeGroup 'curse.maven' - } - } - exclusiveContent { - forRepository { - //noinspection ForeignDelegate - maven { - name = 'Modrinth' - url = 'https://api.modrinth.com/maven' - } - } - filter { - includeGroup 'maven.modrinth' - } - } +buildscript { + repositories { + mavenCentral() maven { - name 'Cleanroom Maven' - url 'https://maven.cleanroommc.com' + name = "forge" + url = "https://files.minecraftforge.net/maven" } maven { - name 'BlameJared Maven' - url 'https://maven.blamejared.com' + name = "sonatype" + url = "https://oss.sonatype.org/content/repositories/snapshots/" } maven { - name 'GTNH Maven' - url 'http://jenkins.usrv.eu:8081/nexus/content/groups/public' - allowInsecureProtocol = true + name = "gradle" + url = "https://plugins.gradle.org/m2/" } } - if (usesMixins.toBoolean() || forceEnableMixins.toBoolean()) { - // need to add this here even if we did not above - if (!includeWellKnownRepositories.toBoolean()) { - maven { - name 'Cleanroom Maven' - url 'https://maven.cleanroommc.com' - } + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.50" + classpath("com.anatawa12.forge:ForgeGradle:2.3-1.0.+") { + changing = true } } - mavenLocal() // Must be last for caching to work } +apply plugin: "net.minecraftforge.gradle.forge" +apply plugin: 'kotlin' -// Dependencies - -// Configure dependency configurations -configurations { - embed - implementation.extendsFrom(embed) +compileJava.options.encoding = "UTF-8" +compileTestJava.options.encoding = "UTF-8" - if (usesShadowedDependencies.toBoolean()) { - for (config in [compileClasspath, runtimeClasspath, testCompileClasspath, testRuntimeClasspath]) { - config.extendsFrom(shadowImplementation) - config.extendsFrom(shadowCompile) - } - } +sourceCompatibility = targetCompatibility = "1.8" // Need this here so eclipse task generates correctly. +compileJava { + sourceCompatibility = targetCompatibility = "1.8" } -String mixinProviderSpec = 'zone.rong:mixinbooter:8.9' -dependencies { - if (usesMixins.toBoolean()) { - annotationProcessor 'org.ow2.asm:asm-debug-all:5.2' - // should use 24.1.1 but 30.0+ has a vulnerability fix - annotationProcessor 'com.google.guava:guava:30.0-jre' - // should use 2.8.6 but 2.8.9+ has a vulnerability fix - annotationProcessor 'com.google.code.gson:gson:2.8.9' - - mixinProviderSpec = modUtils.enableMixins(mixinProviderSpec, "mixins.${modId}.refmap.json") - api (mixinProviderSpec) { - transitive = false - } - - annotationProcessor(mixinProviderSpec) { - transitive = false - } - } else if (forceEnableMixins.toBoolean()) { - runtimeOnly(mixinProviderSpec) - } +version = minecraft_version + "-" + mod_version +group= mod_group // http://maven.apache.org/guides/mini/guide-naming-conventions.html +archivesBaseName = mod_id - if (enableJUnit.toBoolean()) { - testImplementation 'org.hamcrest:hamcrest:2.2' - testImplementation 'org.junit.jupiter:junit-jupiter:5.9.2' - testRuntimeOnly 'org.junit.platform:junit-platform-launcher' - } - - if (enableModernJavaSyntax.toBoolean()) { - annotationProcessor 'com.github.bsideup.jabel:jabel-javac-plugin:1.0.0' - compileOnly('com.github.bsideup.jabel:jabel-javac-plugin:1.0.0') { - transitive = false - } - // workaround for https://github.com/bsideup/jabel/issues/174 - annotationProcessor 'net.java.dev.jna:jna-platform:5.13.0' - // Allow jdk.unsupported classes like sun.misc.Unsafe, workaround for JDK-8206937 and fixes Forge crashes in tests. - patchedMinecraft 'me.eigenraven.java8unsupported:java-8-unsupported-shim:1.0.0' - - // allow Jabel to work in tests - testAnnotationProcessor "com.github.bsideup.jabel:jabel-javac-plugin:1.0.0" - testCompileOnly("com.github.bsideup.jabel:jabel-javac-plugin:1.0.0") { - transitive = false // We only care about the 1 annotation class +repositories { + mavenCentral() + maven { + url "https://maven.shadowfacts.net/" + } + maven { + url "https://cursemaven.com" + content { + includeGroup "curse.maven" } - testCompileOnly "me.eigenraven.java8unsupported:java-8-unsupported-shim:1.0.0" } - - compileOnlyApi 'org.jetbrains:annotations:24.1.0' - annotationProcessor 'org.jetbrains:annotations:24.1.0' - patchedMinecraft('net.minecraft:launchwrapper:1.17.2') { - transitive = false - } - - if (includeCommonDevEnvMods.toBoolean()) { - implementation 'mezz.jei:jei_1.12.2:4.16.1.302' - //noinspection DependencyNotationArgument - implementation rfg.deobf('curse.maven:top-245211:2667280') // TOP 1.4.28 + maven { + name = "Progwml6 maven" + url = "https://dvs1.progwml6.com/files/maven" } } -pluginManager.withPlugin('org.jetbrains.kotlin.kapt') { - if (usesMixins.toBoolean()) { - dependencies { - kapt(mixinProviderSpec) - } +compileKotlin { + kotlinOptions { + jvmTarget = 1.8 } } -if (getFile('dependencies.gradle').exists()) { - apply from: 'dependencies.gradle' -} else if (getFile('dependencies.gradle.kts').exists()) { - apply from: 'dependencies.gradle.kts' -} - +minecraft { + version = minecraft_version + "-" + forge_version + runDir = "run" -// Test configuration + replace "@version@", mod_version -// Ensure tests have access to minecraft classes -sourceSets { - test { - java { - compileClasspath += patchedMc.output + mcLauncher.output - runtimeClasspath += patchedMc.output + mcLauncher.output - } - } + mappings = mcp_mapping_version } -test { - // ensure tests are run with java8 - javaLauncher = javaToolchains.launcherFor { - languageVersion = JavaLanguageVersion.of(8) - }.get() - - testLogging { - events TestLogEvent.STARTED, TestLogEvent.PASSED, TestLogEvent.FAILED - exceptionFormat TestExceptionFormat.FULL - showExceptions true - showStackTraces true - showCauses true - showStandardStreams true - } +dependencies { + implementation "curse.maven:ae2-extended-life-570458:4851091" + implementation "net.shadowfacts:Forgelin:1.8.4" - if (enableJUnit.toBoolean()) { - useJUnitPlatform() - } + runtime "mezz.jei:jei_1.12.2:4.16.1.302" } +sourceJar { + duplicatesStrategy = DuplicatesStrategy.WARN +} -// Resource processing and jar building +processResources +{ + duplicatesStrategy = DuplicatesStrategy.WARN -processResources { // this will ensure that this task is redone when the versions change. - inputs.property 'version', modVersion - inputs.property 'mcversion', minecraftVersion - // Blowdryer puts these files into the resource directory, so - // exclude them from builds (doesn't hurt to exclude even if not present) - exclude('spotless.importorder') - exclude('spotless.eclipseformat.xml') + inputs.property "version", project.version + inputs.property "mcversion", project.minecraft.version // replace stuff in mcmod.info, nothing else - filesMatching('mcmod.info') { fcd -> - fcd.expand( - 'version': modVersion, - 'mcversion': minecraftVersion, - 'modid': modId, - 'modname': modName - ) - } - - if (accessTransformersFile) { - String[] ats = accessTransformersFile.split(',') - ats.each { at -> - rename "(${at})", 'META-INF/$1' - } - } -} - -// Automatically generate a mixin json file if it does not already exist -tasks.register('generateAssets') { - group = 'GT Buildscript' - description = 'Generates a pack.mcmeta, mcmod.info, or mixins.{modid}.json if needed' - doLast { - // pack.mcmeta - def packMcmetaFile = getFile('src/main/resources/pack.mcmeta') - if (!packMcmetaFile.exists()) { - packMcmetaFile.text = """{ - "pack": { - "pack_format": 3, - "description": "${modName} Resource Pack" - } -} -""" - } - - // mcmod.info - def mcmodInfoFile = getFile('src/main/resources/mcmod.info') - if (!mcmodInfoFile.exists()) { - mcmodInfoFile.text = """[{ - "modid": "\${modid}", - "name": "\${modname}", - "description": "An example mod for Minecraft 1.12.2 with Forge", - "version": "\${version}", - "mcversion": "\${mcversion}", - "logoFile": "", - "url": "", - "authorList": [], - "credits": "", - "dependencies": [] -}] -""" - } - - // mixins.{modid}.json - if (usesMixins.toBoolean() && generateMixinConfig.toBoolean()) { - def mixinConfigFile = getFile("src/main/resources/mixins.${modId}.json") - if (!mixinConfigFile.exists()) { - def mixinConfigRefmap = "mixins.${modId}.refmap.json" - - mixinConfigFile.text = """{ - "package": "${modGroup}.${mixinsPackage}", - "refmap": "${mixinConfigRefmap}", - "target": "@env(DEFAULT)", - "minVersion": "0.8", - "compatibilityLevel": "JAVA_8", - "mixins": [], - "client": [], - "server": [] -} -""" - } - } - } -} - -tasks.named('processResources').configure { - dependsOn('generateAssets') -} - -jar { - manifest { - attributes(getManifestAttributes()) - } - - // Add all embedded dependencies into the jar - from provider { - configurations.embed.collect { - it.isDirectory() ? it : zipTree(it) - } - } -} - -// Configure default run tasks -if (separateRunDirectories.toBoolean()) { - runClient { - workingDir = file('run/client') - } - - runServer { - workingDir = file('run/server') - } -} - -// Create API library jar -tasks.register('apiJar', Jar) { - archiveClassifier.set 'api' - from(sourceSets.main.java) { - include "${modGroupPath}/${apiPackagePath}/**" - } - - from(sourceSets.main.output) { - include "${modGroupPath}/${apiPackagePath}/**" - } -} - -// Configure shadow jar task -if (usesShadowedDependencies.toBoolean()) { - tasks.named('shadowJar', ShadowJar).configure { - manifest { - attributes(getManifestAttributes()) - } - // Only shadow classes that are actually used, if enabled - if (minimizeShadowedDependencies.toBoolean()) { - minimize() - } - configurations = [ - project.configurations.shadowImplementation, - project.configurations.shadowCompile - ] - archiveClassifier.set('dev') - if (relocateShadowedDependencies.toBoolean()) { - relocationPrefix = modGroup + '.shadow' - enableRelocation = true - } - } - configurations.runtimeElements.outgoing.artifacts.clear() - configurations.apiElements.outgoing.artifacts.clear() - configurations.runtimeElements.outgoing.artifact(tasks.named('shadowJar', ShadowJar)) - configurations.apiElements.outgoing.artifact(tasks.named('shadowJar', ShadowJar)) - tasks.named('jar', Jar) { - enabled = false - finalizedBy(tasks.shadowJar) - } - tasks.named('reobfJar', ReobfuscatedJar) { - inputJar.set(tasks.named('shadowJar', ShadowJar).flatMap({it.archiveFile})) - } - AdhocComponentWithVariants javaComponent = (AdhocComponentWithVariants) project.components.findByName('java') - javaComponent.withVariantsFromConfiguration(configurations.shadowRuntimeElements) { - skip() - } - for (runTask in ['runClient', 'runServer']) { - tasks.named(runTask).configure { - dependsOn('shadowJar') - } - } -} - -def getManifestAttributes() { - def attributes = [:] - if (coreModClass) { - attributes['FMLCorePlugin'] = "${modGroup}.${coreModClass}" - } - if (!containsMixinsAndOrCoreModOnly.toBoolean() && (usesMixins.toBoolean() || coreModClass)) { - attributes['FMLCorePluginContainsFMLMod'] = true - } - if (accessTransformersFile) { - attributes['FMLAT'] = accessTransformersFile.toString() - } - - if (usesMixins.toBoolean()) { - attributes['ForceLoadAsMod'] = !containsMixinsAndOrCoreModOnly.toBoolean() - } - return attributes -} - - -// IDE Configuration - -eclipse { - classpath { - downloadSources = true - downloadJavadoc = true - } -} - -idea { - module { - inheritOutputDirs true - downloadJavadoc true - downloadSources true - } - project { - settings { - runConfigurations { - '1. Setup Workspace'(Gradle) { - taskNames = ['setupDecompWorkspace'] - } - '2. Run Client'(Gradle) { - taskNames = ['runClient'] - } - '3. Run Server'(Gradle) { - taskNames = ['runServer'] - } - '4. Run Obfuscated Client'(Gradle) { - taskNames = ['runObfClient'] - } - '5. Run Obfuscated Server'(Gradle) { - taskNames = ['runObfServer'] - } - if (enableSpotless.toBoolean()) { - '6. Apply Spotless'(Gradle) { - taskNames = ["spotlessApply"] - } - '7. Build Jars'(Gradle) { - taskNames = ['build'] - } - } else { - '6. Build Jars'(Gradle) { - taskNames = ['build'] - } - } - 'Update Buildscript'(Gradle) { - taskNames = ['updateBuildScript'] - } - 'FAQ'(Gradle) { - taskNames = ['faq'] - } - } - compiler.javac { - afterEvaluate { - javacAdditionalOptions = '-encoding utf8' - moduleJavacAdditionalOptions = [ - (project.name + '.main'): tasks.compileJava.options.compilerArgs.collect { - '"' + it + '"' - }.join(' ') - ] - } - } - } - } -} - - -// Deployment -def final modrinthApiKey = providers.environmentVariable('MODRINTH_API_KEY') -def final cfApiKey = providers.environmentVariable('CURSEFORGE_API_KEY') -final boolean isCIEnv = providers.environmentVariable('CI').getOrElse('false').toBoolean() - -if (isCIEnv || deploymentDebug.toBoolean()) { - artifacts { - if (!noPublishedSources.toBoolean()) { - archives sourcesJar - } - if (apiPackage) { - archives apiJar - } - } -} - -// Changelog generation -tasks.register('generateChangelog') { - group = 'GT Buildscript' - description = 'Generate a default changelog of all commits since the last tagged git commit' - onlyIf { - generateDefaultChangelog.toBoolean() - } - doLast { - def lastTag = getLastTag() - - def changelog = runShell(([ - "git", - "log", - "--date=format:%d %b %Y", - "--pretty=%s - **%an** (%ad)", - "${lastTag}..HEAD" - ] + (sourceSets.main.java.srcDirs + sourceSets.main.resources.srcDirs) - .collect { ['--', it] }).flatten()) - - if (changelog) { - changelog = "Changes since ${lastTag}:\n${{("\n" + changelog).replaceAll("\n", "\n* ")}}" - } - def f = getFile('build/changelog.md') - changelog = changelog ?: 'There have been no changes.' - f.write(changelog, 'UTF-8') - - // Set changelog for Modrinth - if (modrinthApiKey.isPresent() || deploymentDebug.toBoolean()) { - modrinth.changelog.set(changelog) - } - } -} - -if (cfApiKey.isPresent() || deploymentDebug.toBoolean()) { - apply plugin: 'net.darkhax.curseforgegradle' - //noinspection UnnecessaryQualifiedReference - tasks.register('curseforge', net.darkhax.curseforgegradle.TaskPublishCurseForge) { - disableVersionDetection() - debugMode = deploymentDebug.toBoolean() - apiToken = cfApiKey.getOrElse('debug_token') - - doFirst { - def mainFile = upload(curseForgeProjectId, reobfJar) - def changelogFile = getChangelog() - def changelogRaw = changelogFile.exists() ? changelogFile.getText('UTF-8') : "" - - mainFile.displayName = "${modName}: ${modVersion}" - mainFile.releaseType = getReleaseType() - mainFile.changelog = changelogRaw - mainFile.changelogType = 'markdown' - mainFile.addModLoader 'Forge' - mainFile.addJavaVersion "Java 8" - mainFile.addGameVersion minecraftVersion - - if (curseForgeRelations.size() != 0) { - String[] deps = curseForgeRelations.split(';') - deps.each { dep -> - if (dep.size() == 0) { - return - } - String[] parts = dep.split(':') - String type = parts[0], slug = parts[1] - if (!(type in ['requiredDependency', 'embeddedLibrary', 'optionalDependency', 'tool', 'incompatible'])) { - throw new Exception('Invalid Curseforge dependency type: ' + type) - } - mainFile.addRelation(slug, type) - } - } - - for (artifact in getSecondaryArtifacts()) { - def additionalFile = mainFile.withAdditionalFile(artifact) - additionalFile.changelog = changelogRaw - } - } - } - tasks.curseforge.dependsOn(build) - tasks.curseforge.dependsOn('generateChangelog') -} + from(sourceSets.main.resources.srcDirs) { + include 'mcmod.info' -if (modrinthApiKey.isPresent() || deploymentDebug.toBoolean()) { - apply plugin: 'com.modrinth.minotaur' - def final changelogFile = getChangelog() - - modrinth { - token = modrinthApiKey.getOrElse('debug_token') - projectId = modrinthProjectId - changelog = changelogFile.exists() ? changelogFile.getText('UTF-8') : "" - versionType = getReleaseType() - versionNumber = modVersion - gameVersions = [minecraftVersion] - loaders = ["forge"] - debugMode = deploymentDebug.toBoolean() - uploadFile = reobfJar - additionalFiles = getSecondaryArtifacts() - } - if (modrinthRelations.size() != 0) { - String[] deps = modrinthRelations.split(';') - deps.each { dep -> - if (dep.size() == 0) { - return - } - String[] parts = dep.split(':') - String[] qual = parts[0].split('-') - addModrinthDep(qual[0], qual[1], parts[1]) - } - } - tasks.modrinth.dependsOn(build) - tasks.modrinth.dependsOn('generateChangelog') -} - -def addModrinthDep(String scope, String type, String name) { - com.modrinth.minotaur.dependencies.Dependency dep - if (!(scope in ['required', 'optional', 'incompatible', 'embedded'])) { - throw new Exception('Invalid modrinth dependency scope: ' + scope) - } - switch (type) { - case 'project': - dep = new ModDependency(name, scope) - break - case 'version': - dep = new VersionDependency(name, scope) - break - default: - throw new Exception('Invalid modrinth dependency type: ' + type) - } - project.modrinth.dependencies.add(dep) -} - -if (customMavenPublishUrl) { - String publishedVersion = modVersion - - publishing { - publications { - create('maven', MavenPublication) { - //noinspection GroovyAssignabilityCheck - from components.java - - if (apiPackage) { - artifact apiJar - } - - // providers is not available here, use System for getting env vars - groupId = System.getenv('ARTIFACT_GROUP_ID') ?: project.group - artifactId = System.getenv('ARTIFACT_ID') ?: project.name - version = System.getenv('RELEASE_VERSION') ?: publishedVersion - } - } - - repositories { - maven { - url = customMavenPublishUrl - allowInsecureProtocol = !customMavenPublishUrl.startsWith('https') - credentials { - username = providers.environmentVariable('MAVEN_USER').getOrElse('NONE') - password = providers.environmentVariable('MAVEN_PASSWORD').getOrElse('NONE') - } - } - } + // replace version and mcversion + expand 'version':project.version, 'mcversion':project.minecraft.version } -} -def getSecondaryArtifacts() { - def secondaryArtifacts = [usesShadowedDependencies.toBoolean() ? tasks.shadowJar : tasks.jar] - if (!noPublishedSources.toBoolean()) secondaryArtifacts += [sourcesJar] - if (apiPackage) secondaryArtifacts += [apiJar] - return secondaryArtifacts -} - -def getReleaseType() { - String type = project.releaseType - if (!(type in ['release', 'beta', 'alpha'])) { - throw new Exception("Release type invalid! Found \"" + type + "\", allowed: \"release\", \"beta\", \"alpha\"") + // copy everything else, thats not the mcmod.info + from(sourceSets.main.resources.srcDirs) { + exclude 'mcmod.info' } - return type -} - -/* - * If CHANGELOG_LOCATION env var is set, that takes highest precedence. - * Next, if 'generateDefaultChangelog' option is enabled, use that. - * Otherwise, try to use a CHANGELOG.md file at root directory. - */ -def getChangelog() { - def final changelogEnv = providers.environmentVariable('CHANGELOG_LOCATION') - if (changelogEnv.isPresent()) { - return new File(changelogEnv.get()) - } - if (generateDefaultChangelog.toBoolean()) { - return getFile('build/changelog.md') - } - return getFile('CHANGELOG.md') -} - - -// Buildscript updating - -def buildscriptGradleVersion = '8.5' - -tasks.named('wrapper', Wrapper).configure { - gradleVersion = buildscriptGradleVersion -} - -tasks.register('updateBuildScript') { - group = 'GT Buildscript' - description = 'Updates the build script to the latest version' - - if (gradle.gradleVersion != buildscriptGradleVersion && !Boolean.getBoolean('DISABLE_BUILDSCRIPT_GRADLE_UPDATE')) { - dependsOn('wrapper') - } - - doLast { - if (performBuildScriptUpdate()) return - print('Build script already up to date!') - } -} - -if (!project.getGradle().startParameter.isOffline() && !Boolean.getBoolean('DISABLE_BUILDSCRIPT_UPDATE_CHECK') && isNewBuildScriptVersionAvailable()) { - if (autoUpdateBuildScript.toBoolean()) { - performBuildScriptUpdate() - } else { - out.style(Style.SuccessHeader).println("Build script update available! Run 'gradle updateBuildScript'") - if (gradle.gradleVersion != buildscriptGradleVersion) { - out.style(Style.SuccessHeader).println("updateBuildScript can update gradle from ${gradle.gradleVersion} to ${buildscriptGradleVersion}\n") - } - } -} - -static URL availableBuildScriptUrl() { - new URL("https://raw.githubusercontent.com/GregTechCEu/Buildscripts/master/build.gradle") -} - -static URL availableSettingsGradleUrl() { - new URL("https://raw.githubusercontent.com/GregTechCEu/Buildscripts/master/settings.gradle") -} - -boolean performBuildScriptUpdate() { - if (isNewBuildScriptVersionAvailable()) { - def buildscriptFile = getFile("build.gradle") - def settingsFile = getFile("settings.gradle") - availableBuildScriptUrl().withInputStream { i -> buildscriptFile.withOutputStream { it << i } } - availableSettingsGradleUrl().withInputStream { i -> settingsFile.withOutputStream { it << i } } - def out = services.get(StyledTextOutputFactory).create('buildscript-update-output') - out.style(Style.Success).print("Build script updated. Please REIMPORT the project or RESTART your IDE!") - return true - } - return false -} - -boolean isNewBuildScriptVersionAvailable() { - Map parameters = ["connectTimeout": 10000, "readTimeout": 10000] - - String currentBuildScript = getFile("build.gradle").getText() - String currentBuildScriptHash = getVersionHash(currentBuildScript) - String availableBuildScript = availableBuildScriptUrl().newInputStream(parameters).getText() - String availableBuildScriptHash = getVersionHash(availableBuildScript) - - boolean isUpToDate = currentBuildScriptHash.empty || availableBuildScriptHash.empty || currentBuildScriptHash == availableBuildScriptHash - return !isUpToDate -} - -static String getVersionHash(String buildScriptContent) { - String versionLine = buildScriptContent.find("^//version: [a-z0-9]*") - if (versionLine != null) { - return versionLine.split(": ").last() - } - return "" -} - - -// Faq - -tasks.register('faq') { - group = 'GT Buildscript' - description = 'Prints frequently asked questions about building a project' - doLast { - print("\nTo update this buildscript to the latest version, run 'gradlew updateBuildScript' or run the generated run configuration if you are using IDEA.\n" + - "To set up the project, run the 'setupDecompWorkspace' task, which you can run as './gradlew setupDecompWorkspace' in a terminal, or find in the 'modded minecraft' gradle category.\n\n" + - "To add new dependencies to your project, place them in 'dependencies.gradle', NOT in 'build.gradle' as they would be replaced when the script updates.\n" + - "To add new repositories to your project, place them in 'repositories.gradle'.\n" + - "If you need additional gradle code to run, you can place it in a file named 'addon.gradle' (or either of the above, up to you for organization).\n\n" + - "If your build fails to recognize the syntax of newer Java versions, enable Jabel in your 'gradle.properties' under the option name 'enableModernJavaSyntax'.\n" + - "To see information on how to configure your IDE properly for Java 17, see https://github.com/GregTechCEu/Buildscripts/blob/master/docs/jabel.md\n\n" + - "Report any issues or feature requests you have for this build script to https://github.com/GregTechCEu/Buildscripts/issues\n") - } -} - - -// Helpers - -def getFile(String relativePath) { - return new File(projectDir, relativePath) -} - -def checkPropertyExists(String propertyName) { - if (!project.hasProperty(propertyName)) { - throw new GradleException("This project requires a property \"" + propertyName + "\"! Please add it your \"gradle.properties\". You can find all properties and their description here: https://github.com/GregTechCEu/Buildscripts/blob/main/gradle.properties") - } -} - -def propertyDefaultIfUnset(String propertyName, defaultValue) { - if (!project.hasProperty(propertyName) || project.property(propertyName) == "") { - project.ext.setProperty(propertyName, defaultValue) - } -} - -def propertyDefaultIfUnsetWithEnvVar(String propertyName, defaultValue, String envVarName) { - def envVar = providers.environmentVariable(envVarName) - if (envVar.isPresent()) { - project.ext.setProperty(propertyName, envVar.get()) - } else { - propertyDefaultIfUnset(propertyName, defaultValue) - } -} - -static runShell(command) { - def process = command.execute() - def outputStream = new StringBuffer() - def errorStream = new StringBuffer() - process.waitForProcessOutput(outputStream, errorStream) - - errorStream.toString().with { - if (it) { - throw new GradleException("Error executing ${command}:\n> ${it}") - } - } - return outputStream.toString().trim() -} - -def getLastTag() { - def githubTag = providers.environmentVariable('GITHUB_TAG') - return runShell('git describe --abbrev=0 --tags ' + - (githubTag.isPresent() ? runShell('git rev-list --tags --skip=1 --max-count=1') : '')) } diff --git a/gradle.properties b/gradle.properties index d016b12..442ea5a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,169 +1,13 @@ -modName = Betterer P2P - -# This is a case-sensitive string to identify your mod. Convention is to use lower case. -modId = bettererp2p - -modGroup = com.projecturanus.betterp2p - -# Version of your mod. -# This field can be left empty if you want your mod's version to be determined by the latest git tag instead. -modVersion = 1.3.2 - -# Whether to use the old jar naming structure (modid-mcversion-version) instead of the new version (modid-version) -includeMCVersionJar = false - -# The name of your jar when you produce builds, not including any versioning info -modArchivesBaseName = betterp2p - -# Will update your build.gradle automatically whenever an update is available -autoUpdateBuildScript = false - -minecraftVersion = 1.12.2 - -# Select a username for testing your mod with breakpoints. You may leave this empty for a random username each time you -# restart Minecraft in development. Choose this dependent on your mod: -# Do you need consistent player progressing (for example Thaumcraft)? -> Select a name -# Do you need to test how your custom blocks interacts with a player that is not the owner? -> leave name empty -# Alternatively this can be set with the 'DEV_USERNAME' environment variable. -developmentEnvironmentUserName = Developer - -# Enables using modern java syntax (up to version 17) via Jabel, while still targeting JVM 8. -# See https://github.com/bsideup/jabel for details on how this works. -# Using this requires that you use a Java 17 JDK for development. -enableModernJavaSyntax = false - -# Generate a class with String fields for the mod id, name and version named with the fields below -generateGradleTokenClass = com.projecturanus.betterp2p.Tags -gradleTokenModId = MODID -gradleTokenModName = MODNAME -gradleTokenVersion = VERSION - -# In case your mod provides an API for other mods to implement you may declare its package here. Otherwise, you can -# leave this property empty. -# Example value: apiPackage = api + modGroup = com.myname.mymodid -> com.myname.mymodid.api -apiPackage = - -# Specify the configuration file for Forge's access transformers here. It must be placed into /src/main/resources/ -# There can be multiple files in a comma-separated list. -# Example value: mymodid_at.cfg,jei_at.cfg -accessTransformersFile = - -# Provides setup for Mixins if enabled. If you don't know what mixins are: Keep it disabled! -usesMixins = false -# Specify the package that contains all of your Mixins. You may only place Mixins in this package or the build will fail! -mixinsPackage = -# Automatically generates a mixin config json if enabled, with the name mixins.modid.json -generateMixinConfig = true -# Specify the core mod entry class if you use a core mod. This class must implement IFMLLoadingPlugin! -# Example value: coreModClass = asm.FMLPlugin + modGroup = com.myname.mymodid -> com.myname.mymodid.asm.FMLPlugin -coreModClass = -# If your project is only a consolidation of mixins or a core mod and does NOT contain a 'normal' mod (meaning that -# there is no class annotated with @Mod) you want this to be true. When in doubt: leave it on false! -containsMixinsAndOrCoreModOnly = false - -# Enables Mixins even if this mod doesn't use them, useful if one of the dependencies uses mixins. -forceEnableMixins = false - -# Outputs pre-transformed and post-transformed loaded classes to run/CLASSLOADER_TEMP. Can be used in combination with -# diff to see exactly what your ASM or Mixins are changing in the target file. -# Optionally can be specified with the 'CORE_MOD_DEBUG' env var. Will output a lot of files! -enableCoreModDebug = false - -# Adds CurseMaven, Modrinth Maven, BlameJared maven, and some more well-known 1.12.2 repositories -includeWellKnownRepositories = true - -# Adds JEI and TheOneProbe to your development environment. Adds them as 'implementation', meaning they will -# be available at compiletime and runtime for your mod (in-game and in-code). -# Overrides the above setting to be always true, as these repositories are needed to fetch the mods -includeCommonDevEnvMods = true - - -# If enabled, you may use 'shadowCompile' for dependencies. They will be integrated in your jar. It is your -# responsibility check the licence and request permission for distribution, if required. -usesShadowedDependencies = false -# If disabled, won't remove unused classes from shaded dependencies. Some libraries use reflection to access -# their own classes, making the minimization unreliable. -minimizeShadowedDependencies = true -# If disabled, won't rename the shadowed classes. -relocateShadowedDependencies = true - -# Separate run directories into "run/client" for runClient task, and "run/server" for runServer task. -# Useful for debugging a server and client simultaneously. If not enabled, it will be in the standard location "run/" -separateRunDirectories = false - - -# Publishing to modrinth requires you to set the MODRINTH_API_KEY environment variable to your current modrinth API token. - -# The project's ID on Modrinth. Can be either the slug or the ID. -# Leave this empty if you don't want to publish on Modrinth. -# Alternatively this can be set with the 'MODRINTH_PROJECT_ID' environment variable. -modrinthProjectId = - -# The project's relations on Modrinth. You can use this to refer to other projects on Modrinth. -# Syntax: scope1-type1:name1;scope2-type2:name2;... -# Where scope can be one of [required, optional, incompatible, embedded], -# type can be one of [project, version], -# and the name is the Modrinth project or version slug/id of the other mod. -# Example: required-project:jei;optional-project:top;incompatible-project:gregtech -modrinthRelations = - - -# Publishing to CurseForge requires you to set the CURSEFORGE_API_KEY environment variable to one of your CurseForge API tokens. - -# The project's numeric ID on CurseForge. You can find this in the About Project box. -# Leave this empty if you don't want to publish on CurseForge. -# Alternatively this can be set with the 'CURSEFORGE_PROJECT_ID' environment variable. -curseForgeProjectId = - -# The project's relations on CurseForge. You can use this to refer to other projects on CurseForge. -# Syntax: type1:name1;type2:name2;... -# Where type can be one of [requiredDependency, embeddedLibrary, optionalDependency, tool, incompatible], -# and the name is the CurseForge project slug of the other mod. -# Example: requiredDependency:railcraft;embeddedLibrary:cofhlib;incompatible:buildcraft -curseForgeRelations = - -# This project's release type on CurseForge and/or Modrinth -# Alternatively this can be set with the 'RELEASE_TYPE' environment variable. -# Allowed types: release, beta, alpha -releaseType = release - -# Generate a default changelog for releases. Requires git to be installed, as it uses it to generate a changelog of -# commits since the last tagged release. -generateDefaultChangelog = false - -# Prevent the source code from being published -noPublishedSources = false - - -# Publish to a custom maven location. Follows a few rules: -# Group ID can be set with the 'ARTIFACT_GROUP_ID' environment variable, default to 'project.group' -# Artifact ID can be set with the 'ARTIFACT_ID' environment variable, default to 'project.name' -# Version can be set with the 'RELEASE_VERSION' environment variable, default to 'modVersion' -# For maven credentials: -# Username is set with the 'MAVEN_USER' environment variable, default to "NONE" -# Password is set with the 'MAVEN_PASSWORD' environment variable, default to "NONE" -customMavenPublishUrl = - -# Enable spotless checks -# Enforces code formatting on your source code -# By default this will use the files found here: https://github.com/GregTechCEu/Buildscripts/tree/master/spotless -# to format your code. However, you can create your own version of these files and place them in your project's -# root directory to apply your own formatting options instead. -enableSpotless = true - -# Enable JUnit testing platform used for testing your code. -# Uses JUnit 5. See guide and documentation here: https://junit.org/junit5/docs/current/user-guide/ -enableJUnit = true - -# Deployment debug setting -# Uncomment this to test deployments to CurseForge and Modrinth -# Alternatively, you can set the 'DEPLOYMENT_DEBUG' environment variable. -deploymentDebug = false +# Sets default memory used for gradle commands. Can be overridden by user or command line manufactures. +# This is required to provide enough memory for the Minecraft decompilation process. +org.gradle.jvmargs=-Xmx3G +# Mod Properties +mod_id = bettererp2p +mod_version = 1.3.1 +mod_group = com.projecturanus.betterp2p -# Gradle Settings -# Effectively applies the '--stacktrace' flag by default -org.gradle.logging.stacktrace = all -# Sets default memory used for gradle commands. Can be overridden by user or command line properties. -# This is required to provide enough memory for the Minecraft decompilation process. -org.gradle.jvmargs = -Xmx3G +# Minecraft & Forge +minecraft_version = 1.12.2 +forge_version = 14.23.5.2847 +mcp_mapping_version = stable_39 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 033e24c..7454180 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 1af9e09..69a9715 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip -networkTimeout=10000 -validateDistributionUrl=true +distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index fcb6fca..744e882 100644 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ -#!/bin/sh +#!/usr/bin/env sh # -# Copyright © 2015-2021 the original authors. +# Copyright 2015 the original author or authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,98 +17,67 @@ # ############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# +## +## Gradle start up script for UN*X +## ############################################################################## # Attempt to set APP_HOME - # Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum +MAX_FD="maximum" warn () { echo "$*" -} >&2 +} die () { echo echo "$*" echo exit 1 -} >&2 +} # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MSYS* | MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -118,9 +87,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java + JAVACMD="$JAVA_HOME/jre/sh/java" else - JAVACMD=$JAVA_HOME/bin/java + JAVACMD="$JAVA_HOME/bin/java" fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -129,120 +98,88 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD=java - if ! command -v java >/dev/null 2>&1 - then - die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." - fi fi # Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi fi -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi # For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg + i=`expr $i + 1` done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac fi +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 93e3f59..107acd3 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%"=="" @echo off +@if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,8 +25,7 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused +if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% @@ -41,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute +if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -76,15 +75,13 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar :end @rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd +if "%ERRORLEVEL%"=="0" goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/src/main/kotlin/com/projecturanus/betterp2p/BetterP2P.kt b/src/main/java/com/projecturanus/betterp2p/BetterP2P.kt similarity index 84% rename from src/main/kotlin/com/projecturanus/betterp2p/BetterP2P.kt rename to src/main/java/com/projecturanus/betterp2p/BetterP2P.kt index 449a3b3..ad62a06 100644 --- a/src/main/kotlin/com/projecturanus/betterp2p/BetterP2P.kt +++ b/src/main/java/com/projecturanus/betterp2p/BetterP2P.kt @@ -9,8 +9,9 @@ import net.minecraftforge.fml.common.event.FMLPostInitializationEvent import net.minecraftforge.fml.common.event.FMLPreInitializationEvent import org.apache.logging.log4j.Logger +const val MODID = "betterp2p" -@Mod(modid = Tags.MODID, modLanguageAdapter = "net.shadowfacts.forgelin.KotlinAdapter", dependencies = "required-after: appliedenergistics2; required-after: forgelin;") +@Mod(modid = MODID, modLanguageAdapter = "net.shadowfacts.forgelin.KotlinAdapter", dependencies = "required-after: appliedenergistics2; required-after: forgelin;") object BetterP2P { lateinit var logger: Logger @SidedProxy(serverSide = "com.projecturanus.betterp2p.CommonProxy", clientSide = "com.projecturanus.betterp2p.ClientProxy") diff --git a/src/main/kotlin/com/projecturanus/betterp2p/Proxy.kt b/src/main/java/com/projecturanus/betterp2p/Proxy.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/Proxy.kt rename to src/main/java/com/projecturanus/betterp2p/Proxy.kt diff --git a/src/main/kotlin/com/projecturanus/betterp2p/client/ClientCache.kt b/src/main/java/com/projecturanus/betterp2p/client/ClientCache.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/client/ClientCache.kt rename to src/main/java/com/projecturanus/betterp2p/client/ClientCache.kt diff --git a/src/main/kotlin/com/projecturanus/betterp2p/client/ModelHandler.kt b/src/main/java/com/projecturanus/betterp2p/client/ModelHandler.kt similarity index 75% rename from src/main/kotlin/com/projecturanus/betterp2p/client/ModelHandler.kt rename to src/main/java/com/projecturanus/betterp2p/client/ModelHandler.kt index 34be957..9c26e82 100644 --- a/src/main/kotlin/com/projecturanus/betterp2p/client/ModelHandler.kt +++ b/src/main/java/com/projecturanus/betterp2p/client/ModelHandler.kt @@ -1,6 +1,6 @@ package com.projecturanus.betterp2p.client -import com.projecturanus.betterp2p.Tags +import com.projecturanus.betterp2p.MODID import com.projecturanus.betterp2p.item.ItemAdvancedMemoryCard import net.minecraft.client.renderer.block.model.ModelResourceLocation import net.minecraft.util.ResourceLocation @@ -10,11 +10,11 @@ import net.minecraftforge.fml.common.Mod import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import net.minecraftforge.fml.relauncher.Side -@Mod.EventBusSubscriber(modid = Tags.MODID, value = [Side.CLIENT]) +@Mod.EventBusSubscriber(modid = MODID, value = [Side.CLIENT]) object ModelHandler { @JvmStatic @SubscribeEvent fun registerModels(event: ModelRegistryEvent) { - ModelLoader.setCustomModelResourceLocation(ItemAdvancedMemoryCard, 0, ModelResourceLocation(ResourceLocation(Tags.MODID, "advanced_memory_card"), "inventory")) + ModelLoader.setCustomModelResourceLocation(ItemAdvancedMemoryCard, 0, ModelResourceLocation(ResourceLocation(MODID, "advanced_memory_card"), "inventory")) } } diff --git a/src/main/kotlin/com/projecturanus/betterp2p/client/TextureBound.kt b/src/main/java/com/projecturanus/betterp2p/client/TextureBound.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/client/TextureBound.kt rename to src/main/java/com/projecturanus/betterp2p/client/TextureBound.kt diff --git a/src/main/kotlin/com/projecturanus/betterp2p/client/gui/GuiAdvancedMemoryCard.kt b/src/main/java/com/projecturanus/betterp2p/client/gui/GuiAdvancedMemoryCard.kt similarity index 99% rename from src/main/kotlin/com/projecturanus/betterp2p/client/gui/GuiAdvancedMemoryCard.kt rename to src/main/java/com/projecturanus/betterp2p/client/gui/GuiAdvancedMemoryCard.kt index f33e41b..108dfec 100644 --- a/src/main/kotlin/com/projecturanus/betterp2p/client/gui/GuiAdvancedMemoryCard.kt +++ b/src/main/java/com/projecturanus/betterp2p/client/gui/GuiAdvancedMemoryCard.kt @@ -6,7 +6,7 @@ import appeng.parts.p2p.PartP2PGTCEPower import appeng.parts.p2p.PartP2PRedstone import appeng.parts.p2p.PartP2PTunnelME import com.projecturanus.betterp2p.BetterP2P -import com.projecturanus.betterp2p.Tags +import com.projecturanus.betterp2p.MODID import com.projecturanus.betterp2p.client.ClientCache import com.projecturanus.betterp2p.client.TextureBound import com.projecturanus.betterp2p.client.gui.widget.* @@ -68,7 +68,7 @@ class GuiAdvancedMemoryCard(msg: S2COpenGui) : GuiScreen(), TextureBound { private val typeSelector: WidgetTypeSelector private val searchText: String - get() = searchBar.getText() + get() = searchBar.text private lateinit var col: WidgetP2PColumn @@ -84,7 +84,7 @@ class GuiAdvancedMemoryCard(msg: S2COpenGui) : GuiScreen(), TextureBound { ) } - val background: ResourceLocation = ResourceLocation(Tags.MODID, "textures/gui/advanced_memory_card.png") + val background: ResourceLocation = ResourceLocation(MODID, "textures/gui/advanced_memory_card.png") private val selectedInfo: InfoWrapper? get() = infos.selectedInfo diff --git a/src/main/kotlin/com/projecturanus/betterp2p/client/gui/GuiHelper.kt b/src/main/java/com/projecturanus/betterp2p/client/gui/GuiHelper.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/client/gui/GuiHelper.kt rename to src/main/java/com/projecturanus/betterp2p/client/gui/GuiHelper.kt diff --git a/src/main/kotlin/com/projecturanus/betterp2p/client/gui/InfoFilter.kt b/src/main/java/com/projecturanus/betterp2p/client/gui/InfoFilter.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/client/gui/InfoFilter.kt rename to src/main/java/com/projecturanus/betterp2p/client/gui/InfoFilter.kt diff --git a/src/main/kotlin/com/projecturanus/betterp2p/client/gui/InfoSortStrategy.kt b/src/main/java/com/projecturanus/betterp2p/client/gui/InfoSortStrategy.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/client/gui/InfoSortStrategy.kt rename to src/main/java/com/projecturanus/betterp2p/client/gui/InfoSortStrategy.kt diff --git a/src/main/kotlin/com/projecturanus/betterp2p/client/gui/InfoWrapper.kt b/src/main/java/com/projecturanus/betterp2p/client/gui/InfoWrapper.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/client/gui/InfoWrapper.kt rename to src/main/java/com/projecturanus/betterp2p/client/gui/InfoWrapper.kt diff --git a/src/main/kotlin/com/projecturanus/betterp2p/client/gui/Infolist.kt b/src/main/java/com/projecturanus/betterp2p/client/gui/Infolist.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/client/gui/Infolist.kt rename to src/main/java/com/projecturanus/betterp2p/client/gui/Infolist.kt diff --git a/src/main/kotlin/com/projecturanus/betterp2p/client/gui/widget/GuiScale.kt b/src/main/java/com/projecturanus/betterp2p/client/gui/widget/GuiScale.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/client/gui/widget/GuiScale.kt rename to src/main/java/com/projecturanus/betterp2p/client/gui/widget/GuiScale.kt diff --git a/src/main/java/com/projecturanus/betterp2p/client/gui/widget/IGuiTextField.java b/src/main/java/com/projecturanus/betterp2p/client/gui/widget/IGuiTextField.java new file mode 100644 index 0000000..4672d09 --- /dev/null +++ b/src/main/java/com/projecturanus/betterp2p/client/gui/widget/IGuiTextField.java @@ -0,0 +1,14 @@ +package com.projecturanus.betterp2p.client.gui.widget; + +import appeng.client.gui.widgets.MEGuiTextField; +import com.projecturanus.betterp2p.client.gui.InfoWrapper; +import net.minecraft.client.gui.FontRenderer; + +public class IGuiTextField extends MEGuiTextField { + public InfoWrapper info = null; + + public IGuiTextField(final FontRenderer fontRenderer, final int width, final int height) { + super(fontRenderer,0, 0, width, height ); + this.setVisible(false); + } +} diff --git a/src/main/kotlin/com/projecturanus/betterp2p/client/gui/widget/Widget.kt b/src/main/java/com/projecturanus/betterp2p/client/gui/widget/Widget.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/client/gui/widget/Widget.kt rename to src/main/java/com/projecturanus/betterp2p/client/gui/widget/Widget.kt diff --git a/src/main/kotlin/com/projecturanus/betterp2p/client/gui/widget/WidgetButton.kt b/src/main/java/com/projecturanus/betterp2p/client/gui/widget/WidgetButton.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/client/gui/widget/WidgetButton.kt rename to src/main/java/com/projecturanus/betterp2p/client/gui/widget/WidgetButton.kt diff --git a/src/main/kotlin/com/projecturanus/betterp2p/client/gui/widget/WidgetP2PColumn.kt b/src/main/java/com/projecturanus/betterp2p/client/gui/widget/WidgetP2PColumn.kt similarity index 98% rename from src/main/kotlin/com/projecturanus/betterp2p/client/gui/widget/WidgetP2PColumn.kt rename to src/main/java/com/projecturanus/betterp2p/client/gui/widget/WidgetP2PColumn.kt index 080b8d7..e74be5e 100644 --- a/src/main/kotlin/com/projecturanus/betterp2p/client/gui/widget/WidgetP2PColumn.kt +++ b/src/main/java/com/projecturanus/betterp2p/client/gui/widget/WidgetP2PColumn.kt @@ -60,8 +60,8 @@ class WidgetP2PColumn(private val fontRenderer: FontRenderer, for (widget in entries){ widget.renderNameTextfield = true } - if(renameBar.info != null && renameBar.text.isNotEmpty() && renameBar.info!!.name != renameBar.text){ - val info: InfoWrapper = renameBar.info!! + if(renameBar.info != null && renameBar.text.isNotEmpty() && renameBar.info.name != renameBar.text){ + val info: InfoWrapper = renameBar.info renameBar.text = renameBar.text.trim() ModNetwork.channel.sendToServer(C2SRenameP2P(info.loc, renameBar.text)) diff --git a/src/main/kotlin/com/projecturanus/betterp2p/client/gui/widget/WidgetP2PDevice.kt b/src/main/java/com/projecturanus/betterp2p/client/gui/widget/WidgetP2PDevice.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/client/gui/widget/WidgetP2PDevice.kt rename to src/main/java/com/projecturanus/betterp2p/client/gui/widget/WidgetP2PDevice.kt diff --git a/src/main/kotlin/com/projecturanus/betterp2p/client/gui/widget/WidgetScrollBar.kt b/src/main/java/com/projecturanus/betterp2p/client/gui/widget/WidgetScrollBar.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/client/gui/widget/WidgetScrollBar.kt rename to src/main/java/com/projecturanus/betterp2p/client/gui/widget/WidgetScrollBar.kt diff --git a/src/main/kotlin/com/projecturanus/betterp2p/client/gui/widget/WidgetTypeSelector.kt b/src/main/java/com/projecturanus/betterp2p/client/gui/widget/WidgetTypeSelector.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/client/gui/widget/WidgetTypeSelector.kt rename to src/main/java/com/projecturanus/betterp2p/client/gui/widget/WidgetTypeSelector.kt diff --git a/src/main/kotlin/com/projecturanus/betterp2p/client/render/RenderHandler.kt b/src/main/java/com/projecturanus/betterp2p/client/render/RenderHandler.kt similarity index 92% rename from src/main/kotlin/com/projecturanus/betterp2p/client/render/RenderHandler.kt rename to src/main/java/com/projecturanus/betterp2p/client/render/RenderHandler.kt index 8273c9e..7ff75f5 100644 --- a/src/main/kotlin/com/projecturanus/betterp2p/client/render/RenderHandler.kt +++ b/src/main/java/com/projecturanus/betterp2p/client/render/RenderHandler.kt @@ -1,6 +1,6 @@ package com.projecturanus.betterp2p.client.render -import com.projecturanus.betterp2p.Tags +import com.projecturanus.betterp2p.MODID import com.projecturanus.betterp2p.client.ClientCache import com.projecturanus.betterp2p.item.ItemAdvancedMemoryCard import net.minecraft.client.Minecraft @@ -9,7 +9,7 @@ import net.minecraftforge.fml.common.Mod import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import net.minecraftforge.fml.relauncher.Side -@Mod.EventBusSubscriber(modid = Tags.MODID, value = [Side.CLIENT]) +@Mod.EventBusSubscriber(modid = MODID, value = [Side.CLIENT]) object RenderHandler { @JvmStatic @SubscribeEvent diff --git a/src/main/kotlin/com/projecturanus/betterp2p/client/render/WorldRenderer.kt b/src/main/java/com/projecturanus/betterp2p/client/render/WorldRenderer.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/client/render/WorldRenderer.kt rename to src/main/java/com/projecturanus/betterp2p/client/render/WorldRenderer.kt diff --git a/src/main/kotlin/com/projecturanus/betterp2p/config/BetterP2PConfig.kt b/src/main/java/com/projecturanus/betterp2p/config/BetterP2PConfig.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/config/BetterP2PConfig.kt rename to src/main/java/com/projecturanus/betterp2p/config/BetterP2PConfig.kt diff --git a/src/main/kotlin/com/projecturanus/betterp2p/item/BetterMemoryCardModes.kt b/src/main/java/com/projecturanus/betterp2p/item/BetterMemoryCardModes.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/item/BetterMemoryCardModes.kt rename to src/main/java/com/projecturanus/betterp2p/item/BetterMemoryCardModes.kt diff --git a/src/main/kotlin/com/projecturanus/betterp2p/item/ItemAdvancedMemoryCard.kt b/src/main/java/com/projecturanus/betterp2p/item/ItemAdvancedMemoryCard.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/item/ItemAdvancedMemoryCard.kt rename to src/main/java/com/projecturanus/betterp2p/item/ItemAdvancedMemoryCard.kt diff --git a/src/main/kotlin/com/projecturanus/betterp2p/item/ModItems.kt b/src/main/java/com/projecturanus/betterp2p/item/ModItems.kt similarity index 76% rename from src/main/kotlin/com/projecturanus/betterp2p/item/ModItems.kt rename to src/main/java/com/projecturanus/betterp2p/item/ModItems.kt index 817630e..241741b 100644 --- a/src/main/kotlin/com/projecturanus/betterp2p/item/ModItems.kt +++ b/src/main/java/com/projecturanus/betterp2p/item/ModItems.kt @@ -1,16 +1,16 @@ package com.projecturanus.betterp2p.item -import com.projecturanus.betterp2p.Tags +import com.projecturanus.betterp2p.MODID import net.minecraft.item.Item import net.minecraftforge.event.RegistryEvent import net.minecraftforge.fml.common.Mod import net.minecraftforge.fml.common.eventhandler.SubscribeEvent -@Mod.EventBusSubscriber(modid = Tags.MODID) +@Mod.EventBusSubscriber(modid = MODID) object ModItems { @JvmStatic @SubscribeEvent fun registerItems(event: RegistryEvent.Register) { - event.registry.register(ItemAdvancedMemoryCard.setRegistryName(Tags.MODID, "advanced_memory_card")) + event.registry.register(ItemAdvancedMemoryCard.setRegistryName(MODID, "advanced_memory_card")) } } diff --git a/src/main/kotlin/com/projecturanus/betterp2p/network/ModNetwork.kt b/src/main/java/com/projecturanus/betterp2p/network/ModNetwork.kt similarity index 98% rename from src/main/kotlin/com/projecturanus/betterp2p/network/ModNetwork.kt rename to src/main/java/com/projecturanus/betterp2p/network/ModNetwork.kt index e981bc5..be97f86 100644 --- a/src/main/kotlin/com/projecturanus/betterp2p/network/ModNetwork.kt +++ b/src/main/java/com/projecturanus/betterp2p/network/ModNetwork.kt @@ -1,7 +1,7 @@ package com.projecturanus.betterp2p.network import appeng.api.networking.IGrid -import com.projecturanus.betterp2p.Tags +import com.projecturanus.betterp2p.MODID import com.projecturanus.betterp2p.network.data.GridServerCache import com.projecturanus.betterp2p.network.data.MemoryInfo import com.projecturanus.betterp2p.network.packet.* @@ -24,7 +24,7 @@ const val NETWORK_CD = 250L * Mod network manager. Handles server <-> client communication. */ object ModNetwork { - val channel: SimpleNetworkWrapper = NetworkRegistry.INSTANCE.newSimpleChannel(Tags.MODID) + val channel: SimpleNetworkWrapper = NetworkRegistry.INSTANCE.newSimpleChannel(MODID) /** for client requests (changing viewed p2p) */ val playerState: MutableMap = Collections.synchronizedMap(WeakHashMap()) diff --git a/src/main/kotlin/com/projecturanus/betterp2p/network/ServerPlayerDisconnectHandler.kt b/src/main/java/com/projecturanus/betterp2p/network/ServerPlayerDisconnectHandler.kt similarity index 80% rename from src/main/kotlin/com/projecturanus/betterp2p/network/ServerPlayerDisconnectHandler.kt rename to src/main/java/com/projecturanus/betterp2p/network/ServerPlayerDisconnectHandler.kt index 7a6bf93..c319525 100644 --- a/src/main/kotlin/com/projecturanus/betterp2p/network/ServerPlayerDisconnectHandler.kt +++ b/src/main/java/com/projecturanus/betterp2p/network/ServerPlayerDisconnectHandler.kt @@ -1,12 +1,12 @@ package com.projecturanus.betterp2p.network -import com.projecturanus.betterp2p.Tags +import com.projecturanus.betterp2p.MODID import net.minecraftforge.fml.common.Mod import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import net.minecraftforge.fml.common.gameevent.PlayerEvent import net.minecraftforge.fml.relauncher.Side -@Mod.EventBusSubscriber(modid = Tags.MODID, value = [Side.SERVER]) +@Mod.EventBusSubscriber(modid = MODID, value = [Side.SERVER]) object ServerPlayerDisconnectHandler { @JvmStatic @SubscribeEvent diff --git a/src/main/kotlin/com/projecturanus/betterp2p/network/data/GridServerCache.kt b/src/main/java/com/projecturanus/betterp2p/network/data/GridServerCache.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/network/data/GridServerCache.kt rename to src/main/java/com/projecturanus/betterp2p/network/data/GridServerCache.kt diff --git a/src/main/kotlin/com/projecturanus/betterp2p/network/data/HashHelper.kt b/src/main/java/com/projecturanus/betterp2p/network/data/HashHelper.kt similarity index 96% rename from src/main/kotlin/com/projecturanus/betterp2p/network/data/HashHelper.kt rename to src/main/java/com/projecturanus/betterp2p/network/data/HashHelper.kt index dfa1d95..a74f453 100644 --- a/src/main/kotlin/com/projecturanus/betterp2p/network/data/HashHelper.kt +++ b/src/main/java/com/projecturanus/betterp2p/network/data/HashHelper.kt @@ -38,6 +38,7 @@ private fun fetch64(lo: ULong, hi: ULong, idx: Int): ULong { * City64 hash. It's basically black magic, but here's a link * https://opensource.googleblog.com/2011/04/introducing-cityhash.html */ +@UseExperimental(kotlin.ExperimentalStdlibApi::class) private fun hashLen16(lo: ULong, hi: ULong): ULong { val mul: ULong = k2 + 32U val a: ULong = lo + k2 diff --git a/src/main/kotlin/com/projecturanus/betterp2p/network/data/MemoryInfo.kt b/src/main/java/com/projecturanus/betterp2p/network/data/MemoryInfo.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/network/data/MemoryInfo.kt rename to src/main/java/com/projecturanus/betterp2p/network/data/MemoryInfo.kt diff --git a/src/main/kotlin/com/projecturanus/betterp2p/network/data/P2PInfo.kt b/src/main/java/com/projecturanus/betterp2p/network/data/P2PInfo.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/network/data/P2PInfo.kt rename to src/main/java/com/projecturanus/betterp2p/network/data/P2PInfo.kt diff --git a/src/main/kotlin/com/projecturanus/betterp2p/network/data/P2PLocation.kt b/src/main/java/com/projecturanus/betterp2p/network/data/P2PLocation.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/network/data/P2PLocation.kt rename to src/main/java/com/projecturanus/betterp2p/network/data/P2PLocation.kt diff --git a/src/main/kotlin/com/projecturanus/betterp2p/network/packet/C2SCloseGui.kt b/src/main/java/com/projecturanus/betterp2p/network/packet/C2SCloseGui.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/network/packet/C2SCloseGui.kt rename to src/main/java/com/projecturanus/betterp2p/network/packet/C2SCloseGui.kt diff --git a/src/main/kotlin/com/projecturanus/betterp2p/network/packet/C2SLinkP2P.kt b/src/main/java/com/projecturanus/betterp2p/network/packet/C2SLinkP2P.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/network/packet/C2SLinkP2P.kt rename to src/main/java/com/projecturanus/betterp2p/network/packet/C2SLinkP2P.kt diff --git a/src/main/kotlin/com/projecturanus/betterp2p/network/packet/C2SRefreshP2PList.kt b/src/main/java/com/projecturanus/betterp2p/network/packet/C2SRefreshP2PList.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/network/packet/C2SRefreshP2PList.kt rename to src/main/java/com/projecturanus/betterp2p/network/packet/C2SRefreshP2PList.kt diff --git a/src/main/kotlin/com/projecturanus/betterp2p/network/packet/C2SRenameP2P.kt b/src/main/java/com/projecturanus/betterp2p/network/packet/C2SRenameP2P.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/network/packet/C2SRenameP2P.kt rename to src/main/java/com/projecturanus/betterp2p/network/packet/C2SRenameP2P.kt diff --git a/src/main/kotlin/com/projecturanus/betterp2p/network/packet/C2STypeChange.kt b/src/main/java/com/projecturanus/betterp2p/network/packet/C2STypeChange.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/network/packet/C2STypeChange.kt rename to src/main/java/com/projecturanus/betterp2p/network/packet/C2STypeChange.kt diff --git a/src/main/kotlin/com/projecturanus/betterp2p/network/packet/C2SUnlinkP2P.kt b/src/main/java/com/projecturanus/betterp2p/network/packet/C2SUnlinkP2P.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/network/packet/C2SUnlinkP2P.kt rename to src/main/java/com/projecturanus/betterp2p/network/packet/C2SUnlinkP2P.kt diff --git a/src/main/kotlin/com/projecturanus/betterp2p/network/packet/C2SUpdateMemoryInfo.kt b/src/main/java/com/projecturanus/betterp2p/network/packet/C2SUpdateMemoryInfo.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/network/packet/C2SUpdateMemoryInfo.kt rename to src/main/java/com/projecturanus/betterp2p/network/packet/C2SUpdateMemoryInfo.kt diff --git a/src/main/kotlin/com/projecturanus/betterp2p/network/packet/S2COpenGui.kt b/src/main/java/com/projecturanus/betterp2p/network/packet/S2COpenGui.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/network/packet/S2COpenGui.kt rename to src/main/java/com/projecturanus/betterp2p/network/packet/S2COpenGui.kt diff --git a/src/main/kotlin/com/projecturanus/betterp2p/network/packet/S2CUpdateP2P.kt b/src/main/java/com/projecturanus/betterp2p/network/packet/S2CUpdateP2P.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/network/packet/S2CUpdateP2P.kt rename to src/main/java/com/projecturanus/betterp2p/network/packet/S2CUpdateP2P.kt diff --git a/src/main/kotlin/com/projecturanus/betterp2p/util/CableBusUtil.kt b/src/main/java/com/projecturanus/betterp2p/util/CableBusUtil.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/util/CableBusUtil.kt rename to src/main/java/com/projecturanus/betterp2p/util/CableBusUtil.kt diff --git a/src/main/kotlin/com/projecturanus/betterp2p/util/p2p/P2PUtil.kt b/src/main/java/com/projecturanus/betterp2p/util/p2p/P2PUtil.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/util/p2p/P2PUtil.kt rename to src/main/java/com/projecturanus/betterp2p/util/p2p/P2PUtil.kt diff --git a/src/main/kotlin/com/projecturanus/betterp2p/util/p2p/TunnelInfo.kt b/src/main/java/com/projecturanus/betterp2p/util/p2p/TunnelInfo.kt similarity index 100% rename from src/main/kotlin/com/projecturanus/betterp2p/util/p2p/TunnelInfo.kt rename to src/main/java/com/projecturanus/betterp2p/util/p2p/TunnelInfo.kt diff --git a/src/main/kotlin/com/projecturanus/betterp2p/client/gui/widget/IGuiTextField.kt b/src/main/kotlin/com/projecturanus/betterp2p/client/gui/widget/IGuiTextField.kt deleted file mode 100644 index 71f26bb..0000000 --- a/src/main/kotlin/com/projecturanus/betterp2p/client/gui/widget/IGuiTextField.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.projecturanus.betterp2p.client.gui.widget - -import appeng.client.gui.widgets.MEGuiTextField -import com.projecturanus.betterp2p.client.gui.InfoWrapper -import net.minecraft.client.gui.FontRenderer - -class IGuiTextField(fontRenderer: FontRenderer, width: Int, height: Int) : MEGuiTextField(fontRenderer, 0, 0, width, height) { - var info: InfoWrapper? = null - - init { - this.visible = false - } -}