diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9917fc4 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,35 @@ +* text eol=lf + +*.jar binary + +*.png binary +*.jpg binary +*.jpeg binary +*.gif binary +*.tif binary +*.tiff binary +*.ico binary +*.svg text +*.eps binary + +*.kar binary +*.m4a binary +*.mid binary +*.midi binary +*.mp3 binary +*.ogg binary +*.ra binary + +*.7z binary +*.gz binary +*.tar binary +*.tgz binary +*.zip binary + +*.patch -text + +*.bat text eol=crlf +*.cmd text eol=crlf +*.ps1 text eol=crlf + +*autogenerated binary \ No newline at end of file diff --git a/build.gradle b/build.gradle index c8cf37c..997b94d 100644 --- a/build.gradle +++ b/build.gradle @@ -1,26 +1,36 @@ -//version: 1644894948 +//version: 1661114848 /* -DO NOT CHANGE THIS FILE! + 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/GTNewHorizons/ExampleMod1.7.10/blob/main/build.gradle for updates. + */ -Also, you may replace this file at any time if there is an update available. -Please check https://github.com/GTNewHorizons/ExampleMod1.7.10/blob/main/build.gradle for updates. -*/ - -import org.gradle.internal.logging.text.StyledTextOutput -import org.gradle.internal.logging.text.StyledTextOutputFactory -import org.gradle.internal.logging.text.StyledTextOutput.Style import com.github.jengelman.gradle.plugins.shadow.tasks.ConfigureShadowRelocation import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar +import org.gradle.internal.logging.text.StyledTextOutput.Style +import org.gradle.internal.logging.text.StyledTextOutputFactory +import java.nio.file.Files +import java.nio.file.Paths import java.util.concurrent.TimeUnit +import java.util.zip.ZipEntry +import java.util.zip.ZipInputStream +import java.util.zip.ZipOutputStream buildscript { repositories { + mavenCentral() + maven { name 'forge' url 'https://maven.minecraftforge.net' } + maven { + // GTNH ForgeGradle Fork + name = "GTNH Maven" + url = "http://jenkins.usrv.eu:8081/nexus/content/groups/public/" + } maven { name 'sonatype' url 'https://oss.sonatype.org/content/repositories/snapshots/' @@ -29,30 +39,37 @@ buildscript { name 'Scala CI dependencies' url 'https://repo1.maven.org/maven2/' } - maven { - name 'jitpack' - url 'https://jitpack.io' - } } dependencies { - classpath 'com.github.GTNewHorizons:ForgeGradle:1.2.7' + classpath 'net.minecraftforge.gradle:ForgeGradle:1.2.9' } } - plugins { id 'java-library' id 'idea' id 'eclipse' id 'scala' id 'maven-publish' - id 'org.jetbrains.kotlin.jvm' version '1.5.30' apply false - id 'org.jetbrains.kotlin.kapt' version '1.5.30' apply false - id 'org.ajoberstar.grgit' version '4.1.1' + id 'org.jetbrains.kotlin.jvm' version '1.5.30' apply false + id 'org.jetbrains.kotlin.kapt' version '1.5.30' apply false + id 'com.google.devtools.ksp' version '1.5.30-1.0.0' apply false + id 'org.ajoberstar.grgit' version '4.1.1' id 'com.github.johnrengelman.shadow' version '4.0.4' - id 'com.palantir.git-version' version '0.13.0' apply false - id 'de.undercouch.download' version '5.0.1' - id 'com.github.gmazzo.buildconfig' version '3.0.3' apply false + id 'com.palantir.git-version' version '0.13.0' apply false + id 'de.undercouch.download' version '5.0.1' + id 'com.github.gmazzo.buildconfig' version '3.0.3' apply false + id 'com.diffplug.spotless' version '6.7.2' apply false } +boolean settingsupdated = verifySettingsGradle() +settingsupdated = verifyGitAttributes() || settingsupdated +if (settingsupdated) + throw new GradleException("Settings has been updated, please re-run task.") + +dependencies { + implementation 'com.diffplug:blowdryer:1.6.0' +} + +apply plugin: 'com.diffplug.blowdryer' if (project.file('.git/HEAD').isFile()) { apply plugin: 'com.palantir.git-version' @@ -78,7 +95,14 @@ idea { } } -if(JavaVersion.current() != JavaVersion.VERSION_1_8) { +boolean disableSpotless = project.hasProperty("disableSpotless") ? project.disableSpotless.toBoolean() : false + +if (!disableSpotless) { + apply plugin: 'com.diffplug.spotless' + apply from: Blowdryer.file('spotless.gradle') +} + +if (JavaVersion.current() != JavaVersion.VERSION_1_8) { throw new GradleException("This project requires Java 8, but it's running on " + JavaVersion.current()) } @@ -103,8 +127,11 @@ checkPropertyExists("containsMixinsAndOrCoreModOnly") checkPropertyExists("usesShadowedDependencies") checkPropertyExists("developmentEnvironmentUserName") -boolean noPublishedSources = project.findProperty("noPublishedSources") ? project.noPublishedSources.toBoolean() : false - +boolean noPublishedSources = project.hasProperty("noPublishedSources") ? project.noPublishedSources.toBoolean() : false +boolean usesMixinDebug = project.hasProperty('usesMixinDebug') ?: project.usesMixins.toBoolean() +boolean forceEnableMixins = project.hasProperty('forceEnableMixins') ? project.forceEnableMixins.toBoolean() : false +String channel = project.hasProperty('channel') ? project.channel : 'stable' +String mappingsVersion = project.hasProperty('mappingsVersion') ? project.mappingsVersion : '12' String javaSourceDir = "src/main/java/" String scalaSourceDir = "src/main/scala/" String kotlinSourceDir = "src/main/kotlin/" @@ -112,53 +139,53 @@ String kotlinSourceDir = "src/main/kotlin/" String targetPackageJava = javaSourceDir + modGroup.toString().replaceAll("\\.", "/") String targetPackageScala = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") String targetPackageKotlin = kotlinSourceDir + modGroup.toString().replaceAll("\\.", "/") -if(!(getFile(targetPackageJava).exists() || getFile(targetPackageScala).exists() || getFile(targetPackageKotlin).exists())) { +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) { +if (apiPackage) { targetPackageJava = javaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString().replaceAll("\\.", "/") targetPackageScala = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString().replaceAll("\\.", "/") targetPackageKotlin = kotlinSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString().replaceAll("\\.", "/") - if(!(getFile(targetPackageJava).exists() || getFile(targetPackageScala).exists() || getFile(targetPackageKotlin).exists())) { + 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) { +if (accessTransformersFile) { String targetFile = "src/main/resources/META-INF/" + accessTransformersFile - if(!getFile(targetFile).exists()) { + if (!getFile(targetFile).exists()) { throw new GradleException("Could not resolve \"accessTransformersFile\"! Could not find " + targetFile) } } -if(usesMixins.toBoolean()) { - if(mixinsPackage.isEmpty() || mixinPlugin.isEmpty()) { +if (usesMixins.toBoolean()) { + if (mixinsPackage.isEmpty() || mixinPlugin.isEmpty()) { throw new GradleException("\"mixinPlugin\" requires \"mixinsPackage\" and \"mixinPlugin\" to be set!") } targetPackageJava = javaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinsPackage.toString().replaceAll("\\.", "/") targetPackageScala = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinsPackage.toString().replaceAll("\\.", "/") targetPackageKotlin = kotlinSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinsPackage.toString().replaceAll("\\.", "/") - 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 (!(getFile(targetPackageJava).exists() || getFile(targetPackageScala).exists() || getFile(targetPackageKotlin).exists())) { + throw new GradleException("Could not resolve \"mixinsPackage\"! Could not find " + targetPackageJava + " or " + targetPackageScala + " or " + targetPackageKotlin) } String targetFileJava = javaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinPlugin.toString().replaceAll("\\.", "/") + ".java" String targetFileScala = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinPlugin.toString().replaceAll("\\.", "/") + ".scala" String targetFileScalaJava = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinPlugin.toString().replaceAll("\\.", "/") + ".java" String targetFileKotlin = kotlinSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + mixinPlugin.toString().replaceAll("\\.", "/") + ".kt" - if(!(getFile(targetFileJava).exists() || getFile(targetFileScala).exists() || getFile(targetFileScalaJava).exists() || getFile(targetFileKotlin).exists())) { + if (!(getFile(targetFileJava).exists() || getFile(targetFileScala).exists() || getFile(targetFileScalaJava).exists() || getFile(targetFileKotlin).exists())) { throw new GradleException("Could not resolve \"mixinPlugin\"! Could not find " + targetFileJava + " or " + targetFileScala + " or " + targetFileScalaJava + " or " + targetFileKotlin) } } -if(coreModClass) { +if (coreModClass) { String targetFileJava = javaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + coreModClass.toString().replaceAll("\\.", "/") + ".java" String targetFileScala = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + coreModClass.toString().replaceAll("\\.", "/") + ".scala" String targetFileScalaJava = scalaSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + coreModClass.toString().replaceAll("\\.", "/") + ".java" String targetFileKotlin = kotlinSourceDir + modGroup.toString().replaceAll("\\.", "/") + "/" + coreModClass.toString().replaceAll("\\.", "/") + ".kt" - if(!(getFile(targetFileJava).exists() || getFile(targetFileScala).exists() || getFile(targetFileScalaJava).exists() || getFile(targetFileKotlin).exists())) { + 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) } } @@ -188,7 +215,7 @@ try { catch (Exception ignored) { out.style(Style.Failure).text( 'This mod must be version controlled by Git AND the repository must provide at least one tag,\n' + - 'or the VERSION override must be set! ').style(Style.SuccessHeader).text('(Do NOT download from GitHub using the ZIP option, instead\n' + + 'or the VERSION override must be set! ').style(Style.SuccessHeader).text('(Do NOT download from GitHub using the ZIP option, instead\n' + 'clone the repository, see ').style(Style.Info).text('https://gtnh.miraheze.org/wiki/Development').style(Style.SuccessHeader).println(' for details.)' ) versionOverride = 'NO-GIT-TAG-SET' @@ -199,28 +226,31 @@ ext { modVersion = identifiedVersion } -if(identifiedVersion == versionOverride) { +if (identifiedVersion == versionOverride) { out.style(Style.Failure).text('Override version to ').style(Style.Identifier).text(modVersion).style(Style.Failure).println('!\7') } group = modGroup -if(project.hasProperty("customArchiveBaseName") && customArchiveBaseName) { +if (project.hasProperty("customArchiveBaseName") && customArchiveBaseName) { archivesBaseName = customArchiveBaseName -} -else { +} else { archivesBaseName = modId } def arguments = [] def jvmArguments = [] -if(usesMixins.toBoolean()) { +if (usesMixins.toBoolean() || forceEnableMixins) { arguments += [ - "--tweakClass org.spongepowered.asm.launch.MixinTweaker" - ] - jvmArguments += [ - "-Dmixin.debug.countInjections=true", "-Dmixin.debug.verbose=true", "-Dmixin.debug.export=true" + "--tweakClass org.spongepowered.asm.launch.MixinTweaker" ] + if (usesMixinDebug.toBoolean()) { + jvmArguments += [ + "-Dmixin.debug.countInjections=true", + "-Dmixin.debug.verbose=true", + "-Dmixin.debug.export=true" + ] + } } minecraft { @@ -229,16 +259,16 @@ minecraft { if (replaceGradleTokenInFile) { replaceIn replaceGradleTokenInFile - if(gradleTokenModId) { + if (gradleTokenModId) { replace gradleTokenModId, modId } - if(gradleTokenModName) { + if (gradleTokenModName) { replace gradleTokenModName, modName } - if(gradleTokenVersion) { + if (gradleTokenVersion) { replace gradleTokenVersion, modVersion } - if(gradleTokenGroupName) { + if (gradleTokenGroupName) { replace gradleTokenGroupName, modGroup } } @@ -247,7 +277,7 @@ minecraft { args(arguments) jvmArgs(jvmArguments) - if(developmentEnvironmentUserName) { + if (developmentEnvironmentUserName) { args("--username", developmentEnvironmentUserName) } } @@ -258,7 +288,7 @@ minecraft { } } -if(file('addon.gradle').exists()) { +if (file('addon.gradle').exists()) { apply from: 'addon.gradle' } @@ -275,7 +305,7 @@ repositories { name 'Overmind forge repo mirror' url 'https://gregtech.overminddl1.com/' } - if(usesMixins.toBoolean()) { + if (usesMixins.toBoolean() || forceEnableMixins) { maven { name 'sponge' url 'https://repo.spongepowered.org/repository/maven-public' @@ -287,11 +317,13 @@ repositories { } dependencies { - if(usesMixins.toBoolean()) { + if (usesMixins.toBoolean()) { annotationProcessor('org.ow2.asm:asm-debug-all:5.0.3') annotationProcessor('com.google.guava:guava:24.1.1-jre') annotationProcessor('com.google.code.gson:gson:2.8.6') annotationProcessor('org.spongepowered:mixin:0.8-SNAPSHOT') + } + if (usesMixins.toBoolean() || forceEnableMixins) { // using 0.8 to workaround a issue in 0.7 which fails mixin application compile('com.github.GTNewHorizons:SpongePoweredMixin:0.7.12-GTNH') { // Mixin includes a lot of dependencies that are too up-to-date @@ -312,18 +344,23 @@ def refMap = "${tasks.compileJava.temporaryDir}" + File.separator + mixingConfig def mixinSrg = "${tasks.reobf.temporaryDir}" + File.separator + "mixins.srg" task generateAssets { - if(usesMixins.toBoolean()) { - getFile("/src/main/resources/mixins." + modId + ".json").text = """{ + if (usesMixins.toBoolean()) { + def mixinConfigFile = getFile("/src/main/resources/mixins." + modId + ".json"); + if (!mixinConfigFile.exists()) { + mixinConfigFile.text = """{ "required": true, "minVersion": "0.7.11", "package": "${modGroup}.${mixinsPackage}", "plugin": "${modGroup}.${mixinPlugin}", "refmap": "${mixingConfigRefMap}", "target": "@env(DEFAULT)", - "compatibilityLevel": "JAVA_8" + "compatibilityLevel": "JAVA_8", + "mixins": [], + "client": [], + "server": [] } - """ + } } } @@ -344,7 +381,10 @@ shadowJar { } minimize() // This will only allow shading for actually used classes - configurations = [project.configurations.shadowImplementation, project.configurations.shadowCompile] + configurations = [ + project.configurations.shadowImplementation, + project.configurations.shadowCompile + ] dependsOn(relocateShadowJar) } @@ -359,38 +399,38 @@ jar { attributes(getManifestAttributes()) } - if(usesShadowedDependencies.toBoolean()) { + if (usesShadowedDependencies.toBoolean()) { dependsOn(shadowJar) enabled = false } } reobf { - if(usesMixins.toBoolean()) { + if (usesMixins.toBoolean()) { addExtraSrgFile mixinSrg } } afterEvaluate { - if(usesMixins.toBoolean()) { + if (usesMixins.toBoolean()) { tasks.compileJava { options.compilerArgs += [ - "-AreobfSrgFile=${tasks.reobf.srg}", - "-AoutSrgFile=${mixinSrg}", - "-AoutRefMapFile=${refMap}", - // Elan: from what I understand they are just some linter configs so you get some warning on how to properly code - "-XDenableSunApiLintControl", - "-XDignore.symbol.file" + "-AreobfSrgFile=${tasks.reobf.srg}", + "-AoutSrgFile=${mixinSrg}", + "-AoutRefMapFile=${refMap}", + // Elan: from what I understand they are just some linter configs so you get some warning on how to properly code + "-XDenableSunApiLintControl", + "-XDignore.symbol.file" ] } } } runClient { - if(developmentEnvironmentUserName) { + if (developmentEnvironmentUserName) { arguments += [ - "--username", - developmentEnvironmentUserName + "--username", + developmentEnvironmentUserName ] } @@ -405,9 +445,9 @@ runServer { tasks.withType(JavaExec).configureEach { javaLauncher.set( - javaToolchains.launcherFor { - languageVersion = projectJavaVersion - } + javaToolchains.launcherFor { + languageVersion = projectJavaVersion + } ) } @@ -415,6 +455,7 @@ processResources { // this will ensure that this task is redone when the versions change. inputs.property "version", project.version inputs.property "mcversion", project.minecraft.version + exclude("spotless.gradle") // replace stuff in mcmod.info, nothing else from(sourceSets.main.resources.srcDirs) { @@ -427,43 +468,44 @@ processResources { "modName": modName } - if(usesMixins.toBoolean()) { + if (usesMixins.toBoolean()) { from refMap } // copy everything else that's not the mcmod.info from(sourceSets.main.resources.srcDirs) { exclude 'mcmod.info' + exclude 'spotless.gradle' } } def getManifestAttributes() { def manifestAttributes = [:] - if(!containsMixinsAndOrCoreModOnly.toBoolean() && (usesMixins.toBoolean() || coreModClass)) { + if (!containsMixinsAndOrCoreModOnly.toBoolean() && (usesMixins.toBoolean() || coreModClass)) { manifestAttributes += ["FMLCorePluginContainsFMLMod": true] } - if(accessTransformersFile) { - manifestAttributes += ["FMLAT" : accessTransformersFile.toString()] + if (accessTransformersFile) { + manifestAttributes += ["FMLAT": accessTransformersFile.toString()] } - if(coreModClass) { + if (coreModClass) { manifestAttributes += ["FMLCorePlugin": modGroup + "." + coreModClass] } - if(usesMixins.toBoolean()) { + if (usesMixins.toBoolean()) { manifestAttributes += [ - "TweakClass" : "org.spongepowered.asm.launch.MixinTweaker", - "MixinConfigs" : "mixins." + modId + ".json", - "ForceLoadAsMod" : !containsMixinsAndOrCoreModOnly.toBoolean() + "TweakClass" : "org.spongepowered.asm.launch.MixinTweaker", + "MixinConfigs" : "mixins." + modId + ".json", + "ForceLoadAsMod": !containsMixinsAndOrCoreModOnly.toBoolean() ] } return manifestAttributes } task sourcesJar(type: Jar) { - from (sourceSets.main.allJava) - from (file("$projectDir/LICENSE")) + from(sourceSets.main.allSource) + from(file("$projectDir/LICENSE")) getArchiveClassifier().set('sources') } @@ -482,7 +524,10 @@ task shadowDevJar(type: ShadowJar) { } minimize() // This will only allow shading for actually used classes - configurations = [project.configurations.shadowImplementation, project.configurations.shadowCompile] + configurations = [ + project.configurations.shadowImplementation, + project.configurations.shadowCompile + ] } task relocateShadowDevJar(type: ConfigureShadowRelocation) { @@ -510,22 +555,22 @@ task devJar(type: Jar) { attributes(getManifestAttributes()) } - if(usesShadowedDependencies.toBoolean()) { + if (usesShadowedDependencies.toBoolean()) { dependsOn(circularResolverJar) enabled = false } } task apiJar(type: Jar) { - from (sourceSets.main.allJava) { + from(sourceSets.main.allSource) { include modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString().replaceAll("\\.", "/") + '/**' } - from (sourceSets.main.output) { + from(sourceSets.main.output) { include modGroup.toString().replaceAll("\\.", "/") + "/" + apiPackage.toString().replaceAll("\\.", "/") + '/**' } - from (sourceSets.main.resources.srcDirs) { + from(sourceSets.main.resources.srcDirs) { include("LICENSE") } @@ -533,11 +578,11 @@ task apiJar(type: Jar) { } artifacts { - if(!noPublishedSources) { + if (!noPublishedSources) { archives sourcesJar } archives devJar - if(apiPackage) { + if (apiPackage) { archives apiJar } } @@ -555,11 +600,11 @@ publishing { publications { maven(MavenPublication) { from components.java - if(usesShadowedDependencies.toBoolean()) { + if (usesShadowedDependencies.toBoolean()) { artifact source: shadowJar, classifier: "" } - if(!noPublishedSources) { - artifact source: sourcesJar, classifier: "src" + if (!noPublishedSources) { + artifact source: sourcesJar, classifier: "sources" } artifact source: usesShadowedDependencies.toBoolean() ? shadowDevJar : devJar, classifier: "dev" if (apiPackage) { @@ -573,8 +618,11 @@ publishing { // remove extra garbage from minecraft and minecraftDeps configuration pom.withXml { - def badArtifacts = [:].withDefault {[] as Set} - for (configuration in [projectConfigs.minecraft, projectConfigs.minecraftDeps]) { + def badArtifacts = [:].withDefault { [] as Set } + for (configuration in [ + projectConfigs.minecraft, + projectConfigs.minecraftDeps + ]) { for (dependency in configuration.allDependencies) { badArtifacts[dependency.group == null ? "" : dependency.group] += dependency.name } @@ -612,7 +660,7 @@ task updateBuildScript { } } -if (isNewBuildScriptVersionAvailable(projectDir.toString())) { +if (!project.getGradle().startParameter.isOffline() && isNewBuildScriptVersionAvailable(projectDir.toString())) { if (autoUpdateBuildScript.toBoolean()) { performBuildScriptUpdate(projectDir.toString()) } else { @@ -621,7 +669,40 @@ if (isNewBuildScriptVersionAvailable(projectDir.toString())) { } static URL availableBuildScriptUrl() { - new URL("https://raw.githubusercontent.com/GTNewHorizons/ExampleMod1.7.10/main/build.gradle") + new URL("https://raw.githubusercontent.com/GTNewHorizons/ExampleMod1.7.10/master/build.gradle") +} + +static URL exampleSettingsGradleUrl() { + new URL("https://raw.githubusercontent.com/GTNewHorizons/ExampleMod1.7.10/master/settings.gradle.example") +} + +static URL exampleGitAttributesUrl() { + new URL("https://raw.githubusercontent.com/GTNewHorizons/ExampleMod1.7.10/master/.gitattributes") +} + + +boolean verifyGitAttributes() { + def gitattributesFile = getFile(".gitattributes") + if (!gitattributesFile.exists()) { + println("Downloading default .gitattributes") + exampleGitAttributesUrl().withInputStream { i -> gitattributesFile.withOutputStream { it << i } } + exec { + workingDir '.' + commandLine 'git', 'add', '--renormalize', '.' + } + return true + } + return false +} + +boolean verifySettingsGradle() { + def settingsFile = getFile("settings.gradle") + if (!settingsFile.exists()) { + println("Downloading default settings.gradle") + exampleSettingsGradleUrl().withInputStream { i -> settingsFile.withOutputStream { it << i } } + return true + } + return false } boolean performBuildScriptUpdate(String projectDir) { @@ -629,6 +710,10 @@ boolean performBuildScriptUpdate(String projectDir) { def buildscriptFile = getFile("build.gradle") availableBuildScriptUrl().withInputStream { i -> buildscriptFile.withOutputStream { it << i } } out.style(Style.Success).print("Build script updated. Please REIMPORT the project or RESTART your IDE!") + boolean settingsupdated = verifySettingsGradle() + settingsupdated = verifyGitAttributes() || settingsupdated + if (settingsupdated) + throw new GradleException("Settings has been updated, please re-run task.") return true } return false @@ -648,7 +733,7 @@ boolean isNewBuildScriptVersionAvailable(String projectDir) { static String getVersionHash(String buildScriptContent) { String versionLine = buildScriptContent.find("^//version: [a-z0-9]*") - if(versionLine != null) { + if (versionLine != null) { return versionLine.split(": ").last() } return "" @@ -659,7 +744,103 @@ configure(updateBuildScript) { description = 'Updates the build script to the latest version' } -// Deobfuscation +// Parameter Deobfuscation + +task deobfParams { + doLast { + + String mcpDir = "$project.gradle.gradleUserHomeDir/caches/minecraft/de/oceanlabs/mcp/mcp_$channel/$mappingsVersion" + String mcpZIP = "$mcpDir/mcp_$channel-$mappingsVersion-${minecraftVersion}.zip" + String paramsCSV = "$mcpDir/params.csv" + + download.run { + src "https://maven.minecraftforge.net/de/oceanlabs/mcp/mcp_$channel/$mappingsVersion-$minecraftVersion/mcp_$channel-$mappingsVersion-${minecraftVersion}.zip" + dest mcpZIP + overwrite false + } + + if (!file(paramsCSV).exists()) { + println("Extracting MCP archive ...") + unzip(mcpZIP, mcpDir) + } + + println("Parsing params.csv ...") + Map params = new HashMap<>() + Files.lines(Paths.get(paramsCSV)).forEach { line -> + String[] cells = line.split(",") + if (cells.length > 2 && cells[0].matches("p_i?\\d+_\\d+_")) { + params.put(cells[0], cells[1]) + } + } + + out.style(Style.Success).println("Modified ${replaceParams(file("$projectDir/src/main/java"), params)} files!") + out.style(Style.Failure).println("Don't forget to verify that the code still works as before!\n It could be broken due to duplicate variables existing now\n or parameters taking priority over other variables.") + } +} + +static int replaceParams(File file, Map params) { + int fileCount = 0 + + if (file.isDirectory()) { + for (File f : file.listFiles()) { + fileCount += replaceParams(f, params) + } + return fileCount + } + println("Visiting ${file.getName()} ...") + try { + String content = new String(Files.readAllBytes(file.toPath())) + int hash = content.hashCode() + params.forEach { key, value -> + content = content.replaceAll(key, value) + } + if (hash != content.hashCode()) { + Files.write(file.toPath(), content.getBytes("UTF-8")) + return 1 + } + } catch (Exception e) { + e.printStackTrace() + } + return 0 +} + +// Credit: bitsnaps (https://gist.github.com/bitsnaps/00947f2dce66f4bbdabc67d7e7b33681) +static unzip(String zipFileName, String outputDir) { + byte[] buffer = new byte[16384] + ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFileName)) + ZipEntry zipEntry = zis.getNextEntry() + while (zipEntry != null) { + File newFile = new File(outputDir + File.separator, zipEntry.name) + if (zipEntry.isDirectory()) { + if (!newFile.isDirectory() && !newFile.mkdirs()) { + throw new IOException("Failed to create directory $newFile") + } + } else { + // fix for Windows-created archives + File parent = newFile.parentFile + if (!parent.isDirectory() && !parent.mkdirs()) { + throw new IOException("Failed to create directory $parent") + } + // write file content + FileOutputStream fos = new FileOutputStream(newFile) + int len = 0 + while ((len = zis.read(buffer)) > 0) { + fos.write(buffer, 0, len) + } + fos.close() + } + zipEntry = zis.getNextEntry() + } + zis.closeEntry() + zis.close() +} + +configure(deobfParams) { + group = 'forgegradle' + description = 'Rename all obfuscated parameter names inherited from Minecraft classes' +} + +// Dependency Deobfuscation def deobf(String sourceURL) { try { @@ -668,42 +849,57 @@ def deobf(String sourceURL) { //get rid of directories: int lastSlash = fileName.lastIndexOf("/") - if(lastSlash > 0) { + if (lastSlash > 0) { fileName = fileName.substring(lastSlash + 1) } //get rid of extension: - if(fileName.endsWith(".jar")) { + if (fileName.endsWith(".jar") || fileName.endsWith(".litemod")) { fileName = fileName.substring(0, fileName.lastIndexOf(".")) } String hostName = url.getHost() - if(hostName.startsWith("www.")) { + if (hostName.startsWith("www.")) { hostName = hostName.substring(4) } List parts = Arrays.asList(hostName.split("\\.")) Collections.reverse(parts) hostName = String.join(".", parts) - return deobf(sourceURL, hostName + "/" + fileName) - } catch(Exception e) { - return deobf(sourceURL, "deobf/" + String.valueOf(sourceURL.hashCode())) + return deobf(sourceURL, "$hostName/$fileName") + } catch (Exception e) { + return deobf(sourceURL, "deobf/${sourceURL.hashCode()}") } } // The method above is to be preferred. Use this method if the filename is not at the end of the URL. -def deobf(String sourceURL, String fileName) { - String cacheDir = System.getProperty("user.home") + "/.gradle/caches/" - String bon2Dir = cacheDir + "forge_gradle/deobf" - String bon2File = bon2Dir + "/BON2-2.5.0.jar" - String obfFile = cacheDir + "modules-2/files-2.1/" + fileName + ".jar" - String deobfFile = cacheDir + "modules-2/files-2.1/" + fileName + "-deobf.jar" +def deobf(String sourceURL, String rawFileName) { + String bon2Version = "2.5.1" + String fileName = URLDecoder.decode(rawFileName, "UTF-8") + String cacheDir = "$project.gradle.gradleUserHomeDir/caches" + String bon2Dir = "$cacheDir/forge_gradle/deobf" + String bon2File = "$bon2Dir/BON2-${bon2Version}.jar" + String obfFile = "$cacheDir/modules-2/files-2.1/${fileName}.jar" + String deobfFile = "$cacheDir/modules-2/files-2.1/${fileName}-deobf.jar" - if(file(deobfFile).exists()) { + if (file(deobfFile).exists()) { return files(deobfFile) } + String mappingsVer + String remoteMappings = project.hasProperty('remoteMappings') ? project.remoteMappings : 'https://raw.githubusercontent.com/MinecraftForge/FML/1.7.10/conf/' + if (remoteMappings) { + String id = "${forgeVersion.split("\\.")[3]}-$minecraftVersion" + String mappingsZIP = "$cacheDir/forge_gradle/maven_downloader/de/oceanlabs/mcp/mcp_snapshot_nodoc/$id/mcp_snapshot_nodoc-${id}.zip" + + zipMappings(mappingsZIP, remoteMappings, bon2Dir) + + mappingsVer = "snapshot_$id" + } else { + mappingsVer = "${channel}_$mappingsVersion" + } + download.run { - src 'https://github.com/GTNewHorizons/BON2/releases/download/2.5.0/BON2-2.5.0.CUSTOM-all.jar' + src "http://jenkins.usrv.eu:8081/nexus/content/repositories/releases/com/github/parker8283/BON2/$bon2Version-CUSTOM/BON2-$bon2Version-CUSTOM-all.jar" dest bon2File quiet true overwrite false @@ -717,14 +913,48 @@ def deobf(String sourceURL, String fileName) { } exec { - commandLine 'java', '-jar', bon2File, '--inputJar', obfFile, '--outputJar', deobfFile, '--mcVer', '1.7.10', '--mappingsVer', 'stable_12', '--notch' + commandLine 'java', '-jar', bon2File, '--inputJar', obfFile, '--outputJar', deobfFile, '--mcVer', minecraftVersion, '--mappingsVer', mappingsVer, '--notch' workingDir bon2Dir - standardOutput = new ByteArrayOutputStream() + standardOutput = new FileOutputStream("${deobfFile}.log") } return files(deobfFile) } +def zipMappings(String zipPath, String url, String bon2Dir) { + File zipFile = new File(zipPath) + if (zipFile.exists()) { + return + } + + String fieldsCache = "$bon2Dir/data/fields.csv" + String methodsCache = "$bon2Dir/data/methods.csv" + + download.run { + src "${url}fields.csv" + dest fieldsCache + quiet true + } + download.run { + src "${url}methods.csv" + dest methodsCache + quiet true + } + + zipFile.getParentFile().mkdirs() + ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile)) + + zos.putNextEntry(new ZipEntry("fields.csv")) + Files.copy(Paths.get(fieldsCache), zos) + zos.closeEntry() + + zos.putNextEntry(new ZipEntry("methods.csv")) + Files.copy(Paths.get(methodsCache), zos) + zos.closeEntry() + + zos.close() +} + // Helper methods def checkPropertyExists(String propertyName) { diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..93c852a --- /dev/null +++ b/settings.gradle @@ -0,0 +1,10 @@ +plugins { + id 'com.diffplug.blowdryerSetup' version '1.6.0' +} + +apply plugin: 'com.diffplug.blowdryerSetup' + +blowdryerSetup { + github('GTNewHorizons/ExampleMod1.7.10', 'tag', '0.1.5') + //devLocal '.' // Use this when testing config updates locally +} diff --git a/src/main/java/codechicken/core/CCUpdateChecker.java b/src/main/java/codechicken/core/CCUpdateChecker.java index 5616434..7f26b41 100644 --- a/src/main/java/codechicken/core/CCUpdateChecker.java +++ b/src/main/java/codechicken/core/CCUpdateChecker.java @@ -1,5 +1,10 @@ package codechicken.core; +import codechicken.core.launch.CodeChickenCorePlugin; +import com.google.common.base.Function; +import cpw.mods.fml.common.Loader; +import cpw.mods.fml.common.versioning.ComparableVersion; +import cpw.mods.fml.relauncher.FMLInjectionData; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; @@ -9,23 +14,14 @@ import java.net.SocketTimeoutException; import java.net.URL; import java.net.UnknownHostException; import java.util.ArrayList; - -import codechicken.core.launch.CodeChickenCorePlugin; -import com.google.common.base.Function; -import cpw.mods.fml.common.Loader; -import cpw.mods.fml.common.versioning.ComparableVersion; -import cpw.mods.fml.relauncher.FMLInjectionData; - import net.minecraft.client.Minecraft; import net.minecraft.util.ChatComponentText; import net.minecraft.util.StatCollector; -public class CCUpdateChecker -{ +public class CCUpdateChecker { private static final ArrayList updates = new ArrayList(); - private static class ThreadUpdateCheck extends Thread - { + private static class ThreadUpdateCheck extends Thread { private final URL url; private final Function handler; @@ -46,11 +42,11 @@ public class CCUpdateChecker BufferedReader read = new BufferedReader(new InputStreamReader(conn.getInputStream())); String ret = read.readLine(); read.close(); - if(ret == null) ret = ""; + if (ret == null) ret = ""; handler.apply(ret); - } catch (SocketTimeoutException ignored) {} - catch (UnknownHostException ignored) {} - catch (IOException iox) { + } catch (SocketTimeoutException ignored) { + } catch (UnknownHostException ignored) { + } catch (IOException iox) { iox.printStackTrace(); } } @@ -58,12 +54,10 @@ public class CCUpdateChecker public static void tick() { Minecraft mc = Minecraft.getMinecraft(); - if (!mc.inGameHasFocus) - return; + if (!mc.inGameHasFocus) return; synchronized (updates) { - for (String s : updates) - mc.thePlayer.addChatMessage(new ChatComponentText(s)); + for (String s : updates) mc.thePlayer.addChatMessage(new ChatComponentText(s)); updates.clear(); } } @@ -79,19 +73,22 @@ public class CCUpdateChecker } public static void updateCheck(final String mod, final String version) { - updateCheck("http://www.chickenbones.net/Files/notification/version.php?" + - "version=" + mcVersion() + "&" + - "file=" + mod, - new Function() - { - @Override public Void apply(String ret) { + updateCheck( + "http://www.chickenbones.net/Files/notification/version.php?" + "version=" + + mcVersion() + "&" + "file=" + + mod, + new Function() { + @Override + public Void apply(String ret) { if (!ret.startsWith("Ret: ")) { - CodeChickenCorePlugin.logger.error("Failed to check update for " + mod + " returned: " + ret); + CodeChickenCorePlugin.logger.error( + "Failed to check update for " + mod + " returned: " + ret); return null; } ComparableVersion newversion = new ComparableVersion(ret.substring(5)); if (newversion.compareTo(new ComparableVersion(version)) > 0) - addUpdateMessage(StatCollector.translateToLocalFormatted("codechickencore.update", newversion, mod)); + addUpdateMessage( + StatCollector.translateToLocalFormatted("codechickencore.update", newversion, mod)); return null; } }); @@ -105,7 +102,7 @@ public class CCUpdateChecker try { new ThreadUpdateCheck(new URL(url), handler).start(); } catch (MalformedURLException e) { - CodeChickenCorePlugin.logger.error("Malformed URL: "+url, e); + CodeChickenCorePlugin.logger.error("Malformed URL: " + url, e); } } } diff --git a/src/main/java/codechicken/core/ClassDiscoverer.java b/src/main/java/codechicken/core/ClassDiscoverer.java index d36b248..6ccbbc2 100644 --- a/src/main/java/codechicken/core/ClassDiscoverer.java +++ b/src/main/java/codechicken/core/ClassDiscoverer.java @@ -1,5 +1,12 @@ package codechicken.core; +import codechicken.core.launch.CodeChickenCorePlugin; +import codechicken.lib.asm.ASMHelper; +import com.google.common.collect.ImmutableList; +import cpw.mods.fml.common.FMLLog; +import cpw.mods.fml.common.Loader; +import cpw.mods.fml.common.ModClassLoader; +import cpw.mods.fml.relauncher.CoreModManager; import java.io.File; import java.io.FileInputStream; import java.io.IOException; @@ -8,22 +15,10 @@ import java.util.HashSet; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; - import net.minecraft.launchwrapper.Launch; import org.objectweb.asm.tree.ClassNode; -import codechicken.core.launch.CodeChickenCorePlugin; -import codechicken.lib.asm.ASMHelper; - -import com.google.common.collect.ImmutableList; - -import cpw.mods.fml.common.FMLLog; -import cpw.mods.fml.common.Loader; -import cpw.mods.fml.common.ModClassLoader; -import cpw.mods.fml.relauncher.CoreModManager; - -public class ClassDiscoverer -{ +public class ClassDiscoverer { public IStringMatcher matcher; public String[] superclasses; public ArrayList> classes; @@ -40,10 +35,13 @@ public class ClassDiscoverer } public ClassDiscoverer(Class... superclasses) { - this(new IStringMatcher() - { - public boolean matches(String test) {return true;} - }, superclasses); + this( + new IStringMatcher() { + public boolean matches(String test) { + return true; + } + }, + superclasses); } public ArrayList> findClasses() { @@ -59,13 +57,11 @@ public class ClassDiscoverer try { String classname = resource.replace(".class", "").replace("\\", ".").replace("/", "."); byte[] bytes = Launch.classLoader.getClassBytes(classname); - if (bytes == null) - return; + if (bytes == null) return; ClassNode cnode = ASMHelper.createClassNode(bytes); for (String superclass : superclasses) - if (!cnode.interfaces.contains(superclass) && !cnode.superName.equals(superclass)) - return; + if (!cnode.interfaces.contains(superclass) && !cnode.superName.equals(superclass)) return; addClass(classname); } catch (IOException e) { @@ -85,25 +81,30 @@ public class ClassDiscoverer private void findClasspathMods() { List knownLibraries = ImmutableList.builder() .addAll(modClassLoader.getDefaultLibraries()) - .addAll(CoreModManager.getLoadedCoremods()).build(); + .addAll(CoreModManager.getLoadedCoremods()) + .build(); File[] minecraftSources = modClassLoader.getParentSources(); HashSet searchedSources = new HashSet(); for (File minecraftSource : minecraftSources) { - if (searchedSources.contains(minecraftSource.getAbsolutePath())) - continue; + if (searchedSources.contains(minecraftSource.getAbsolutePath())) continue; searchedSources.add(minecraftSource.getAbsolutePath()); if (minecraftSource.isFile()) { if (!knownLibraries.contains(minecraftSource.getName())) { - FMLLog.fine("Found a minecraft related file at %s, examining for codechicken classes", minecraftSource.getAbsolutePath()); + FMLLog.fine( + "Found a minecraft related file at %s, examining for codechicken classes", + minecraftSource.getAbsolutePath()); try { readFromZipFile(minecraftSource); } catch (Exception e) { - CodeChickenCorePlugin.logger.error("Failed to scan " + minecraftSource.getAbsolutePath() + ", the zip file is invalid", e); + CodeChickenCorePlugin.logger.error( + "Failed to scan " + minecraftSource.getAbsolutePath() + ", the zip file is invalid", e); } } } else if (minecraftSource.isDirectory()) { - FMLLog.fine("Found a minecraft related directory at %s, examining for codechicken classes", minecraftSource.getAbsolutePath()); + FMLLog.fine( + "Found a minecraft related directory at %s, examining for codechicken classes", + minecraftSource.getAbsolutePath()); readFromDirectory(minecraftSource, minecraftSource); } } @@ -123,8 +124,7 @@ public class ClassDiscoverer if (!zipentry.isDirectory() && matcher.matches(name)) { checkAddClass(fullname); } - } - while (true); + } while (true); fileinputstream.close(); } diff --git a/src/main/java/codechicken/core/ClientUtils.java b/src/main/java/codechicken/core/ClientUtils.java index 621f206..73adfe7 100644 --- a/src/main/java/codechicken/core/ClientUtils.java +++ b/src/main/java/codechicken/core/ClientUtils.java @@ -1,12 +1,10 @@ package codechicken.core; import codechicken.core.internal.CCCEventHandler; - import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.ModContainer; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; - import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiScreen; import net.minecraft.network.NetworkManager; @@ -14,8 +12,7 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; -public class ClientUtils extends CommonUtils -{ +public class ClientUtils extends CommonUtils { private static Minecraft mc() { return Minecraft.getMinecraft(); } @@ -24,15 +21,14 @@ public class ClientUtils extends CommonUtils return mc().theWorld; } - public static boolean inWorld()//TODO unused - { + public static boolean inWorld() // TODO unused + { return mc().getNetHandler() != null; } public static void openSMPGui(int windowId, GuiScreen gui) { mc().displayGuiScreen(gui); - if (windowId != 0) - mc().thePlayer.openContainer.windowId = windowId; + if (windowId != 0) mc().thePlayer.openContainer.windowId = windowId; } public static float getRenderFrame() { @@ -63,7 +59,8 @@ public class ClientUtils extends CommonUtils public static void enhanceSupportersList(Object mod) { ModContainer mc = FMLCommonHandler.instance().findContainerFor(mod); - mc.getMetadata().description = mc.getMetadata().description.replace("Supporters:", EnumChatFormatting.AQUA+"Supporters:"); + mc.getMetadata().description = + mc.getMetadata().description.replace("Supporters:", EnumChatFormatting.AQUA + "Supporters:"); GuiModListScroll.register(mod); } } diff --git a/src/main/java/codechicken/core/CommonUtils.java b/src/main/java/codechicken/core/CommonUtils.java index 1368501..11301b2 100644 --- a/src/main/java/codechicken/core/CommonUtils.java +++ b/src/main/java/codechicken/core/CommonUtils.java @@ -1,16 +1,14 @@ package codechicken.core; -import java.io.File; - import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.relauncher.FMLInjectionData; +import java.io.File; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityList; import net.minecraft.world.World; import net.minecraftforge.common.DimensionManager; -public class CommonUtils -{ +public class CommonUtils { public static boolean isClient() { return FMLCommonHandler.instance().getSide().isClient(); } @@ -37,14 +35,12 @@ public class CommonUtils } public static String getRelativePath(File parent, File child) { - if (parent.isFile() || !child.getPath().startsWith(parent.getPath())) - return null; + if (parent.isFile() || !child.getPath().startsWith(parent.getPath())) return null; return child.getPath().substring(parent.getPath().length() + 1); } - public static void registerHandledEntity(Class entityClass, String identifier) - { + public static void registerHandledEntity(Class entityClass, String identifier) { EntityList.classToStringMapping.put(entityClass, identifier); EntityList.stringToClassMapping.put(identifier, entityClass); } diff --git a/src/main/java/codechicken/core/GuiModListScroll.java b/src/main/java/codechicken/core/GuiModListScroll.java index 8375fcf..299b04f 100644 --- a/src/main/java/codechicken/core/GuiModListScroll.java +++ b/src/main/java/codechicken/core/GuiModListScroll.java @@ -1,5 +1,8 @@ package codechicken.core; +import static org.lwjgl.opengl.GL11.*; +import static org.lwjgl.opengl.GL11.glReadPixels; + import codechicken.core.launch.CodeChickenCorePlugin; import codechicken.lib.gui.GuiDraw; import codechicken.lib.vec.Rectangle4i; @@ -7,17 +10,6 @@ import cpw.mods.fml.client.GuiModList; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.ModContainer; import cpw.mods.fml.common.ModMetadata; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.MinecraftForgeClient; -import org.lwjgl.BufferUtils; -import org.lwjgl.input.Keyboard; -import org.lwjgl.opengl.GL11; - -import javax.imageio.ImageIO; - -import static org.lwjgl.opengl.GL11.*; -import static org.lwjgl.opengl.GL11.glReadPixels; - import java.awt.*; import java.awt.image.BufferedImage; import java.io.File; @@ -25,9 +17,14 @@ import java.io.IOException; import java.nio.ByteBuffer; import java.util.LinkedList; import java.util.List; +import javax.imageio.ImageIO; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.MinecraftForgeClient; +import org.lwjgl.BufferUtils; +import org.lwjgl.input.Keyboard; +import org.lwjgl.opengl.GL11; -public class GuiModListScroll -{ +public class GuiModListScroll { private static List scrollMods = new LinkedList(); public static void register(Object mod) { @@ -37,8 +34,7 @@ public class GuiModListScroll private static void register(ModContainer mod) { if (MinecraftForgeClient.getStencilBits() == 0) CodeChickenCorePlugin.logger.error("Unable to do mod description scrolling due to lack of stencil buffer"); - else - scrollMods.add(mod); + else scrollMods.add(mod); } private static void screenshotStencil(int x) { @@ -49,11 +45,11 @@ public class GuiModListScroll glPixelStorei(GL_PACK_ALIGNMENT, 1); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glReadPixels(0, 0, d.width, d.height, GL_STENCIL_INDEX, GL_UNSIGNED_BYTE, buf); - for(int i = 0; i < d.width; i++) - for(int j = 0; j < d.height; j++) - img.setRGB(i, d.height-j-1, buf.get(j * d.width + i) == 0 ? 0 : 0xFFFFFF); + for (int i = 0; i < d.width; i++) + for (int j = 0; j < d.height; j++) + img.setRGB(i, d.height - j - 1, buf.get(j * d.width + i) == 0 ? 0 : 0xFFFFFF); try { - ImageIO.write(img, "png", new File("stencil"+x+".png")); + ImageIO.write(img, "png", new File("stencil" + x + ".png")); } catch (IOException e) { e.printStackTrace(); } @@ -63,36 +59,35 @@ public class GuiModListScroll private static double scroll; private static double lastFrameTime; private static double timeStart; + public static void draw(GuiModList gui, int mouseX, int mouseY) { ModContainer selectedMod = ReflectionManager.getField(GuiModList.class, ModContainer.class, gui, "selectedMod"); - if(selectedMod != lastMod) { + if (selectedMod != lastMod) { lastMod = selectedMod; scroll = 0; timeStart = ClientUtils.getRenderTime(); } - if(!scrollMods.contains(selectedMod) || selectedMod.getMetadata().autogenerated) - return; + if (!scrollMods.contains(selectedMod) || selectedMod.getMetadata().autogenerated) return; int y1 = calcDescY(gui, selectedMod); int y1draw = y1 + 10; - int y2 = gui.height-38; + int y2 = gui.height - 38; int x1 = ReflectionManager.getField(GuiModList.class, Integer.class, gui, "listWidth") + 20; int x2 = gui.width - 20; - if(x2 - x1 <= 20) - return; + if (x2 - x1 <= 20) return; glEnable(GL_STENCIL_TEST); glStencilFunc(GL_ALWAYS, 1, 1); glColorMask(false, false, false, false); glStencilOp(GL_ZERO, GL_ZERO, GL_ZERO); - GuiDraw.drawRect(0, 0, gui.width, gui.height, -1);//clear stencil buffer + GuiDraw.drawRect(0, 0, gui.width, gui.height, -1); // clear stencil buffer screenshotStencil(1); glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE); - GuiDraw.drawRect(x1, y1, gui.width - x1, gui.height - y1, -1);//add description area (even below button) + GuiDraw.drawRect(x1, y1, gui.width - x1, gui.height - y1, -1); // add description area (even below button) glStencilOp(GL_ZERO, GL_ZERO, GL_ZERO); - GuiDraw.drawRect(gui.width / 2 - 75, y2, 200, 20, -1);//subtract done button + GuiDraw.drawRect(gui.width / 2 - 75, y2, 200, 20, -1); // subtract done button screenshotStencil(2); @@ -100,13 +95,13 @@ public class GuiModListScroll glStencilFunc(GL_EQUAL, 1, 1); glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); - gui.drawDefaultBackground();//fill stencil with background + gui.drawDefaultBackground(); // fill stencil with background glColorMask(false, false, false, false); glStencilOp(GL_ZERO, GL_ZERO, GL_ZERO); GuiDraw.drawRect(0, 0, gui.width, gui.height, -1); glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE); - GuiDraw.drawRect(x1, y1draw, x2-x1, y2-y1draw, -1); + GuiDraw.drawRect(x1, y1draw, x2 - x1, y2 - y1draw, -1); screenshotStencil(3); @@ -114,10 +109,13 @@ public class GuiModListScroll glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); String description = selectedMod.getMetadata().description; - int height = GuiDraw.fontRenderer.listFormattedStringToWidth(description, x2-x1).size()*GuiDraw.fontRenderer.FONT_HEIGHT; + int height = GuiDraw.fontRenderer + .listFormattedStringToWidth(description, x2 - x1) + .size() + * GuiDraw.fontRenderer.FONT_HEIGHT; - boolean needsScroll = height > y2-y1draw; - if((ClientUtils.getRenderTime() - timeStart) > 40 && needsScroll) { + boolean needsScroll = height > y2 - y1draw; + if ((ClientUtils.getRenderTime() - timeStart) > 40 && needsScroll) { double dt = ClientUtils.getRenderTime() - lastFrameTime; if (new Rectangle4i(x1, y1draw, x2 - x1, y2 - y1draw).contains(mouseX, mouseY)) { double d = Keyboard.isKeyDown(Keyboard.KEY_UP) ? -1 : Keyboard.isKeyDown(Keyboard.KEY_DOWN) ? 1 : 0; @@ -128,16 +126,16 @@ public class GuiModListScroll } lastFrameTime = ClientUtils.getRenderTime(); - //draw description + // draw description double dy = scroll % (height + 20); GL11.glPushMatrix(); - GL11.glTranslated(0, -dy, 0); - GuiDraw.fontRenderer.drawSplitString(description, x1, y1draw, x2-x1, 0xDDDDDD); - if(needsScroll) { - GL11.glTranslated(0, height + 20, 0); - GuiDraw.fontRenderer.drawSplitString(description, x1, y1draw, x2 - x1, 0xDDDDDD); - } + GL11.glTranslated(0, -dy, 0); + GuiDraw.fontRenderer.drawSplitString(description, x1, y1draw, x2 - x1, 0xDDDDDD); + if (needsScroll) { + GL11.glTranslated(0, height + 20, 0); + GuiDraw.fontRenderer.drawSplitString(description, x1, y1draw, x2 - x1, 0xDDDDDD); + } GL11.glPopMatrix(); glDisable(GL_STENCIL_TEST); @@ -150,14 +148,13 @@ public class GuiModListScroll private static int calcDescY(GuiModList gui, ModContainer mod) { ModMetadata meta = mod.getMetadata(); int y = 35; - if(!!meta.logoFile.isEmpty() && ReflectionManager.getField(GuiModList.class, ResourceLocation.class, gui, "cachedLogo") != null) + if (!!meta.logoFile.isEmpty() + && ReflectionManager.getField(GuiModList.class, ResourceLocation.class, gui, "cachedLogo") != null) y += 65; y += 12; // title y += 40; // necessary lines - if(!meta.credits.isEmpty()) - y += 10; - if(!meta.childMods.isEmpty()) - y += 10; + if (!meta.credits.isEmpty()) y += 10; + if (!meta.childMods.isEmpty()) y += 10; return y; } } diff --git a/src/main/java/codechicken/core/IGuiPacketSender.java b/src/main/java/codechicken/core/IGuiPacketSender.java index 30b5783..b8b0902 100644 --- a/src/main/java/codechicken/core/IGuiPacketSender.java +++ b/src/main/java/codechicken/core/IGuiPacketSender.java @@ -2,7 +2,6 @@ package codechicken.core; import net.minecraft.entity.player.EntityPlayerMP; -public interface IGuiPacketSender -{ +public interface IGuiPacketSender { void sendPacket(EntityPlayerMP player, int windowId); } diff --git a/src/main/java/codechicken/core/IStringMatcher.java b/src/main/java/codechicken/core/IStringMatcher.java index 12e320c..781b17a 100644 --- a/src/main/java/codechicken/core/IStringMatcher.java +++ b/src/main/java/codechicken/core/IStringMatcher.java @@ -1,6 +1,5 @@ package codechicken.core; -public interface IStringMatcher -{ +public interface IStringMatcher { public boolean matches(String test); } diff --git a/src/main/java/codechicken/core/ProfileTimer.java b/src/main/java/codechicken/core/ProfileTimer.java index 627ac65..3fb9fef 100644 --- a/src/main/java/codechicken/core/ProfileTimer.java +++ b/src/main/java/codechicken/core/ProfileTimer.java @@ -2,8 +2,7 @@ package codechicken.core; import codechicken.core.launch.CodeChickenCorePlugin; -public class ProfileTimer -{ +public class ProfileTimer { public double decay; public long startTime; public long nanoTime; @@ -30,11 +29,11 @@ public class ProfileTimer } public void end() { - long t = System.nanoTime()-startTime; - nanoTime = (long)(nanoTime*decay+t*(1-decay)); + long t = System.nanoTime() - startTime; + nanoTime = (long) (nanoTime * decay + t * (1 - decay)); scanCount++; - if(logScans > 0 && scanCount % logScans == 0) + if (logScans > 0 && scanCount % logScans == 0) CodeChickenCorePlugin.logger.info("Profiled " + logName + " " + nanoTime + "ns"); } } diff --git a/src/main/java/codechicken/core/ReflectionManager.java b/src/main/java/codechicken/core/ReflectionManager.java index c52c92d..32fa16a 100644 --- a/src/main/java/codechicken/core/ReflectionManager.java +++ b/src/main/java/codechicken/core/ReflectionManager.java @@ -1,19 +1,16 @@ package codechicken.core; +import codechicken.lib.asm.ObfMapping; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.HashMap; -import codechicken.lib.asm.ObfMapping; - -public class ReflectionManager -{ +public class ReflectionManager { public static HashMap, Class> primitiveWrappers = new HashMap, Class>(); - - static - { + + static { primitiveWrappers.put(Integer.TYPE, Integer.class); primitiveWrappers.put(Short.TYPE, Short.class); primitiveWrappers.put(Byte.TYPE, Byte.class); @@ -23,293 +20,247 @@ public class ReflectionManager primitiveWrappers.put(Boolean.TYPE, Boolean.class); primitiveWrappers.put(Character.TYPE, Character.class); } - - public static boolean isInstance(Class class1, Object obj) - { + + public static boolean isInstance(Class class1, Object obj) { Class primitive = primitiveWrappers.get(class1); - if(primitive != null) - { - if(primitive == Long.class && Long.class.isInstance(obj)) - return true; - if((primitive == Long.class || primitive == Integer.class) && Integer.class.isInstance(obj)) - return true; - if((primitive == Long.class || primitive == Integer.class || primitive == Short.class) && Short.class.isInstance(obj)) - return true; - if((primitive == Long.class || primitive == Integer.class || primitive == Short.class || primitive == Byte.class) && Integer.class.isInstance(obj)) - return true; - - if(primitive == Double.class && Double.class.isInstance(obj)) - return true; - if((primitive == Double.class || primitive == Float.class) && Float.class.isInstance(obj)) - return true; - + if (primitive != null) { + if (primitive == Long.class && Long.class.isInstance(obj)) return true; + if ((primitive == Long.class || primitive == Integer.class) && Integer.class.isInstance(obj)) return true; + if ((primitive == Long.class || primitive == Integer.class || primitive == Short.class) + && Short.class.isInstance(obj)) return true; + if ((primitive == Long.class + || primitive == Integer.class + || primitive == Short.class + || primitive == Byte.class) + && Integer.class.isInstance(obj)) return true; + + if (primitive == Double.class && Double.class.isInstance(obj)) return true; + if ((primitive == Double.class || primitive == Float.class) && Float.class.isInstance(obj)) return true; + return primitive.isInstance(obj); } return class1.isInstance(obj); } - - public static Class findClass(String name) - { + + public static Class findClass(String name) { return findClass(name, true); } - - public static boolean classExists(String name) - { + + public static boolean classExists(String name) { return findClass(name, false) != null; } - - public static Class findClass(String name, boolean init) - { - try - { + + public static Class findClass(String name, boolean init) { + try { return Class.forName(name, init, ReflectionManager.class.getClassLoader()); - } - catch (ClassNotFoundException cnfe) - { - try - { - return Class.forName("net.minecraft.src."+name, init, ReflectionManager.class.getClassLoader()); - } - catch (ClassNotFoundException cnfe2) - { + } catch (ClassNotFoundException cnfe) { + try { + return Class.forName("net.minecraft.src." + name, init, ReflectionManager.class.getClassLoader()); + } catch (ClassNotFoundException cnfe2) { return null; } } } - public static void setField(Class class1, Object instance, String name, Object value) throws IllegalArgumentException, IllegalAccessException - { - setField(class1, instance, new String[]{name}, value); + public static void setField(Class class1, Object instance, String name, Object value) + throws IllegalArgumentException, IllegalAccessException { + setField(class1, instance, new String[] {name}, value); } - - public static void setField(Class class1, Object instance, String[] names, Object value) throws IllegalArgumentException, IllegalAccessException - { - for(Field field : class1.getDeclaredFields()) - { + + public static void setField(Class class1, Object instance, String[] names, Object value) + throws IllegalArgumentException, IllegalAccessException { + for (Field field : class1.getDeclaredFields()) { boolean match = false; - for(String name : names) - { - if(field.getName().equals(name)) - { + for (String name : names) { + if (field.getName().equals(name)) { match = true; break; } } - if(!match) - { + if (!match) { continue; - } - + } + field.setAccessible(true); field.set(instance, value); return; } } - - public static void setField(Class class1, Object instance, int fieldindex, Object value) throws IllegalArgumentException, IllegalAccessException - { + + public static void setField(Class class1, Object instance, int fieldindex, Object value) + throws IllegalArgumentException, IllegalAccessException { Field field = class1.getDeclaredFields()[fieldindex]; field.setAccessible(true); field.set(instance, value); } - + /** * Static function * void return type * single name */ - public static void callMethod(Class class1, String name, Object... params) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException - { - callMethod(class1, null, new String[]{name}, params); + public static void callMethod(Class class1, String name, Object... params) + throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { + callMethod(class1, null, new String[] {name}, params); } - + /** * Static function * void return type * single name */ - public static void callMethod(Class class1, String[] names, Object... params) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException - { + public static void callMethod(Class class1, String[] names, Object... params) + throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { callMethod(class1, null, names, params); } - + /** * void return type * single name */ - public static void callMethod(Class class1, Object instance, String name, Object... params) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException - { - callMethod(class1, null, instance, new String[]{name}, params); + public static void callMethod(Class class1, Object instance, String name, Object... params) + throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { + callMethod(class1, null, instance, new String[] {name}, params); } - + /** * void return type */ - public static void callMethod(Class class1, Object instance, String[] names, Object... params) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException - { + public static void callMethod(Class class1, Object instance, String[] names, Object... params) + throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { callMethod(class1, null, instance, names, params); } - + /** * Static method * single name */ - public static R callMethod(Class class1, Class returntype, String name, Object... params) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException - { - return callMethod(class1, returntype, null, new String[]{name}, params); + public static R callMethod(Class class1, Class returntype, String name, Object... params) + throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { + return callMethod(class1, returntype, null, new String[] {name}, params); } - + /** * Static method */ - public static R callMethod(Class class1, Class returntype, String[] names, Object... params) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException - { + public static R callMethod(Class class1, Class returntype, String[] names, Object... params) + throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { return callMethod(class1, returntype, null, names, params); } - + /** * sinlge name */ - public static R callMethod(Class class1, Class returntype, Object instance, String name, Object... params) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException - { - return callMethod(class1, returntype, instance, new String[]{name}, params); + public static R callMethod(Class class1, Class returntype, Object instance, String name, Object... params) + throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { + return callMethod(class1, returntype, instance, new String[] {name}, params); } - - public static R callMethod(Class class1, Class returntype, Object instance, String[] names, Object... params) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException - { - nextMethod: for(Method method : class1.getDeclaredMethods()) - { + + public static R callMethod( + Class class1, Class returntype, Object instance, String[] names, Object... params) + throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { + nextMethod: + for (Method method : class1.getDeclaredMethods()) { boolean match = false; - for(String name : names) - { - if(method.getName().equals(name)) - { + for (String name : names) { + if (method.getName().equals(name)) { match = true; break; } } - if(!match) - { + if (!match) { continue; } - + Class[] paramtypes = method.getParameterTypes(); - if(paramtypes.length != params.length) - continue; - - for(int i = 0; i < params.length; i++) - { - if(!isInstance(paramtypes[i], params[i])) - continue nextMethod; + if (paramtypes.length != params.length) continue; + + for (int i = 0; i < params.length; i++) { + if (!isInstance(paramtypes[i], params[i])) continue nextMethod; } - + method.setAccessible(true); - return (R)method.invoke(instance, params); + return (R) method.invoke(instance, params); } return null; } - - public static T getField(Class class1, Class fieldType, Object instance, int fieldIndex) throws IllegalArgumentException, IllegalAccessException - { + + public static T getField(Class class1, Class fieldType, Object instance, int fieldIndex) + throws IllegalArgumentException, IllegalAccessException { Field field = class1.getDeclaredFields()[fieldIndex]; field.setAccessible(true); return (T) field.get(instance); } - - public static T getField(Class class1, Class fieldType, Object instance, String fieldName) - { - try - { + + public static T getField(Class class1, Class fieldType, Object instance, String fieldName) { + try { Field field = class1.getDeclaredField(fieldName); field.setAccessible(true); return (T) field.get(instance); - } - catch(Exception e) - { + } catch (Exception e) { throw new RuntimeException(e); } } - public static T newInstance(Class class1, Object... params) throws IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException - { - nextMethod: for(Constructor constructor : class1.getDeclaredConstructors()) - { + public static T newInstance(Class class1, Object... params) + throws IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException { + nextMethod: + for (Constructor constructor : class1.getDeclaredConstructors()) { Class[] paramtypes = constructor.getParameterTypes(); - if(paramtypes.length != params.length) - continue; - - for(int i = 0; i < params.length; i++) - { - if(!isInstance(paramtypes[i], params[i])) - continue nextMethod; + if (paramtypes.length != params.length) continue; + + for (int i = 0; i < params.length; i++) { + if (!isInstance(paramtypes[i], params[i])) continue nextMethod; } - + constructor.setAccessible(true); - return (T)constructor.newInstance(params); + return (T) constructor.newInstance(params); } return null; } - public static boolean hasField(Class class1, String fieldName) - { - try - { + public static boolean hasField(Class class1, String fieldName) { + try { class1.getDeclaredField(fieldName); return true; - } - catch(NoSuchFieldException nfe) - { + } catch (NoSuchFieldException nfe) { return false; } } - - public static T get(Field field, Class class1) - { + + public static T get(Field field, Class class1) { return get(field, class1, null); } - public static T get(Field field, Class class1, Object instance) - { - try - { - return (T)field.get(instance); - } - catch(Exception e) - { - throw new RuntimeException(e); - } - } - - public static void set(Field field, Object value) - { - set(field, null, value); - } - - public static void set(Field field, Object instance, Object value) - { - try - { - field.set(instance, value); - } - catch(Exception e) - { + public static T get(Field field, Class class1, Object instance) { + try { + return (T) field.get(instance); + } catch (Exception e) { throw new RuntimeException(e); } } - public static Field getField(ObfMapping mapping) - { + public static void set(Field field, Object value) { + set(field, null, value); + } + + public static void set(Field field, Object instance, Object value) { + try { + field.set(instance, value); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public static Field getField(ObfMapping mapping) { mapping.toRuntime(); - - try - { + + try { Class clazz = ReflectionManager.class.getClassLoader().loadClass(mapping.javaClass()); Field field = clazz.getDeclaredField(mapping.s_name); field.setAccessible(true); return field; - } - catch(Exception e) - { + } catch (Exception e) { throw new RuntimeException(e); } } diff --git a/src/main/java/codechicken/core/ServerUtils.java b/src/main/java/codechicken/core/ServerUtils.java index 7b9db6d..42c93c4 100644 --- a/src/main/java/codechicken/core/ServerUtils.java +++ b/src/main/java/codechicken/core/ServerUtils.java @@ -1,22 +1,20 @@ package codechicken.core; +import codechicken.lib.asm.ObfMapping; +import com.mojang.authlib.GameProfile; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.Map; - -import codechicken.lib.asm.ObfMapping; -import com.mojang.authlib.GameProfile; -import net.minecraft.server.MinecraftServer; -import net.minecraft.inventory.Container; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.Container; +import net.minecraft.server.MinecraftServer; import net.minecraft.util.IChatComponent; -public class ServerUtils extends CommonUtils -{ +public class ServerUtils extends CommonUtils { public static MinecraftServer mc() { return MinecraftServer.getServer(); } @@ -31,9 +29,7 @@ public class ServerUtils extends CommonUtils public static ArrayList getPlayersInDimension(int dimension) { ArrayList players = new ArrayList(); - for (EntityPlayer p : getPlayers()) - if(p.dimension == dimension) - players.add(p); + for (EntityPlayer p : getPlayers()) if (p.dimension == dimension) players.add(p); return players; } @@ -50,13 +46,20 @@ public class ServerUtils extends CommonUtils private static Field field_152661_c; private static Class c_ProfileEntry; private static Method func_152668_a; + static { try { - field_152661_c = ReflectionManager.getField(new ObfMapping("net/minecraft/server/management/PlayerProfileCache", "field_152661_c", "[Ljava/util/Map;")); - c_ProfileEntry = ServerUtils.class.getClassLoader().loadClass("net.minecraft.server.management.PlayerProfileCache$ProfileEntry"); - func_152668_a = c_ProfileEntry.getDeclaredMethod( - new ObfMapping("net/minecraft/server/management/PlayerProfileCache$ProfileEntry", - "func_152668_a", "()Lcom/mojang/authlib/GameProfile;").toRuntime().s_name); + field_152661_c = ReflectionManager.getField(new ObfMapping( + "net/minecraft/server/management/PlayerProfileCache", "field_152661_c", "[Ljava/util/Map;")); + c_ProfileEntry = ServerUtils.class + .getClassLoader() + .loadClass("net.minecraft.server.management.PlayerProfileCache$ProfileEntry"); + func_152668_a = c_ProfileEntry.getDeclaredMethod(new ObfMapping( + "net/minecraft/server/management/PlayerProfileCache$ProfileEntry", + "func_152668_a", + "()Lcom/mojang/authlib/GameProfile;") + .toRuntime() + .s_name); func_152668_a.setAccessible(true); } catch (Exception e) { @@ -66,14 +69,12 @@ public class ServerUtils extends CommonUtils public static GameProfile getGameProfile(String username) { EntityPlayer player = getPlayer(username); - if(player != null) - return player.getGameProfile(); + if (player != null) return player.getGameProfile(); username = username.toLowerCase(Locale.ROOT); - try {//use reflection to bypass saving the game profiles every time we ask the cache for one + try { // use reflection to bypass saving the game profiles every time we ask the cache for one Object cacheEntry = ((Map) field_152661_c.get(mc().func_152358_ax())).get(username); - if(cacheEntry != null) - return (GameProfile) func_152668_a.invoke(cacheEntry); + if (cacheEntry != null) return (GameProfile) func_152668_a.invoke(cacheEntry); } catch (Exception e) { throw new RuntimeException(e); } @@ -90,7 +91,6 @@ public class ServerUtils extends CommonUtils } public static void sendChatToAll(IChatComponent msg) { - for(EntityPlayer p : getPlayers()) - p.addChatComponentMessage(msg); + for (EntityPlayer p : getPlayers()) p.addChatComponentMessage(msg); } } diff --git a/src/main/java/codechicken/core/TaskProfiler.java b/src/main/java/codechicken/core/TaskProfiler.java index c1ca80d..30f92bb 100644 --- a/src/main/java/codechicken/core/TaskProfiler.java +++ b/src/main/java/codechicken/core/TaskProfiler.java @@ -5,61 +5,51 @@ import java.util.HashMap; import java.util.List; import java.util.Map.Entry; -public class TaskProfiler -{ - public static class ProfilerResult - { +public class TaskProfiler { + public static class ProfilerResult { public final String name; public final long time; public final double fraction; - - public ProfilerResult(String name, long time, long totalTime) - { + + public ProfilerResult(String name, long time, long totalTime) { this.name = name; this.time = time; - fraction = time/(double)totalTime; + fraction = time / (double) totalTime; } } - + public HashMap times = new HashMap(); - + public String currentSection; private long startTime; private long totalTime; - - public void start(String section) - { - if(currentSection != null) - end(); - + + public void start(String section) { + if (currentSection != null) end(); + currentSection = section; startTime = System.nanoTime(); } - - public void end() - { - long time = System.nanoTime()-startTime; - totalTime+=time; - + + public void end() { + long time = System.nanoTime() - startTime; + totalTime += time; + Long prev = times.get(currentSection); - if(prev == null) - prev = 0L; - times.put(currentSection, prev+time); + if (prev == null) prev = 0L; + times.put(currentSection, prev + time); currentSection = null; } - - public List getResults() - { + + public List getResults() { ArrayList results = new ArrayList(times.size()); - for(Entry e : times.entrySet()) + for (Entry e : times.entrySet()) results.add(new ProfilerResult(e.getKey(), e.getValue(), totalTime)); return results; } - public void clear() - { - if(currentSection != null) - end(); + public void clear() { + if (currentSection != null) end(); times.clear(); totalTime = 0; } diff --git a/src/main/java/codechicken/core/asm/CodeChickenAccessTransformer.java b/src/main/java/codechicken/core/asm/CodeChickenAccessTransformer.java index d948541..d293700 100644 --- a/src/main/java/codechicken/core/asm/CodeChickenAccessTransformer.java +++ b/src/main/java/codechicken/core/asm/CodeChickenAccessTransformer.java @@ -1,17 +1,13 @@ package codechicken.core.asm; +import codechicken.lib.asm.ObfMapping; +import com.google.common.collect.ImmutableBiMap; +import cpw.mods.fml.common.asm.transformers.AccessTransformer; +import cpw.mods.fml.common.asm.transformers.deobf.FMLDeobfuscatingRemapper; import java.io.IOException; import java.lang.reflect.Field; -import com.google.common.collect.ImmutableBiMap; - -import codechicken.lib.asm.ObfMapping; - -import cpw.mods.fml.common.asm.transformers.AccessTransformer; -import cpw.mods.fml.common.asm.transformers.deobf.FMLDeobfuscatingRemapper; - -public class CodeChickenAccessTransformer extends AccessTransformer -{ +public class CodeChickenAccessTransformer extends AccessTransformer { private static boolean makeAllPublic; private static Field f_classNameBiMap; private static Object emptyMap = ImmutableBiMap.of(); @@ -22,17 +18,17 @@ public class CodeChickenAccessTransformer extends AccessTransformer } private void loadPublicConfig() { - if (ObfMapping.obfuscated) - return; + if (ObfMapping.obfuscated) return; - makeAllPublic = CodeChickenCoreModContainer.config.getTag("dev.runtimePublic") - .setComment("Enabling this setting will make all minecraft classes public at runtime in MCP just as they are in modloader." + - "\nYou should ONLY use this when you are testing with a mod that relies on runtime publicity and doesn't include access transformers." + - "\nSuch mods are doing the wrong thing and should be fixed.") + makeAllPublic = CodeChickenCoreModContainer.config + .getTag("dev.runtimePublic") + .setComment( + "Enabling this setting will make all minecraft classes public at runtime in MCP just as they are in modloader." + + "\nYou should ONLY use this when you are testing with a mod that relies on runtime publicity and doesn't include access transformers." + + "\nSuch mods are doing the wrong thing and should be fixed.") .getBooleanValue(false); - if (!makeAllPublic) - return; + if (!makeAllPublic) return; try { f_classNameBiMap = FMLDeobfuscatingRemapper.class.getDeclaredField("classNameBiMap"); @@ -45,11 +41,9 @@ public class CodeChickenAccessTransformer extends AccessTransformer @Override public byte[] transform(String name, String transformedName, byte[] bytes) { boolean setPublic = makeAllPublic && name.startsWith("net.minecraft."); - if (setPublic) - setClassMap(name); + if (setPublic) setClassMap(name); bytes = super.transform(name, transformedName, bytes); - if (setPublic) - restoreClassMap(); + if (setPublic) restoreClassMap(); return bytes; } diff --git a/src/main/java/codechicken/core/asm/CodeChickenCoreModContainer.java b/src/main/java/codechicken/core/asm/CodeChickenCoreModContainer.java index da49e93..da6e773 100644 --- a/src/main/java/codechicken/core/asm/CodeChickenCoreModContainer.java +++ b/src/main/java/codechicken/core/asm/CodeChickenCoreModContainer.java @@ -1,34 +1,31 @@ package codechicken.core.asm; -import java.io.File; -import java.util.LinkedList; -import java.util.List; - import codechicken.core.CCUpdateChecker; import codechicken.core.ClientUtils; import codechicken.core.featurehack.LiquidTextures; import codechicken.core.internal.CCCEventHandler; import codechicken.core.launch.CodeChickenCorePlugin; import codechicken.lib.config.ConfigFile; - import com.google.common.eventbus.EventBus; import com.google.common.eventbus.Subscribe; - import cpw.mods.fml.common.*; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.versioning.ArtifactVersion; import cpw.mods.fml.common.versioning.VersionParser; import cpw.mods.fml.common.versioning.VersionRange; +import java.io.File; +import java.util.LinkedList; +import java.util.List; import net.minecraftforge.common.MinecraftForge; -public class CodeChickenCoreModContainer extends DummyModContainer -{ +public class CodeChickenCoreModContainer extends DummyModContainer { public static ConfigFile config; public static void loadConfig() { - if(config == null) - config = new ConfigFile(new File(CodeChickenCorePlugin.minecraftDir, "config/CodeChickenCore.cfg")).setComment("CodeChickenCore configuration file."); + if (config == null) + config = new ConfigFile(new File(CodeChickenCorePlugin.minecraftDir, "config/CodeChickenCore.cfg")) + .setComment("CodeChickenCore configuration file."); } public CodeChickenCoreModContainer() { @@ -46,7 +43,7 @@ public class CodeChickenCoreModContainer extends DummyModContainer @Override public List getDependants() { LinkedList deps = new LinkedList(); - if(!getVersion().contains("$")) { + if (!getVersion().contains("$")) { deps.add(VersionParser.parseVersionReference("Forge@[10.13.3,)")); deps.add(VersionParser.parseVersionReference("NotEnoughItems@[1.0.5,)")); deps.add(VersionParser.parseVersionReference("EnderStorage@[1.4.7,)")); @@ -65,15 +62,13 @@ public class CodeChickenCoreModContainer extends DummyModContainer @Subscribe public void preInit(FMLPreInitializationEvent event) { - if (event.getSide().isClient()) - LiquidTextures.init(); + if (event.getSide().isClient()) LiquidTextures.init(); } @Subscribe public void init(FMLInitializationEvent event) { if (event.getSide().isClient()) { - if (config.getTag("checkUpdates").getBooleanValue(true)) - CCUpdateChecker.updateCheck(getModId()); + if (config.getTag("checkUpdates").getBooleanValue(true)) CCUpdateChecker.updateCheck(getModId()); ClientUtils.enhanceSupportersList("CodeChickenCore"); diff --git a/src/main/java/codechicken/core/asm/DefaultImplementationTransformer.java b/src/main/java/codechicken/core/asm/DefaultImplementationTransformer.java index df16917..57127df 100644 --- a/src/main/java/codechicken/core/asm/DefaultImplementationTransformer.java +++ b/src/main/java/codechicken/core/asm/DefaultImplementationTransformer.java @@ -1,94 +1,89 @@ package codechicken.core.asm; +import codechicken.lib.asm.ASMHelper; +import codechicken.lib.asm.ClassHeirachyManager; +import codechicken.lib.asm.ObfMapping; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; - +import net.minecraft.launchwrapper.IClassTransformer; +import net.minecraft.launchwrapper.LaunchClassLoader; import org.objectweb.asm.tree.ClassNode; import org.objectweb.asm.tree.MethodNode; -import codechicken.lib.asm.ASMHelper; -import codechicken.lib.asm.ClassHeirachyManager; -import codechicken.lib.asm.ObfMapping; +public class DefaultImplementationTransformer implements IClassTransformer { + private static LaunchClassLoader cl = (LaunchClassLoader) ClassHeirachyManager.class.getClassLoader(); -import net.minecraft.launchwrapper.IClassTransformer; -import net.minecraft.launchwrapper.LaunchClassLoader; - -public class DefaultImplementationTransformer implements IClassTransformer -{ - private static LaunchClassLoader cl = (LaunchClassLoader)ClassHeirachyManager.class.getClassLoader(); private static ClassNode getClassNode(String name) { - try { - return ASMHelper.createClassNode(cl.getClassBytes(name.replace('/', '.'))); - } catch (IOException e) { - throw new RuntimeException(e); - } + try { + return ASMHelper.createClassNode(cl.getClassBytes(name.replace('/', '.'))); + } catch (IOException e) { + throw new RuntimeException(e); + } } - - static class InterfaceImpl - { - public final String iname; - public ArrayList impls = new ArrayList(); - - public InterfaceImpl(String iname, String cname) - { - this.iname = iname; - HashSet names = new HashSet(); - ClassNode inode = getClassNode(iname); - for(MethodNode method : inode.methods) - names.add(method.name+method.desc); - - ClassNode cnode = getClassNode(cname); - for(MethodNode method : cnode.methods) - if(names.contains(method.name+method.desc)) { - impls.add(method); - method.desc = new ObfMapping(cnode.name, method.name, method.desc).toRuntime().s_desc; - } - } - public boolean patch(ClassNode cnode) { - LinkedList names = new LinkedList(); - for(MethodNode method : cnode.methods) { - ObfMapping m = new ObfMapping(cnode.name, method.name, method.desc).toRuntime(); - names.add(m.s_name+m.s_desc); - } + static class InterfaceImpl { + public final String iname; + public ArrayList impls = new ArrayList(); - boolean changed = false; - for(MethodNode impl : impls) { - if(names.contains(impl.name+impl.desc)) - continue; - - MethodNode copy = new MethodNode(impl.access, impl.name, impl.desc, - impl.signature, impl.exceptions == null ? null : impl.exceptions.toArray(new String[0])); - ASMHelper.copy(impl, copy); - cnode.methods.add(impl); - changed = true; - } - return changed; - } - } - - private static HashMap impls = new HashMap(); - - public static void registerDefaultImpl(String iname, String cname) { - impls.put(iname.replace('.', '/'), new InterfaceImpl(iname, cname)); - } - - @Override - public byte[] transform(String name, String transformedName, byte[] bytes) { - if(transformedName.startsWith("net.minecraft") || impls.isEmpty()) - return bytes; - - ClassNode cnode = ASMHelper.createClassNode(bytes); - boolean changed = false; - for(String iname : cnode.interfaces) { - InterfaceImpl impl = impls.get(iname); - if(impl != null) - changed |= impl.patch(cnode); - } - - return changed ? ASMHelper.createBytes(cnode, 0) : bytes; - } + public InterfaceImpl(String iname, String cname) { + this.iname = iname; + HashSet names = new HashSet(); + ClassNode inode = getClassNode(iname); + for (MethodNode method : inode.methods) names.add(method.name + method.desc); + + ClassNode cnode = getClassNode(cname); + for (MethodNode method : cnode.methods) + if (names.contains(method.name + method.desc)) { + impls.add(method); + method.desc = new ObfMapping(cnode.name, method.name, method.desc).toRuntime().s_desc; + } + } + + public boolean patch(ClassNode cnode) { + LinkedList names = new LinkedList(); + for (MethodNode method : cnode.methods) { + ObfMapping m = new ObfMapping(cnode.name, method.name, method.desc).toRuntime(); + names.add(m.s_name + m.s_desc); + } + + boolean changed = false; + for (MethodNode impl : impls) { + if (names.contains(impl.name + impl.desc)) continue; + + MethodNode copy = new MethodNode( + impl.access, + impl.name, + impl.desc, + impl.signature, + impl.exceptions == null ? null : impl.exceptions.toArray(new String[0])); + ASMHelper.copy(impl, copy); + cnode.methods.add(impl); + changed = true; + } + return changed; + } + } + + private static HashMap impls = new HashMap(); + + public static void registerDefaultImpl(String iname, String cname) { + impls.put(iname.replace('.', '/'), new InterfaceImpl(iname, cname)); + } + + @Override + public byte[] transform(String name, String transformedName, byte[] bytes) { + if (transformedName.startsWith("net.minecraft") || impls.isEmpty()) return bytes; + + ClassNode cnode = ASMHelper.createClassNode(bytes); + boolean changed = false; + for (String iname : cnode.interfaces) { + InterfaceImpl impl = impls.get(iname); + if (impl != null) changed |= impl.patch(cnode); + } + + return changed ? ASMHelper.createBytes(cnode, 0) : bytes; + } } diff --git a/src/main/java/codechicken/core/asm/DelegatedTransformer.java b/src/main/java/codechicken/core/asm/DelegatedTransformer.java index c212469..6d5d820 100644 --- a/src/main/java/codechicken/core/asm/DelegatedTransformer.java +++ b/src/main/java/codechicken/core/asm/DelegatedTransformer.java @@ -1,5 +1,7 @@ package codechicken.core.asm; +import static codechicken.core.launch.CodeChickenCorePlugin.logger; + import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; @@ -11,141 +13,117 @@ import java.util.Map; import java.util.Stack; import java.util.jar.JarFile; import java.util.zip.ZipEntry; - +import net.minecraft.launchwrapper.IClassTransformer; import net.minecraft.launchwrapper.Launch; +import net.minecraft.launchwrapper.LaunchClassLoader; import org.objectweb.asm.ClassReader; import org.objectweb.asm.Opcodes; -import net.minecraft.launchwrapper.IClassTransformer; -import net.minecraft.launchwrapper.LaunchClassLoader; - -import static codechicken.core.launch.CodeChickenCorePlugin.logger; - -public class DelegatedTransformer implements IClassTransformer -{ +public class DelegatedTransformer implements IClassTransformer { private static ArrayList delegatedTransformers; private static Method m_defineClass; private static Field f_cachedClasses; - - public DelegatedTransformer() - { + + public DelegatedTransformer() { delegatedTransformers = new ArrayList(); - try - { - m_defineClass = ClassLoader.class.getDeclaredMethod("defineClass", String.class, byte[].class, Integer.TYPE, Integer.TYPE); + try { + m_defineClass = ClassLoader.class.getDeclaredMethod( + "defineClass", String.class, byte[].class, Integer.TYPE, Integer.TYPE); m_defineClass.setAccessible(true); f_cachedClasses = LaunchClassLoader.class.getDeclaredField("cachedClasses"); f_cachedClasses.setAccessible(true); - } - catch(Exception e) - { + } catch (Exception e) { throw new RuntimeException(e); } } - + @Override - public byte[] transform(String name, String tname, byte[] bytes) - { + public byte[] transform(String name, String tname, byte[] bytes) { if (bytes == null) return null; - for(IClassTransformer trans : delegatedTransformers) - bytes = trans.transform(name, tname, bytes); + for (IClassTransformer trans : delegatedTransformers) bytes = trans.transform(name, tname, bytes); return bytes; } - public static void addTransformer(String transformer, JarFile jar, File jarFile) - { + public static void addTransformer(String transformer, JarFile jar, File jarFile) { logger.debug("Adding CCTransformer: " + transformer); - try - { + try { byte[] bytes; bytes = Launch.classLoader.getClassBytes(transformer); - - if(bytes == null) - { - String resourceName = transformer.replace('.', '/')+".class"; + + if (bytes == null) { + String resourceName = transformer.replace('.', '/') + ".class"; ZipEntry entry = jar.getEntry(resourceName); - if(entry == null) - throw new Exception("Failed to add transformer: "+transformer+". Entry not found in jar file "+jarFile.getName()); - + if (entry == null) + throw new Exception("Failed to add transformer: " + transformer + ". Entry not found in jar file " + + jarFile.getName()); + bytes = readFully(jar.getInputStream(entry)); } - + defineDependancies(bytes, jar, jarFile); Class clazz = defineClass(transformer, bytes); - - if(!IClassTransformer.class.isAssignableFrom(clazz)) - throw new Exception("Failed to add transformer: "+transformer+" is not an instance of IClassTransformer"); - + + if (!IClassTransformer.class.isAssignableFrom(clazz)) + throw new Exception( + "Failed to add transformer: " + transformer + " is not an instance of IClassTransformer"); + IClassTransformer classTransformer; - try - { - classTransformer = (IClassTransformer) clazz.getDeclaredConstructor(File.class).newInstance(jarFile); - } - catch(NoSuchMethodException nsme) - { + try { + classTransformer = (IClassTransformer) + clazz.getDeclaredConstructor(File.class).newInstance(jarFile); + } catch (NoSuchMethodException nsme) { classTransformer = (IClassTransformer) clazz.newInstance(); } delegatedTransformers.add(classTransformer); - } - catch(Exception e) - { + } catch (Exception e) { e.printStackTrace(); - } + } } - - private static void defineDependancies(byte[] bytes, JarFile jar, File jarFile) throws Exception - { + + private static void defineDependancies(byte[] bytes, JarFile jar, File jarFile) throws Exception { defineDependancies(bytes, jar, jarFile, new Stack()); } - private static void defineDependancies(byte[] bytes, JarFile jar, File jarFile, Stack depStack) throws Exception - { + private static void defineDependancies(byte[] bytes, JarFile jar, File jarFile, Stack depStack) + throws Exception { ClassReader reader = new ClassReader(bytes); DependancyLister lister = new DependancyLister(Opcodes.ASM4); reader.accept(lister, 0); - + depStack.push(reader.getClassName()); - - for(String dependancy : lister.getDependancies()) - { - if(depStack.contains(dependancy)) - continue; - - try - { + + for (String dependancy : lister.getDependancies()) { + if (depStack.contains(dependancy)) continue; + + try { Launch.classLoader.loadClass(dependancy.replace('/', '.')); - } - catch(ClassNotFoundException cnfe) - { - ZipEntry entry = jar.getEntry(dependancy+".class"); - if(entry == null) - throw new Exception("Dependency "+dependancy+" not found in jar file "+jarFile.getName()); - + } catch (ClassNotFoundException cnfe) { + ZipEntry entry = jar.getEntry(dependancy + ".class"); + if (entry == null) + throw new Exception("Dependency " + dependancy + " not found in jar file " + jarFile.getName()); + byte[] depbytes = readFully(jar.getInputStream(entry)); defineDependancies(depbytes, jar, jarFile, depStack); - logger.debug("Defining dependancy: "+dependancy); - + logger.debug("Defining dependancy: " + dependancy); + defineClass(dependancy.replace('/', '.'), depbytes); } } - + depStack.pop(); } - private static Class defineClass(String classname, byte[] bytes) throws Exception - { + private static Class defineClass(String classname, byte[] bytes) throws Exception { Class clazz = (Class) m_defineClass.invoke(Launch.classLoader, classname, bytes, 0, bytes.length); - ((Map>)f_cachedClasses.get(Launch.classLoader)).put(classname, clazz); + ((Map>) f_cachedClasses.get(Launch.classLoader)).put(classname, clazz); return clazz; } - public static byte[] readFully(InputStream stream) throws IOException - { + public static byte[] readFully(InputStream stream) throws IOException { ByteArrayOutputStream bos = new ByteArrayOutputStream(stream.available()); int r; - while ((r = stream.read()) != -1) - { + while ((r = stream.read()) != -1) { bos.write(r); } diff --git a/src/main/java/codechicken/core/asm/DependancyLister.java b/src/main/java/codechicken/core/asm/DependancyLister.java index a732bbf..92549a1 100644 --- a/src/main/java/codechicken/core/asm/DependancyLister.java +++ b/src/main/java/codechicken/core/asm/DependancyLister.java @@ -5,91 +5,74 @@ import java.util.HashSet; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; - import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.FieldVisitor; import org.objectweb.asm.Label; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; -public class DependancyLister extends ClassVisitor -{ +public class DependancyLister extends ClassVisitor { private static Pattern classdesc = Pattern.compile("L(.+?);"); - - private class DependancyMethodLister extends MethodVisitor - { - public DependancyMethodLister(int api) - { + + private class DependancyMethodLister extends MethodVisitor { + public DependancyMethodLister(int api) { super(api); } - + @Override - public void visitFieldInsn(int opcode, String owner, String name, String desc) - { + public void visitFieldInsn(int opcode, String owner, String name, String desc) { dependDesc(desc); } - + @Override - public void visitLocalVariable(String name, String desc, String signature, Label start, Label end, int index) - { + public void visitLocalVariable(String name, String desc, String signature, Label start, Label end, int index) { dependDesc(desc); } - + @Override - public void visitMethodInsn(int opcode, String owner, String name, String desc) - { + public void visitMethodInsn(int opcode, String owner, String name, String desc) { depend(owner); dependDesc(desc); } } - + private HashSet dependancies = new HashSet(); - public DependancyLister(int api) - { + public DependancyLister(int api) { super(api); } - + @Override - public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) - { + public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) { dependDesc(desc); return null; } - - private void dependDesc(String desc) - { + + private void dependDesc(String desc) { Matcher match = classdesc.matcher(desc); - while(match.find()) - { + while (match.find()) { String s = match.group(); - depend(s.substring(1, s.length()-1)); + depend(s.substring(1, s.length() - 1)); } } - private void depend(String classname) - { + private void depend(String classname) { dependancies.add(classname); } @Override - public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) - { + public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { dependDesc(desc); return new DependancyMethodLister(Opcodes.ASM4); } - + @Override - public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) - { + public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { depend(superName); - if(interfaces != null) - for(String interfacename : interfaces) - depend(interfacename); + if (interfaces != null) for (String interfacename : interfaces) depend(interfacename); } - - public List getDependancies() - { + + public List getDependancies() { return new ArrayList(dependancies); } } diff --git a/src/main/java/codechicken/core/asm/InterfaceDependancies.java b/src/main/java/codechicken/core/asm/InterfaceDependancies.java index 9048a0f..bf8e682 100644 --- a/src/main/java/codechicken/core/asm/InterfaceDependancies.java +++ b/src/main/java/codechicken/core/asm/InterfaceDependancies.java @@ -5,10 +5,6 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; - @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) -public @interface InterfaceDependancies -{ - -} +public @interface InterfaceDependancies {} diff --git a/src/main/java/codechicken/core/asm/InterfaceDependancyTransformer.java b/src/main/java/codechicken/core/asm/InterfaceDependancyTransformer.java deleted file mode 100644 index 7992829..0000000 --- a/src/main/java/codechicken/core/asm/InterfaceDependancyTransformer.java +++ /dev/null @@ -1,53 +0,0 @@ -package codechicken.core.asm; - -import java.util.Iterator; - -import codechicken.lib.asm.ASMInit; -import net.minecraft.launchwrapper.Launch; -import org.objectweb.asm.Type; -import org.objectweb.asm.tree.AnnotationNode; -import org.objectweb.asm.tree.ClassNode; - -import codechicken.lib.asm.ASMHelper; -import codechicken.lib.asm.ObfMapping; - -import net.minecraft.launchwrapper.IClassTransformer; - -public class InterfaceDependancyTransformer implements IClassTransformer -{ - static { - ASMInit.init(); - } - - @Override - public byte[] transform(String name, String tname, byte[] bytes) { - if (bytes == null) return null; - ClassNode cnode = ASMHelper.createClassNode(bytes); - - boolean hasDependancyInterfaces = false; - if (cnode.visibleAnnotations != null) - for (AnnotationNode ann : cnode.visibleAnnotations) - if (ann.desc.equals(Type.getDescriptor(InterfaceDependancies.class))) { - hasDependancyInterfaces = true; - break; - } - - if (!hasDependancyInterfaces) - return bytes; - - hasDependancyInterfaces = false; - for (Iterator iterator = cnode.interfaces.iterator(); iterator.hasNext(); ) { - try { - Launch.classLoader.findClass(new ObfMapping(iterator.next()).toRuntime().javaClass()); - } catch (ClassNotFoundException cnfe) { - iterator.remove(); - hasDependancyInterfaces = true; - } - } - - if (!hasDependancyInterfaces) - return bytes; - - return ASMHelper.createBytes(cnode, 0); - } -} diff --git a/src/main/java/codechicken/core/asm/MCPDeobfuscationTransformer.java b/src/main/java/codechicken/core/asm/MCPDeobfuscationTransformer.java index 45d6d53..9af7f6f 100644 --- a/src/main/java/codechicken/core/asm/MCPDeobfuscationTransformer.java +++ b/src/main/java/codechicken/core/asm/MCPDeobfuscationTransformer.java @@ -1,13 +1,23 @@ package codechicken.core.asm; +import codechicken.lib.asm.ASMHelper; +import codechicken.lib.asm.ASMInit; +import codechicken.lib.asm.CC_ClassWriter; +import codechicken.lib.asm.ObfMapping; +import codechicken.obfuscator.IHeirachyEvaluator; +import codechicken.obfuscator.ObfuscationMap.ObfuscationEntry; +import codechicken.obfuscator.ObfuscationRun; +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Multimap; +import cpw.mods.fml.common.asm.transformers.AccessTransformer; +import cpw.mods.fml.relauncher.IFMLLoadingPlugin; import java.io.IOException; import java.lang.reflect.Field; import java.util.*; import java.util.Map.Entry; - -import codechicken.lib.asm.ASMInit; -import cpw.mods.fml.relauncher.IFMLLoadingPlugin; +import net.minecraft.launchwrapper.IClassTransformer; import net.minecraft.launchwrapper.Launch; +import net.minecraft.launchwrapper.LaunchClassLoader; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassWriter; import org.objectweb.asm.Opcodes; @@ -15,28 +25,12 @@ import org.objectweb.asm.tree.ClassNode; import org.objectweb.asm.tree.MethodInsnNode; import org.objectweb.asm.tree.MethodNode; -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; - -import codechicken.lib.asm.ASMHelper; -import codechicken.lib.asm.CC_ClassWriter; -import codechicken.lib.asm.ObfMapping; -import codechicken.obfuscator.IHeirachyEvaluator; -import codechicken.obfuscator.ObfuscationRun; -import codechicken.obfuscator.ObfuscationMap.ObfuscationEntry; -import cpw.mods.fml.common.asm.transformers.AccessTransformer; - -import net.minecraft.launchwrapper.IClassTransformer; -import net.minecraft.launchwrapper.LaunchClassLoader; - -public class MCPDeobfuscationTransformer implements IClassTransformer, Opcodes, IHeirachyEvaluator -{ +public class MCPDeobfuscationTransformer implements IClassTransformer, Opcodes, IHeirachyEvaluator { static { ASMInit.init(); } - public static class LoadPlugin implements IFMLLoadingPlugin - { + public static class LoadPlugin implements IFMLLoadingPlugin { @Override public String[] getASMTransformerClass() { return new String[0]; @@ -78,7 +72,8 @@ public class MCPDeobfuscationTransformer implements IClassTransformer, Opcodes, try { f_transformers = LaunchClassLoader.class.getDeclaredField("transformers"); f_modifiers = AccessTransformer.class.getDeclaredField("modifiers"); - Class c_Modifier = Class.forName(AccessTransformer.class.getName() + "$Modifier", false, Launch.classLoader); + Class c_Modifier = + Class.forName(AccessTransformer.class.getName() + "$Modifier", false, Launch.classLoader); f_Modifier_name = c_Modifier.getDeclaredField("name"); f_Modifier_desc = c_Modifier.getDeclaredField("desc"); @@ -115,21 +110,25 @@ public class MCPDeobfuscationTransformer implements IClassTransformer, Opcodes, public static void load() { CodeChickenCoreModContainer.loadConfig(); - if (CodeChickenCoreModContainer.config.getTag("dev.deobfuscate") + if (CodeChickenCoreModContainer.config + .getTag("dev.deobfuscate") .setComment("set to true to completely deobfuscate mcp names") .getBooleanValue(!ObfMapping.obfuscated)) { - run = new ObfuscationRun(false, ObfMapping.MCPRemapper.getConfFiles(), + run = new ObfuscationRun( + false, + ObfMapping.MCPRemapper.getConfFiles(), ObfuscationRun.fillDefaults(new HashMap())); run.obf.setHeirachyEvaluator(instance); run.setQuiet().parseMappings(); - Collections.addAll(excludedPackages, run.config.get("excludedPackages").split(";")); + Collections.addAll( + excludedPackages, run.config.get("excludedPackages").split(";")); if (ObfMapping.obfuscated) { ObfMapping.loadMCPRemapper(); run.setSeargeConstants(); getTransformers().add(instance); } else { - getTransformers().add(0, instance);//insert transformer as first. + getTransformers().add(0, instance); // insert transformer as first. } } } @@ -141,8 +140,7 @@ public class MCPDeobfuscationTransformer implements IClassTransformer, Opcodes, activated = true; } - if (!activated || bytes == null) - return bytes; + if (!activated || bytes == null) return bytes; ClassNode cnode = ASMHelper.createClassNode(bytes, ClassReader.EXPAND_FRAMES); ClassWriter cw = new CC_ClassWriter(0, true); @@ -153,21 +151,20 @@ public class MCPDeobfuscationTransformer implements IClassTransformer, Opcodes, private byte[] injectCallback(byte[] bytes) { ClassNode cnode = ASMHelper.createClassNode(bytes); MethodNode mnode = ASMHelper.findMethod(new ObfMapping(cnode.name, "", "()V"), cnode); - mnode.instructions.insert(new MethodInsnNode(INVOKESTATIC, "codechicken/core/asm/MCPDeobfuscationTransformer", "loadCallback", "()V")); + mnode.instructions.insert(new MethodInsnNode( + INVOKESTATIC, "codechicken/core/asm/MCPDeobfuscationTransformer", "loadCallback", "()V")); return ASMHelper.createBytes(cnode, 0); } public static void loadCallback() { if (ObfMapping.obfuscated) { - //move ourselves to the end + // move ourselves to the end List transformers = getTransformers(); transformers.remove(instance); transformers.add(instance); } else { - //remap access transformers - for (IClassTransformer t : getTransformers()) - if (t instanceof AccessTransformer) - remapAccessTransformer(t); + // remap access transformers + for (IClassTransformer t : getTransformers()) if (t instanceof AccessTransformer) remapAccessTransformer(t); } } @@ -207,10 +204,10 @@ public class MCPDeobfuscationTransformer implements IClassTransformer, Opcodes, name = name.replace('/', '.'); try { byte[] bytes = Launch.classLoader.getClassBytes(name); - if (bytes != null) - return ObfuscationRun.getParents(ASMHelper.createClassNode(bytes)); - } catch (IOException ignored) {} - //clear the miss cache because the library containing it might be loaded later + if (bytes != null) return ObfuscationRun.getParents(ASMHelper.createClassNode(bytes)); + } catch (IOException ignored) { + } + // clear the miss cache because the library containing it might be loaded later Launch.classLoader.clearNegativeEntries(Collections.singleton(name)); return null; } @@ -218,19 +215,15 @@ public class MCPDeobfuscationTransformer implements IClassTransformer, Opcodes, @Override public boolean isLibClass(ObfuscationEntry desc) { String name = desc.srg.s_owner; - for (String p : excludedPackages) - if (name.startsWith(p)) - return true; + for (String p : excludedPackages) if (name.startsWith(p)) return true; return false; } public static String unmap(String name) { - if (run == null) - return null; + if (run == null) return null; ObfuscationEntry e = run.obf.lookupMcpClass(name); - if (e == null) - return null; + if (e == null) return null; return e.obf.s_owner; } diff --git a/src/main/java/codechicken/core/asm/MethodASMifier.java b/src/main/java/codechicken/core/asm/MethodASMifier.java index 8a40d79..55a1519 100644 --- a/src/main/java/codechicken/core/asm/MethodASMifier.java +++ b/src/main/java/codechicken/core/asm/MethodASMifier.java @@ -1,8 +1,10 @@ package codechicken.core.asm; +import static org.objectweb.asm.Opcodes.*; + +import codechicken.lib.asm.ObfMapping; import java.io.File; import java.io.PrintWriter; - import net.minecraft.launchwrapper.Launch; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassVisitor; @@ -10,13 +12,7 @@ import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.util.Printer; import org.objectweb.asm.util.TraceMethodVisitor; -import codechicken.core.launch.CodeChickenCorePlugin; -import codechicken.lib.asm.ObfMapping; - -import static org.objectweb.asm.Opcodes.*; - -public class MethodASMifier extends ClassVisitor -{ +public class MethodASMifier extends ClassVisitor { PrintWriter printWriter; ObfMapping method; Printer asmifier; @@ -55,10 +51,8 @@ public class MethodASMifier extends ClassVisitor public static void printMethod(ObfMapping method, byte[] bytes, Printer printer, File toFile) { try { - if (!toFile.getParentFile().exists()) - toFile.getParentFile().mkdirs(); - if (!toFile.exists()) - toFile.createNewFile(); + if (!toFile.getParentFile().exists()) toFile.getParentFile().mkdirs(); + if (!toFile.exists()) toFile.createNewFile(); PrintWriter printWriter = new PrintWriter(toFile); diff --git a/src/main/java/codechicken/core/asm/TweakTransformer.java b/src/main/java/codechicken/core/asm/TweakTransformer.java index 77484f5..8ae895e 100644 --- a/src/main/java/codechicken/core/asm/TweakTransformer.java +++ b/src/main/java/codechicken/core/asm/TweakTransformer.java @@ -1,23 +1,20 @@ package codechicken.core.asm; +import static codechicken.lib.asm.InsnComparator.*; + import codechicken.lib.asm.*; import codechicken.lib.asm.ModularASMTransformer.MethodReplacer; import codechicken.lib.asm.ModularASMTransformer.MethodTransformer; import codechicken.lib.asm.ModularASMTransformer.MethodWriter; +import codechicken.lib.config.ConfigTag; +import java.util.Map; +import net.minecraft.launchwrapper.IClassTransformer; import org.objectweb.asm.Opcodes; import org.objectweb.asm.tree.JumpInsnNode; import org.objectweb.asm.tree.LabelNode; import org.objectweb.asm.tree.MethodNode; -import codechicken.lib.config.ConfigTag; -import net.minecraft.launchwrapper.IClassTransformer; - -import java.util.Map; - -import static codechicken.lib.asm.InsnComparator.*; - -public class TweakTransformer implements IClassTransformer, Opcodes -{ +public class TweakTransformer implements IClassTransformer, Opcodes { static { ASMInit.init(); } @@ -28,53 +25,71 @@ public class TweakTransformer implements IClassTransformer, Opcodes public static void load() { CodeChickenCoreModContainer.loadConfig(); - tweaks = CodeChickenCoreModContainer.config.getTag("tweaks") - .setComment("Various tweaks that can be applied to game mechanics.").useBraces(); + tweaks = CodeChickenCoreModContainer.config + .getTag("tweaks") + .setComment("Various tweaks that can be applied to game mechanics.") + .useBraces(); tweaks.removeTag("persistantLava"); if (tweaks.getTag("environmentallyFriendlyCreepers") - .setComment("If set to true, creepers will not destroy landscape. (A version of mobGriefing setting just for creepers)") + .setComment( + "If set to true, creepers will not destroy landscape. (A version of mobGriefing setting just for creepers)") .getBooleanValue(false)) { - transformer.add(new MethodReplacer(new ObfMapping("net/minecraft/entity/monster/EntityCreeper", "func_146077_cc", "()V"), - blocks.get("d_environmentallyFriendlyCreepers"), blocks.get("environmentallyFriendlyCreepers"))); + transformer.add(new MethodReplacer( + new ObfMapping("net/minecraft/entity/monster/EntityCreeper", "func_146077_cc", "()V"), + blocks.get("d_environmentallyFriendlyCreepers"), + blocks.get("environmentallyFriendlyCreepers"))); } if (!tweaks.getTag("softLeafReplace") .setComment("If set to false, leaves will only replace air when growing") .getBooleanValue(false)) { - transformer.add(new MethodWriter(ACC_PUBLIC, new ObfMapping("net/minecraft/block/Block", "canBeReplacedByLeaves", "(Lnet/minecraft/world/IBlockAccess;III)Z"), blocks.get("softLeafReplace"))); + transformer.add(new MethodWriter( + ACC_PUBLIC, + new ObfMapping( + "net/minecraft/block/Block", + "canBeReplacedByLeaves", + "(Lnet/minecraft/world/IBlockAccess;III)Z"), + blocks.get("softLeafReplace"))); } if (tweaks.getTag("doFireTickOut") - .setComment("If set to true and doFireTick is disabled in the game rules, fire will still dissipate if it's not over a fire source") + .setComment( + "If set to true and doFireTick is disabled in the game rules, fire will still dissipate if it's not over a fire source") .getBooleanValue(true)) { - transformer.add(new MethodTransformer(new ObfMapping("net/minecraft/block/BlockFire", "func_149674_a", "(Lnet/minecraft/world/World;IIILjava/util/Random;)V")) - { - @Override - public void transform(MethodNode mv) { - ASMBlock needle = blocks.get("n_doFireTick"); - ASMBlock inject = blocks.get("doFireTick"); + transformer.add( + new MethodTransformer(new ObfMapping( + "net/minecraft/block/BlockFire", + "func_149674_a", + "(Lnet/minecraft/world/World;IIILjava/util/Random;)V")) { + @Override + public void transform(MethodNode mv) { + ASMBlock needle = blocks.get("n_doFireTick"); + ASMBlock inject = blocks.get("doFireTick"); - ASMBlock key = needle.applyLabels(findOnce(mv.instructions, needle.list)); - LabelNode jlabel = key.get("LRET"); - mv.instructions.insertBefore(jlabel, new JumpInsnNode(GOTO, inject.get("LSKIP"))); - mv.instructions.insert(jlabel, inject.list.list); - } - }); + ASMBlock key = needle.applyLabels(findOnce(mv.instructions, needle.list)); + LabelNode jlabel = key.get("LRET"); + mv.instructions.insertBefore(jlabel, new JumpInsnNode(GOTO, inject.get("LSKIP"))); + mv.instructions.insert(jlabel, inject.list.list); + } + }); } if (tweaks.getTag("finiteWater") .setComment("If set to true two adjacent water source blocks will not generate a third.") .getBooleanValue(false)) { - transformer.add(new MethodTransformer(new ObfMapping("net/minecraft/block/BlockDynamicLiquid", "func_149674_a", "(Lnet/minecraft/world/World;IIILjava/util/Random;)V")) - { - @Override - public void transform(MethodNode mv) { - ASMBlock needle = blocks.get("finiteWater"); - ASMBlock key = needle.applyLabels(findOnce(mv.instructions, needle.list)); - mv.instructions.insertBefore(key.list.getFirst(), new JumpInsnNode(GOTO, key.get("LEND"))); - } - }); + transformer.add( + new MethodTransformer(new ObfMapping( + "net/minecraft/block/BlockDynamicLiquid", + "func_149674_a", + "(Lnet/minecraft/world/World;IIILjava/util/Random;)V")) { + @Override + public void transform(MethodNode mv) { + ASMBlock needle = blocks.get("finiteWater"); + ASMBlock key = needle.applyLabels(findOnce(mv.instructions, needle.list)); + mv.instructions.insertBefore(key.list.getFirst(), new JumpInsnNode(GOTO, key.get("LEND"))); + } + }); } } diff --git a/src/main/java/codechicken/core/commands/CoreCommand.java b/src/main/java/codechicken/core/commands/CoreCommand.java index aaf30c4..dffde45 100644 --- a/src/main/java/codechicken/core/commands/CoreCommand.java +++ b/src/main/java/codechicken/core/commands/CoreCommand.java @@ -1,25 +1,22 @@ package codechicken.core.commands; -import java.util.List; - import codechicken.core.ServerUtils; +import java.util.List; +import net.minecraft.command.ICommand; +import net.minecraft.command.ICommandSender; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.server.MinecraftServer; import net.minecraft.util.ChatComponentText; import net.minecraft.util.ChatComponentTranslation; import net.minecraft.util.ChunkCoordinates; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.command.ICommand; -import net.minecraft.command.ICommandSender; import net.minecraft.util.IChatComponent; import net.minecraft.world.World; import net.minecraft.world.WorldServer; import net.minecraftforge.common.DimensionManager; -public abstract class CoreCommand implements ICommand -{ - public class WCommandSender implements ICommandSender - { +public abstract class CoreCommand implements ICommand { + public class WCommandSender implements ICommandSender { public ICommandSender wrapped; public WCommandSender(ICommandSender sender) { @@ -78,15 +75,13 @@ public abstract class CoreCommand implements ICommand public void processCommand(ICommandSender listener, String[] args) { WCommandSender wsender = new WCommandSender(listener); - if (args.length < minimumParameters() || - args.length == 1 && args[0].equals("help")) { + if (args.length < minimumParameters() || args.length == 1 && args[0].equals("help")) { printHelp(wsender); return; } String command = getCommandName(); - for (String arg : args) - command += " " + arg; + for (String arg : args) command += " " + arg; handleCommand(command, wsender.getCommandSenderName(), args, wsender); } @@ -131,15 +126,14 @@ public abstract class CoreCommand implements ICommand public boolean canCommandSenderUseCommand(ICommandSender var1) { if (OPOnly()) { if (var1 instanceof EntityPlayer) - return MinecraftServer.getServer().getConfigurationManager().func_152596_g(((EntityPlayer) var1).getGameProfile()); - else if (var1 instanceof MinecraftServer) - return true; - else - return false; + return MinecraftServer.getServer() + .getConfigurationManager() + .func_152596_g(((EntityPlayer) var1).getGameProfile()); + else if (var1 instanceof MinecraftServer) return true; + else return false; } return true; } - public abstract int minimumParameters(); } diff --git a/src/main/java/codechicken/core/commands/PlayerCommand.java b/src/main/java/codechicken/core/commands/PlayerCommand.java index 1b42cd5..694f03d 100644 --- a/src/main/java/codechicken/core/commands/PlayerCommand.java +++ b/src/main/java/codechicken/core/commands/PlayerCommand.java @@ -1,60 +1,53 @@ package codechicken.core.commands; -import net.minecraft.util.MovingObjectPosition.MovingObjectType; -import net.minecraft.world.ChunkPosition; +import net.minecraft.command.ICommandSender; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.command.ICommandSender; import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.MovingObjectPosition.MovingObjectType; import net.minecraft.util.Vec3; +import net.minecraft.world.ChunkPosition; import net.minecraft.world.WorldServer; -public abstract class PlayerCommand extends CoreCommand -{ +public abstract class PlayerCommand extends CoreCommand { @Override - public boolean canCommandSenderUseCommand(ICommandSender var1) - { - if(!super.canCommandSenderUseCommand(var1)) - return false; + public boolean canCommandSenderUseCommand(ICommandSender var1) { + if (!super.canCommandSenderUseCommand(var1)) return false; return var1 instanceof EntityPlayer; } - - + @Override - public void handleCommand(String command, String playername, String[] args, WCommandSender listener) - { - EntityPlayerMP player = (EntityPlayerMP)listener.wrapped; + public void handleCommand(String command, String playername, String[] args, WCommandSender listener) { + EntityPlayerMP player = (EntityPlayerMP) listener.wrapped; handleCommand(getWorld(player), player, args); } - + public abstract void handleCommand(WorldServer world, EntityPlayerMP player, String[] args); - - public ChunkPosition getPlayerLookingAtBlock(EntityPlayerMP player, float reach) - { - Vec3 vec3d = Vec3.createVectorHelper(player.posX, (player.posY + 1.6200000000000001D) - player.yOffset, player.posZ); + + public ChunkPosition getPlayerLookingAtBlock(EntityPlayerMP player, float reach) { + Vec3 vec3d = + Vec3.createVectorHelper(player.posX, (player.posY + 1.6200000000000001D) - player.yOffset, player.posZ); Vec3 vec3d1 = player.getLook(1.0F); Vec3 vec3d2 = vec3d.addVector(vec3d1.xCoord * reach, vec3d1.yCoord * reach, vec3d1.zCoord * reach); MovingObjectPosition hit = player.worldObj.rayTraceBlocks(vec3d, vec3d2); - if(hit == null || hit.typeOfHit != MovingObjectType.BLOCK) - { + if (hit == null || hit.typeOfHit != MovingObjectType.BLOCK) { return null; } - + return new ChunkPosition(hit.blockX, hit.blockY, hit.blockZ); } - - public Entity getPlayerLookingAtEntity(EntityPlayerMP player, float reach) - { - Vec3 vec3d = Vec3.createVectorHelper(player.posX, (player.posY + 1.6200000000000001D) - player.yOffset, player.posZ); + + public Entity getPlayerLookingAtEntity(EntityPlayerMP player, float reach) { + Vec3 vec3d = + Vec3.createVectorHelper(player.posX, (player.posY + 1.6200000000000001D) - player.yOffset, player.posZ); Vec3 vec3d1 = player.getLook(1.0F); Vec3 vec3d2 = vec3d.addVector(vec3d1.xCoord * reach, vec3d1.yCoord * reach, vec3d1.zCoord * reach); MovingObjectPosition hit = player.worldObj.rayTraceBlocks(vec3d, vec3d2); - if(hit == null || hit.typeOfHit != MovingObjectType.ENTITY) - { + if (hit == null || hit.typeOfHit != MovingObjectType.ENTITY) { return null; } - + return hit.entityHit; } } diff --git a/src/main/java/codechicken/core/commands/ServerCommand.java b/src/main/java/codechicken/core/commands/ServerCommand.java index ef06809..86cdc6a 100644 --- a/src/main/java/codechicken/core/commands/ServerCommand.java +++ b/src/main/java/codechicken/core/commands/ServerCommand.java @@ -1,28 +1,23 @@ package codechicken.core.commands; -import net.minecraft.server.MinecraftServer; import net.minecraft.command.ICommandSender; +import net.minecraft.server.MinecraftServer; -public abstract class ServerCommand extends CoreCommand -{ +public abstract class ServerCommand extends CoreCommand { @Override - public void processCommand(ICommandSender var1, String[] var2) - { - handleCommand(var2, (MinecraftServer)var1); + public void processCommand(ICommandSender var1, String[] var2) { + handleCommand(var2, (MinecraftServer) var1); } - + @Override - public boolean canCommandSenderUseCommand(ICommandSender var1) - { - if(!super.canCommandSenderUseCommand(var1)) - return false; + public boolean canCommandSenderUseCommand(ICommandSender var1) { + if (!super.canCommandSenderUseCommand(var1)) return false; return var1 instanceof MinecraftServer; } - + public abstract void handleCommand(String[] args, MinecraftServer listener); - public final boolean OPOnly() - { + public final boolean OPOnly() { return false; - } + } } diff --git a/src/main/java/codechicken/core/featurehack/EntityRenderHook.java b/src/main/java/codechicken/core/featurehack/EntityRenderHook.java index 8e89361..9d51fef 100644 --- a/src/main/java/codechicken/core/featurehack/EntityRenderHook.java +++ b/src/main/java/codechicken/core/featurehack/EntityRenderHook.java @@ -4,10 +4,8 @@ import net.minecraft.entity.Entity; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; -public class EntityRenderHook extends Entity -{ - public static interface IRenderCallback - { +public class EntityRenderHook extends Entity { + public static interface IRenderCallback { public void render(float frame, int pass); public boolean shouldRenderInPass(int pass); @@ -26,21 +24,17 @@ public class EntityRenderHook extends Entity @Override public void onUpdate() { - if (!callback.isValid()) - setDead(); + if (!callback.isValid()) setDead(); } @Override - protected void entityInit() { - } + protected void entityInit() {} @Override - protected void readEntityFromNBT(NBTTagCompound var1) { - } + protected void readEntityFromNBT(NBTTagCompound var1) {} @Override - protected void writeEntityToNBT(NBTTagCompound var1) { - } + protected void writeEntityToNBT(NBTTagCompound var1) {} @Override public boolean shouldRenderInPass(int pass) { diff --git a/src/main/java/codechicken/core/featurehack/EntityUpdateHook.java b/src/main/java/codechicken/core/featurehack/EntityUpdateHook.java index c6890d8..36eff20 100644 --- a/src/main/java/codechicken/core/featurehack/EntityUpdateHook.java +++ b/src/main/java/codechicken/core/featurehack/EntityUpdateHook.java @@ -4,44 +4,33 @@ import net.minecraft.entity.Entity; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; -public class EntityUpdateHook extends Entity -{ - public static interface IUpdateCallback - { +public class EntityUpdateHook extends Entity { + public static interface IUpdateCallback { public void onUpdate(); public boolean isValid(); } - + public final IUpdateCallback callback; - public EntityUpdateHook(World world, int x, int y, int z, IUpdateCallback callback) - { + + public EntityUpdateHook(World world, int x, int y, int z, IUpdateCallback callback) { super(world); setPosition(x, y, z); this.callback = callback; } @Override - public void onUpdate() - { - if(!callback.isValid()) - setDead(); - else - callback.onUpdate(); + public void onUpdate() { + if (!callback.isValid()) setDead(); + else callback.onUpdate(); } @Override - protected void entityInit() - { - } + protected void entityInit() {} @Override - protected void readEntityFromNBT(NBTTagCompound var1) - { - } + protected void readEntityFromNBT(NBTTagCompound var1) {} @Override - protected void writeEntityToNBT(NBTTagCompound var1) - { - } + protected void writeEntityToNBT(NBTTagCompound var1) {} } diff --git a/src/main/java/codechicken/core/featurehack/FeatureHack.java b/src/main/java/codechicken/core/featurehack/FeatureHack.java index 0f210d9..911a97b 100644 --- a/src/main/java/codechicken/core/featurehack/FeatureHack.java +++ b/src/main/java/codechicken/core/featurehack/FeatureHack.java @@ -5,34 +5,27 @@ import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -public class FeatureHack -{ +public class FeatureHack { private static boolean updateHookEnabled = false; private static boolean renderHookEnabled = false; - - public static void enableUpdateHook() - { - if(updateHookEnabled) - return; - + + public static void enableUpdateHook() { + if (updateHookEnabled) return; + updateHookEnabled = true; - if(FMLCommonHandler.instance().getSide().isClient()) - enableClientUpdateHook(); + if (FMLCommonHandler.instance().getSide().isClient()) enableClientUpdateHook(); } @SideOnly(Side.CLIENT) - public static void enableRenderHook() - { - if(renderHookEnabled) - return; - + public static void enableRenderHook() { + if (renderHookEnabled) return; + renderHookEnabled = true; RenderingRegistry.registerEntityRenderingHandler(EntityUpdateHook.class, new RenderNull()); } @SideOnly(Side.CLIENT) - private static void enableClientUpdateHook() - { + private static void enableClientUpdateHook() { RenderingRegistry.registerEntityRenderingHandler(EntityRenderHook.class, new RenderEntityRenderHook()); } } diff --git a/src/main/java/codechicken/core/featurehack/GameDataManipulator.java b/src/main/java/codechicken/core/featurehack/GameDataManipulator.java index 87e2dc4..2a1f0e3 100644 --- a/src/main/java/codechicken/core/featurehack/GameDataManipulator.java +++ b/src/main/java/codechicken/core/featurehack/GameDataManipulator.java @@ -1,27 +1,30 @@ package codechicken.core.featurehack; import codechicken.lib.asm.ObfMapping; +import java.lang.reflect.Field; +import java.util.Map; import net.minecraft.item.Item; import net.minecraft.util.ObjectIntIdentityMap; import net.minecraft.util.RegistryNamespaced; import net.minecraft.util.RegistrySimple; -import java.lang.reflect.Field; -import java.util.Map; - -public class GameDataManipulator -{ +public class GameDataManipulator { public static Field f_registryObjects; public static Field f_underlyingIntegerMap; - static - { + static { try { f_registryObjects = RegistrySimple.class.getDeclaredField( - new ObfMapping("net/minecraft/util/RegistrySimple", "field_82596_a", "Ljava/util/Map;").toRuntime().s_name); + new ObfMapping("net/minecraft/util/RegistrySimple", "field_82596_a", "Ljava/util/Map;") + .toRuntime() + .s_name); f_registryObjects.setAccessible(true); - f_underlyingIntegerMap = RegistryNamespaced.class.getDeclaredField( - new ObfMapping("net/minecraft/util/RegistryNamespaced", "field_148759_a", "Lnet/minecraft/util/ObjectIntIdentityMap;").toRuntime().s_name); + f_underlyingIntegerMap = RegistryNamespaced.class.getDeclaredField(new ObfMapping( + "net/minecraft/util/RegistryNamespaced", + "field_148759_a", + "Lnet/minecraft/util/ObjectIntIdentityMap;") + .toRuntime() + .s_name); f_underlyingIntegerMap.setAccessible(true); } catch (Exception e) { throw new RuntimeException(e); @@ -31,8 +34,8 @@ public class GameDataManipulator public static void replaceItem(int id, Item item) { try { String name = Item.itemRegistry.getNameForObject(Item.getItemById(id)); - ((Map)f_registryObjects.get(Item.itemRegistry)).put(name, item); - ((ObjectIntIdentityMap)f_underlyingIntegerMap.get(Item.itemRegistry)).func_148746_a(item, id); + ((Map) f_registryObjects.get(Item.itemRegistry)).put(name, item); + ((ObjectIntIdentityMap) f_underlyingIntegerMap.get(Item.itemRegistry)).func_148746_a(item, id); } catch (Exception e) { throw new RuntimeException(e); } diff --git a/src/main/java/codechicken/core/featurehack/LiquidTextures.java b/src/main/java/codechicken/core/featurehack/LiquidTextures.java index 2911c5a..9c00606 100644 --- a/src/main/java/codechicken/core/featurehack/LiquidTextures.java +++ b/src/main/java/codechicken/core/featurehack/LiquidTextures.java @@ -1,58 +1,56 @@ package codechicken.core.featurehack; -import java.lang.reflect.Field; import codechicken.core.ReflectionManager; +import codechicken.core.asm.TweakTransformer; import codechicken.core.featurehack.mc.TextureLavaFX; import codechicken.core.featurehack.mc.TextureLavaFlowFX; import codechicken.core.featurehack.mc.TextureWaterFX; import codechicken.core.featurehack.mc.TextureWaterFlowFX; +import codechicken.lib.asm.ObfMapping; import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import net.minecraft.block.Block; +import java.lang.reflect.Field; import net.minecraft.init.Blocks; import net.minecraft.util.IIcon; import net.minecraftforge.client.event.TextureStitchEvent; import net.minecraftforge.common.MinecraftForge; -import codechicken.core.asm.TweakTransformer; -import codechicken.lib.asm.ObfMapping; - -public class LiquidTextures -{ +public class LiquidTextures { public static IIcon[] newTextures = new IIcon[4]; - + public static boolean replaceLava; public static boolean replaceWater; - + private static Field field_tex; - - public static void init() - { - replaceWater = TweakTransformer.tweaks.getTag("replaceWaterFX").setComment("Set this to true to use the pre1.5 water textures").getBooleanValue(false); - replaceLava = TweakTransformer.tweaks.getTag("replaceLavaFX").setComment("Set this to true to use the pre1.5 lava textures").getBooleanValue(false); - if(replaceWater) - { + + public static void init() { + replaceWater = TweakTransformer.tweaks + .getTag("replaceWaterFX") + .setComment("Set this to true to use the pre1.5 water textures") + .getBooleanValue(false); + replaceLava = TweakTransformer.tweaks + .getTag("replaceLavaFX") + .setComment("Set this to true to use the pre1.5 lava textures") + .getBooleanValue(false); + if (replaceWater) { newTextures[0] = new TextureWaterFX().texture; newTextures[1] = new TextureWaterFlowFX().texture; } - if(replaceLava) - { + if (replaceLava) { newTextures[2] = new TextureLavaFX().texture; newTextures[3] = new TextureLavaFlowFX().texture; } - - if(replaceWater || replaceLava) - { + + if (replaceWater || replaceLava) { MinecraftForge.EVENT_BUS.register(new LiquidTextures()); - field_tex = ReflectionManager.getField(new ObfMapping("net/minecraft/block/BlockLiquid", "field_149806_a", "[Lnet/minecraft/util/IIcon;")); + field_tex = ReflectionManager.getField( + new ObfMapping("net/minecraft/block/BlockLiquid", "field_149806_a", "[Lnet/minecraft/util/IIcon;")); } } @SubscribeEvent - public void postStitch(TextureStitchEvent.Post event) - { + public void postStitch(TextureStitchEvent.Post event) { IIcon[] icons; - if(replaceLava) - { + if (replaceLava) { icons = ReflectionManager.get(field_tex, IIcon[].class, Blocks.flowing_lava); icons[0] = newTextures[2]; icons[1] = newTextures[3]; @@ -60,8 +58,7 @@ public class LiquidTextures icons[0] = newTextures[2]; icons[1] = newTextures[3]; } - if(replaceWater) - { + if (replaceWater) { icons = ReflectionManager.get(field_tex, IIcon[].class, Blocks.flowing_water); icons[0] = newTextures[0]; icons[1] = newTextures[1]; diff --git a/src/main/java/codechicken/core/featurehack/RenderEntityRenderHook.java b/src/main/java/codechicken/core/featurehack/RenderEntityRenderHook.java index d72a2cb..53ba9aa 100644 --- a/src/main/java/codechicken/core/featurehack/RenderEntityRenderHook.java +++ b/src/main/java/codechicken/core/featurehack/RenderEntityRenderHook.java @@ -1,26 +1,22 @@ package codechicken.core.featurehack; -import org.lwjgl.opengl.GL11; - +import net.minecraft.client.renderer.entity.Render; import net.minecraft.entity.Entity; import net.minecraft.util.ResourceLocation; -import net.minecraft.client.renderer.entity.Render; import net.minecraftforge.client.MinecraftForgeClient; +import org.lwjgl.opengl.GL11; -public class RenderEntityRenderHook extends Render -{ +public class RenderEntityRenderHook extends Render { @Override - public void doRender(Entity entity, double x, double y, double z, float f, float frame) - { - EntityRenderHook hook = (EntityRenderHook)entity; - GL11.glTranslated(x-hook.posX, y-hook.posY, z-hook.posZ); - ((EntityRenderHook)entity).callback.render(frame, MinecraftForgeClient.getRenderPass()); - GL11.glTranslated(hook.posX-x, hook.posY-y, hook.posZ-z); + public void doRender(Entity entity, double x, double y, double z, float f, float frame) { + EntityRenderHook hook = (EntityRenderHook) entity; + GL11.glTranslated(x - hook.posX, y - hook.posY, z - hook.posZ); + ((EntityRenderHook) entity).callback.render(frame, MinecraftForgeClient.getRenderPass()); + GL11.glTranslated(hook.posX - x, hook.posY - y, hook.posZ - z); } @Override - protected ResourceLocation getEntityTexture(Entity entity) - { + protected ResourceLocation getEntityTexture(Entity entity) { return null; } } diff --git a/src/main/java/codechicken/core/featurehack/RenderNull.java b/src/main/java/codechicken/core/featurehack/RenderNull.java index e6fc568..9d6d099 100644 --- a/src/main/java/codechicken/core/featurehack/RenderNull.java +++ b/src/main/java/codechicken/core/featurehack/RenderNull.java @@ -4,16 +4,12 @@ import net.minecraft.client.renderer.entity.Render; import net.minecraft.entity.Entity; import net.minecraft.util.ResourceLocation; -public class RenderNull extends Render -{ +public class RenderNull extends Render { @Override - public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) - { - } - + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) {} + @Override - protected ResourceLocation getEntityTexture(Entity entity) - { + protected ResourceLocation getEntityTexture(Entity entity) { return null; } } diff --git a/src/main/java/codechicken/core/featurehack/TweakTransformerHelper.java b/src/main/java/codechicken/core/featurehack/TweakTransformerHelper.java index 816320b..c03af77 100644 --- a/src/main/java/codechicken/core/featurehack/TweakTransformerHelper.java +++ b/src/main/java/codechicken/core/featurehack/TweakTransformerHelper.java @@ -1,38 +1,37 @@ package codechicken.core.featurehack; -import java.util.Random; +import static net.minecraftforge.common.util.ForgeDirection.UP; +import java.util.Random; import net.minecraft.block.Block; import net.minecraft.init.Blocks; import net.minecraft.world.World; -import static net.minecraftforge.common.util.ForgeDirection.UP; - -public class TweakTransformerHelper -{ - public static void quenchFireTick(World world, int x, int y, int z, Random rand) - { +public class TweakTransformerHelper { + public static void quenchFireTick(World world, int x, int y, int z, Random rand) { Block base = world.getBlock(x, y - 1, z); boolean supported = (base != null && base.isFireSource(world, x, y - 1, z, UP)); - - if (!Blocks.fire.canPlaceBlockAt(world, x, y, z) || - !supported && world.isRaining() && (world.canLightningStrikeAt(x, y, z) || world.canLightningStrikeAt(x - 1, y, z) || world.canLightningStrikeAt(x + 1, y, z) || world.canLightningStrikeAt(x, y, z - 1) || world.canLightningStrikeAt(x, y, z + 1))) - world.setBlockToAir(x, y, z); - else - { + + if (!Blocks.fire.canPlaceBlockAt(world, x, y, z) + || !supported + && world.isRaining() + && (world.canLightningStrikeAt(x, y, z) + || world.canLightningStrikeAt(x - 1, y, z) + || world.canLightningStrikeAt(x + 1, y, z) + || world.canLightningStrikeAt(x, y, z - 1) + || world.canLightningStrikeAt(x, y, z + 1))) world.setBlockToAir(x, y, z); + else { int meta = world.getBlockMetadata(x, y, z); - if(meta < 15) - world.setBlockMetadataWithNotify(x, y, z, meta+rand.nextInt(3)/2, 0); - + if (meta < 15) world.setBlockMetadataWithNotify(x, y, z, meta + rand.nextInt(3) / 2, 0); + world.scheduleBlockUpdate(x, y, z, Blocks.fire, Blocks.fire.tickRate(world) + rand.nextInt(10)); - - if(!supported && !Blocks.fire.canCatchFire(world, x, y - 1, z, UP) && meta == 15 && rand.nextInt(4) == 0) + + if (!supported && !Blocks.fire.canCatchFire(world, x, y - 1, z, UP) && meta == 15 && rand.nextInt(4) == 0) world.setBlockToAir(x, y, z); } } - - public static boolean canPlaceBlockAt(World world, int x, int y, int z) - { + + public static boolean canPlaceBlockAt(World world, int x, int y, int z) { Block block = world.getBlock(x, y, z); return block.isAir(world, x, y, z) || block.isReplaceable(world, x, y, z); } diff --git a/src/main/java/codechicken/core/featurehack/mc/TextureLavaFX.java b/src/main/java/codechicken/core/featurehack/mc/TextureLavaFX.java index dabbbe3..0ebfd58 100644 --- a/src/main/java/codechicken/core/featurehack/mc/TextureLavaFX.java +++ b/src/main/java/codechicken/core/featurehack/mc/TextureLavaFX.java @@ -7,22 +7,19 @@ import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.util.MathHelper; @SideOnly(Side.CLIENT) -public class TextureLavaFX extends TextureFX -{ +public class TextureLavaFX extends TextureFX { protected float[] field_76876_g = new float[256]; protected float[] field_76878_h = new float[256]; protected float[] field_76879_i = new float[256]; protected float[] field_76877_j = new float[256]; - public TextureLavaFX() - { + public TextureLavaFX() { super(16, "lava_still_fx"); setup(); } @Override - public void setup() - { + public void setup() { super.setup(); field_76876_g = new float[tileSizeSquare]; field_76878_h = new float[tileSizeSquare]; @@ -30,8 +27,7 @@ public class TextureLavaFX extends TextureFX field_76877_j = new float[tileSizeSquare]; } - public void onTick() - { + public void onTick() { int var2; float var3; int var5; @@ -40,36 +36,40 @@ public class TextureLavaFX extends TextureFX int var8; int var9; - for (int var1 = 0; var1 < tileSizeBase; ++var1) - { - for (var2 = 0; var2 < tileSizeBase; ++var2) - { + for (int var1 = 0; var1 < tileSizeBase; ++var1) { + for (var2 = 0; var2 < tileSizeBase; ++var2) { var3 = 0.0F; - int var4 = (int)(MathHelper.sin(var2 * (float)Math.PI * 2.0F / 16.0F) * 1.2F); - var5 = (int)(MathHelper.sin(var1 * (float)Math.PI * 2.0F / 16.0F) * 1.2F); + int var4 = (int) (MathHelper.sin(var2 * (float) Math.PI * 2.0F / 16.0F) * 1.2F); + var5 = (int) (MathHelper.sin(var1 * (float) Math.PI * 2.0F / 16.0F) * 1.2F); - for (var6 = var1 - 1; var6 <= var1 + 1; ++var6) - { - for (var7 = var2 - 1; var7 <= var2 + 1; ++var7) - { + for (var6 = var1 - 1; var6 <= var1 + 1; ++var6) { + for (var7 = var2 - 1; var7 <= var2 + 1; ++var7) { var8 = var6 + var4 & tileSizeMask; var9 = var7 + var5 & tileSizeMask; var3 += this.field_76876_g[var8 + var9 * tileSizeBase]; } } - this.field_76878_h[var1 + var2 * tileSizeBase] = var3 / 10.0F + (this.field_76879_i[(var1 + 0 & tileSizeMask) + (var2 + 0 & tileSizeMask) * tileSizeBase] + this.field_76879_i[(var1 + 1 & tileSizeMask) + (var2 + 0 & tileSizeMask) * tileSizeBase] + this.field_76879_i[(var1 + 1 & tileSizeMask) + (var2 + 1 & tileSizeMask) * tileSizeBase] + this.field_76879_i[(var1 + 0 & tileSizeMask) + (var2 + 1 & tileSizeMask) * tileSizeBase]) / 4.0F * 0.8F; - this.field_76879_i[var1 + var2 * tileSizeBase] += this.field_76877_j[var1 + var2 * tileSizeBase] * 0.01F; + this.field_76878_h[var1 + var2 * tileSizeBase] = var3 / 10.0F + + (this.field_76879_i[(var1 + 0 & tileSizeMask) + (var2 + 0 & tileSizeMask) * tileSizeBase] + + this.field_76879_i[ + (var1 + 1 & tileSizeMask) + (var2 + 0 & tileSizeMask) * tileSizeBase] + + this.field_76879_i[ + (var1 + 1 & tileSizeMask) + (var2 + 1 & tileSizeMask) * tileSizeBase] + + this.field_76879_i[ + (var1 + 0 & tileSizeMask) + (var2 + 1 & tileSizeMask) * tileSizeBase]) + / 4.0F + * 0.8F; + this.field_76879_i[var1 + var2 * tileSizeBase] += + this.field_76877_j[var1 + var2 * tileSizeBase] * 0.01F; - if (this.field_76879_i[var1 + var2 * tileSizeBase] < 0.0F) - { + if (this.field_76879_i[var1 + var2 * tileSizeBase] < 0.0F) { this.field_76879_i[var1 + var2 * tileSizeBase] = 0.0F; } this.field_76877_j[var1 + var2 * tileSizeBase] -= 0.06F; - if (Math.random() < 0.005D) - { + if (Math.random() < 0.005D) { this.field_76877_j[var1 + var2 * tileSizeBase] = 1.5F; } } @@ -79,26 +79,22 @@ public class TextureLavaFX extends TextureFX this.field_76878_h = this.field_76876_g; this.field_76876_g = var11; - for (var2 = 0; var2 < tileSizeSquare; ++var2) - { + for (var2 = 0; var2 < tileSizeSquare; ++var2) { var3 = this.field_76876_g[var2] * 2.0F; - if (var3 > 1.0F) - { + if (var3 > 1.0F) { var3 = 1.0F; } - if (var3 < 0.0F) - { + if (var3 < 0.0F) { var3 = 0.0F; } - var5 = (int)(var3 * 100.0F + 155.0F); - var6 = (int)(var3 * var3 * 255.0F); - var7 = (int)(var3 * var3 * var3 * var3 * 128.0F); + var5 = (int) (var3 * 100.0F + 155.0F); + var6 = (int) (var3 * var3 * 255.0F); + var7 = (int) (var3 * var3 * var3 * var3 * 128.0F); - if (this.anaglyphEnabled) - { + if (this.anaglyphEnabled) { var8 = (var5 * 30 + var6 * 59 + var7 * 11) / 100; var9 = (var5 * 30 + var6 * 70) / 100; int var10 = (var5 * 30 + var7 * 70) / 100; diff --git a/src/main/java/codechicken/core/featurehack/mc/TextureLavaFlowFX.java b/src/main/java/codechicken/core/featurehack/mc/TextureLavaFlowFX.java index b1912d7..849c102 100644 --- a/src/main/java/codechicken/core/featurehack/mc/TextureLavaFlowFX.java +++ b/src/main/java/codechicken/core/featurehack/mc/TextureLavaFlowFX.java @@ -7,28 +7,25 @@ import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.util.MathHelper; @SideOnly(Side.CLIENT) -public class TextureLavaFlowFX extends TextureFX -{ +public class TextureLavaFlowFX extends TextureFX { protected float[] field_76871_g = new float[256]; protected float[] field_76874_h = new float[256]; protected float[] field_76875_i = new float[256]; protected float[] field_76872_j = new float[256]; int field_76873_k = 0; - //shadow + // shadow public int tileSizeBase = 16; public int tileSizeSquare = 256; public int tileSizeMask = 15; public int tileSizeSquareMask = 255; - public TextureLavaFlowFX() - { + public TextureLavaFlowFX() { super(32, "lava_flow_fx"); } @Override - public void setup() - { + public void setup() { super.setup(); field_76871_g = new float[tileSizeSquare]; field_76874_h = new float[tileSizeSquare]; @@ -37,8 +34,7 @@ public class TextureLavaFlowFX extends TextureFX field_76873_k = 0; } - public void onTick() - { + public void onTick() { ++this.field_76873_k; int var2; float var3; @@ -48,36 +44,40 @@ public class TextureLavaFlowFX extends TextureFX int var8; int var9; - for (int var1 = 0; var1 < tileSizeBase; ++var1) - { - for (var2 = 0; var2 < tileSizeBase; ++var2) - { + for (int var1 = 0; var1 < tileSizeBase; ++var1) { + for (var2 = 0; var2 < tileSizeBase; ++var2) { var3 = 0.0F; - int var4 = (int)(MathHelper.sin(var2 * (float)Math.PI * 2.0F / 16.0F) * 1.2F); - var5 = (int)(MathHelper.sin(var1 * (float)Math.PI * 2.0F / 16.0F) * 1.2F); + int var4 = (int) (MathHelper.sin(var2 * (float) Math.PI * 2.0F / 16.0F) * 1.2F); + var5 = (int) (MathHelper.sin(var1 * (float) Math.PI * 2.0F / 16.0F) * 1.2F); - for (var6 = var1 - 1; var6 <= var1 + 1; ++var6) - { - for (var7 = var2 - 1; var7 <= var2 + 1; ++var7) - { + for (var6 = var1 - 1; var6 <= var1 + 1; ++var6) { + for (var7 = var2 - 1; var7 <= var2 + 1; ++var7) { var8 = var6 + var4 & tileSizeMask; var9 = var7 + var5 & tileSizeMask; var3 += this.field_76871_g[var8 + var9 * tileSizeBase]; } } - this.field_76874_h[var1 + var2 * tileSizeBase] = var3 / 10.0F + (this.field_76875_i[(var1 + 0 & tileSizeMask) + (var2 + 0 & tileSizeMask) * tileSizeBase] + this.field_76875_i[(var1 + 1 & tileSizeMask) + (var2 + 0 & tileSizeMask) * tileSizeBase] + this.field_76875_i[(var1 + 1 & tileSizeMask) + (var2 + 1 & tileSizeMask) * tileSizeBase] + this.field_76875_i[(var1 + 0 & tileSizeMask) + (var2 + 1 & tileSizeMask) * tileSizeBase]) / 4.0F * 0.8F; - this.field_76875_i[var1 + var2 * tileSizeBase] += this.field_76872_j[var1 + var2 * tileSizeBase] * 0.01F; + this.field_76874_h[var1 + var2 * tileSizeBase] = var3 / 10.0F + + (this.field_76875_i[(var1 + 0 & tileSizeMask) + (var2 + 0 & tileSizeMask) * tileSizeBase] + + this.field_76875_i[ + (var1 + 1 & tileSizeMask) + (var2 + 0 & tileSizeMask) * tileSizeBase] + + this.field_76875_i[ + (var1 + 1 & tileSizeMask) + (var2 + 1 & tileSizeMask) * tileSizeBase] + + this.field_76875_i[ + (var1 + 0 & tileSizeMask) + (var2 + 1 & tileSizeMask) * tileSizeBase]) + / 4.0F + * 0.8F; + this.field_76875_i[var1 + var2 * tileSizeBase] += + this.field_76872_j[var1 + var2 * tileSizeBase] * 0.01F; - if (this.field_76875_i[var1 + var2 * tileSizeBase] < 0.0F) - { + if (this.field_76875_i[var1 + var2 * tileSizeBase] < 0.0F) { this.field_76875_i[var1 + var2 * tileSizeBase] = 0.0F; } this.field_76872_j[var1 + var2 * tileSizeBase] -= 0.06F; - if (Math.random() < 0.005D) - { + if (Math.random() < 0.005D) { this.field_76872_j[var1 + var2 * tileSizeBase] = 1.5F; } } @@ -87,26 +87,22 @@ public class TextureLavaFlowFX extends TextureFX this.field_76874_h = this.field_76871_g; this.field_76871_g = var11; - for (var2 = 0; var2 < tileSizeSquare; ++var2) - { + for (var2 = 0; var2 < tileSizeSquare; ++var2) { var3 = this.field_76871_g[(var2 - this.field_76873_k / 3 * tileSizeBase) & tileSizeSquareMask] * 2.0F; - if (var3 > 1.0F) - { + if (var3 > 1.0F) { var3 = 1.0F; } - if (var3 < 0.0F) - { + if (var3 < 0.0F) { var3 = 0.0F; } - var5 = (int)(var3 * 100.0F + 155.0F); - var6 = (int)(var3 * var3 * 255.0F); - var7 = (int)(var3 * var3 * var3 * var3 * 128.0F); + var5 = (int) (var3 * 100.0F + 155.0F); + var6 = (int) (var3 * var3 * 255.0F); + var7 = (int) (var3 * var3 * var3 * var3 * 128.0F); - if (this.anaglyphEnabled) - { + if (this.anaglyphEnabled) { var8 = (var5 * 30 + var6 * 59 + var7 * 11) / 100; var9 = (var5 * 30 + var6 * 70) / 100; int var10 = (var5 * 30 + var7 * 70) / 100; @@ -115,17 +111,16 @@ public class TextureLavaFlowFX extends TextureFX var7 = var10; } - int px = var2&tileSizeMask; - int py = var2/tileSizeBase; + int px = var2 & tileSizeMask; + int py = var2 / tileSizeBase; writeColour(px, py, var5, var6, var7, -1); - writeColour(px+16, py, var5, var6, var7, -1); - writeColour(px, py+16, var5, var6, var7, -1); - writeColour(px+16, py+16, var5, var6, var7, -1); + writeColour(px + 16, py, var5, var6, var7, -1); + writeColour(px, py + 16, var5, var6, var7, -1); + writeColour(px + 16, py + 16, var5, var6, var7, -1); } } - private void writeColour(int px, int py, int var5, int var6, int var7, int var8) - { - imageData[py*32+px] = new ColourRGBA(var5, var6, var7, var8).argb(); + private void writeColour(int px, int py, int var5, int var6, int var7, int var8) { + imageData[py * 32 + px] = new ColourRGBA(var5, var6, var7, var8).argb(); } } diff --git a/src/main/java/codechicken/core/featurehack/mc/TextureWaterFX.java b/src/main/java/codechicken/core/featurehack/mc/TextureWaterFX.java index bb62c42..bb3c0ec 100644 --- a/src/main/java/codechicken/core/featurehack/mc/TextureWaterFX.java +++ b/src/main/java/codechicken/core/featurehack/mc/TextureWaterFX.java @@ -6,8 +6,7 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) -public class TextureWaterFX extends TextureFX -{ +public class TextureWaterFX extends TextureFX { /** red RGB value for water texture */ protected float[] red = new float[256]; @@ -19,15 +18,14 @@ public class TextureWaterFX extends TextureFX /** alpha RGB value for water texture */ protected float[] alpha = new float[256]; - public TextureWaterFX() - { + + public TextureWaterFX() { super(16, "water_still_fx"); setup(); } @Override - public void setup() - { + public void setup() { super.setup(); red = new float[tileSizeSquare]; green = new float[tileSizeSquare]; @@ -35,22 +33,18 @@ public class TextureWaterFX extends TextureFX alpha = new float[tileSizeSquare]; } - public void onTick() - { + public void onTick() { int var1; int var2; float var3; int var5; int var6; - for (var1 = 0; var1 < tileSizeBase; ++var1) - { - for (var2 = 0; var2 < tileSizeBase; ++var2) - { + for (var1 = 0; var1 < tileSizeBase; ++var1) { + for (var2 = 0; var2 < tileSizeBase; ++var2) { var3 = 0.0F; - for (int var4 = var1 - 1; var4 <= var1 + 1; ++var4) - { + for (int var4 = var1 - 1; var4 <= var1 + 1; ++var4) { var5 = var4 & tileSizeMask; var6 = var2 & tileSizeMask; var3 += this.red[var5 + var6 * tileSizeBase]; @@ -60,21 +54,17 @@ public class TextureWaterFX extends TextureFX } } - for (var1 = 0; var1 < tileSizeBase; ++var1) - { - for (var2 = 0; var2 < tileSizeBase; ++var2) - { + for (var1 = 0; var1 < tileSizeBase; ++var1) { + for (var2 = 0; var2 < tileSizeBase; ++var2) { this.blue[var1 + var2 * tileSizeBase] += this.alpha[var1 + var2 * tileSizeBase] * 0.05F; - if (this.blue[var1 + var2 * tileSizeBase] < 0.0F) - { + if (this.blue[var1 + var2 * tileSizeBase] < 0.0F) { this.blue[var1 + var2 * tileSizeBase] = 0.0F; } this.alpha[var1 + var2 * tileSizeBase] -= 0.1F; - if (Math.random() < 0.05D) - { + if (Math.random() < 0.05D) { this.alpha[var1 + var2 * tileSizeBase] = 0.5F; } } @@ -84,28 +74,24 @@ public class TextureWaterFX extends TextureFX this.green = this.red; this.red = var12; - for (var2 = 0; var2 < tileSizeSquare; ++var2) - { + for (var2 = 0; var2 < tileSizeSquare; ++var2) { var3 = this.red[var2]; - if (var3 > 1.0F) - { + if (var3 > 1.0F) { var3 = 1.0F; } - if (var3 < 0.0F) - { + if (var3 < 0.0F) { var3 = 0.0F; } float var13 = var3 * var3; - var5 = (int)(32.0F + var13 * 32.0F); - var6 = (int)(50.0F + var13 * 64.0F); + var5 = (int) (32.0F + var13 * 32.0F); + var6 = (int) (50.0F + var13 * 64.0F); int var7 = 255; - int var8 = (int)(146.0F + var13 * 50.0F); + int var8 = (int) (146.0F + var13 * 50.0F); - if (this.anaglyphEnabled) - { + if (this.anaglyphEnabled) { int var9 = (var5 * 30 + var6 * 59 + var7 * 11) / 100; int var10 = (var5 * 30 + var6 * 70) / 100; int var11 = (var5 * 30 + var7 * 70) / 100; diff --git a/src/main/java/codechicken/core/featurehack/mc/TextureWaterFlowFX.java b/src/main/java/codechicken/core/featurehack/mc/TextureWaterFlowFX.java index d6b92cd..7632a16 100644 --- a/src/main/java/codechicken/core/featurehack/mc/TextureWaterFlowFX.java +++ b/src/main/java/codechicken/core/featurehack/mc/TextureWaterFlowFX.java @@ -6,28 +6,25 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) -public class TextureWaterFlowFX extends TextureFX -{ +public class TextureWaterFlowFX extends TextureFX { protected float[] field_76880_g = new float[256]; protected float[] field_76883_h = new float[256]; protected float[] field_76884_i = new float[256]; protected float[] field_76881_j = new float[256]; private int tickCounter = 0; - - //shadow + + // shadow public int tileSizeBase = 16; public int tileSizeSquare = 256; public int tileSizeMask = 15; public int tileSizeSquareMask = 255; - public TextureWaterFlowFX() - { + public TextureWaterFlowFX() { super(32, "water_flow_fx"); } @Override - public void setup() - { + public void setup() { super.setup(); field_76880_g = new float[tileSizeSquare]; field_76883_h = new float[tileSizeSquare]; @@ -36,8 +33,7 @@ public class TextureWaterFlowFX extends TextureFX tickCounter = 0; } - public void onTick() - { + public void onTick() { ++this.tickCounter; int var1; int var2; @@ -45,38 +41,33 @@ public class TextureWaterFlowFX extends TextureFX int var5; int var6; - for (var1 = 0; var1 < tileSizeBase; ++var1) - { - for (var2 = 0; var2 < tileSizeBase; ++var2) - { + for (var1 = 0; var1 < tileSizeBase; ++var1) { + for (var2 = 0; var2 < tileSizeBase; ++var2) { var3 = 0.0F; - for (int var4 = var2 - 2; var4 <= var2; ++var4) - { + for (int var4 = var2 - 2; var4 <= var2; ++var4) { var5 = var1 & tileSizeMask; var6 = var4 & tileSizeMask; var3 += this.field_76880_g[var5 + var6 * tileSizeBase]; } - this.field_76883_h[var1 + var2 * tileSizeBase] = var3 / 3.2F + this.field_76884_i[var1 + var2 * tileSizeBase] * 0.8F; + this.field_76883_h[var1 + var2 * tileSizeBase] = + var3 / 3.2F + this.field_76884_i[var1 + var2 * tileSizeBase] * 0.8F; } } - for (var1 = 0; var1 < tileSizeBase; ++var1) - { - for (var2 = 0; var2 < tileSizeBase; ++var2) - { - this.field_76884_i[var1 + var2 * tileSizeBase] += this.field_76881_j[var1 + var2 * tileSizeBase] * 0.05F; + for (var1 = 0; var1 < tileSizeBase; ++var1) { + for (var2 = 0; var2 < tileSizeBase; ++var2) { + this.field_76884_i[var1 + var2 * tileSizeBase] += + this.field_76881_j[var1 + var2 * tileSizeBase] * 0.05F; - if (this.field_76884_i[var1 + var2 * tileSizeBase] < 0.0F) - { + if (this.field_76884_i[var1 + var2 * tileSizeBase] < 0.0F) { this.field_76884_i[var1 + var2 * tileSizeBase] = 0.0F; } this.field_76881_j[var1 + var2 * tileSizeBase] -= 0.3F; - if (Math.random() < 0.2D) - { + if (Math.random() < 0.2D) { this.field_76881_j[var1 + var2 * tileSizeBase] = 0.5F; } } @@ -86,28 +77,24 @@ public class TextureWaterFlowFX extends TextureFX this.field_76883_h = this.field_76880_g; this.field_76880_g = var12; - for (var2 = 0; var2 < tileSizeSquare; ++var2) - { + for (var2 = 0; var2 < tileSizeSquare; ++var2) { var3 = this.field_76880_g[var2 - this.tickCounter * tileSizeBase & tileSizeSquareMask]; - if (var3 > 1.0F) - { + if (var3 > 1.0F) { var3 = 1.0F; } - if (var3 < 0.0F) - { + if (var3 < 0.0F) { var3 = 0.0F; } float var13 = var3 * var3; - var5 = (int)(32.0F + var13 * 32.0F); - var6 = (int)(50.0F + var13 * 64.0F); + var5 = (int) (32.0F + var13 * 32.0F); + var6 = (int) (50.0F + var13 * 64.0F); int var7 = 255; - int var8 = (int)(146.0F + var13 * 50.0F); + int var8 = (int) (146.0F + var13 * 50.0F); - if (this.anaglyphEnabled) - { + if (this.anaglyphEnabled) { int var9 = (var5 * 30 + var6 * 59 + var7 * 11) / 100; int var10 = (var5 * 30 + var6 * 70) / 100; int var11 = (var5 * 30 + var7 * 70) / 100; @@ -116,18 +103,16 @@ public class TextureWaterFlowFX extends TextureFX var7 = var11; } - - int px = var2&tileSizeMask; - int py = var2/tileSizeBase; + int px = var2 & tileSizeMask; + int py = var2 / tileSizeBase; writeColour(px, py, var5, var6, var7, var8); - writeColour(px+16, py, var5, var6, var7, var8); - writeColour(px, py+16, var5, var6, var7, var8); - writeColour(px+16, py+16, var5, var6, var7, var8); + writeColour(px + 16, py, var5, var6, var7, var8); + writeColour(px, py + 16, var5, var6, var7, var8); + writeColour(px + 16, py + 16, var5, var6, var7, var8); } } - private void writeColour(int px, int py, int var5, int var6, int var7, int var8) - { - imageData[py*32+px] = new ColourRGBA(var5, var6, var7, var8).argb(); + private void writeColour(int px, int py, int var5, int var6, int var7, int var8) { + imageData[py * 32 + px] = new ColourRGBA(var5, var6, var7, var8).argb(); } } diff --git a/src/main/java/codechicken/core/fluid/ExtendedFluidTank.java b/src/main/java/codechicken/core/fluid/ExtendedFluidTank.java index fc067f7..06cc648 100644 --- a/src/main/java/codechicken/core/fluid/ExtendedFluidTank.java +++ b/src/main/java/codechicken/core/fluid/ExtendedFluidTank.java @@ -5,15 +5,13 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.IFluidTank; -public class ExtendedFluidTank implements IFluidTank -{ +public class ExtendedFluidTank implements IFluidTank { private FluidStack fluid; private boolean changeType; private int capacity; - - public ExtendedFluidTank(FluidStack type, int capacity) - { - if(type == null) { + + public ExtendedFluidTank(FluidStack type, int capacity) { + if (type == null) { type = FluidUtils.water; changeType = true; } @@ -21,97 +19,76 @@ public class ExtendedFluidTank implements IFluidTank fluid = FluidUtils.copy(type, 0); this.capacity = capacity; } - - public ExtendedFluidTank(int capacity) - { + + public ExtendedFluidTank(int capacity) { this(null, capacity); } - + @Override - public FluidStack getFluid() - { + public FluidStack getFluid() { return fluid.copy(); } @Override - public int getCapacity() - { + public int getCapacity() { return capacity; } - public boolean canAccept(FluidStack type) - { + public boolean canAccept(FluidStack type) { return type == null || (fluid.amount == 0 && changeType) || fluid.isFluidEqual(type); } @Override - public int fill(FluidStack resource, boolean doFill) - { - if(resource == null) - return 0; + public int fill(FluidStack resource, boolean doFill) { + if (resource == null) return 0; - if(!canAccept(resource)) - return 0; - - int tofill = Math.min(getCapacity()-fluid.amount, resource.amount); - if(doFill && tofill > 0) - { - if(!fluid.isFluidEqual(resource)) - fluid = FluidUtils.copy(resource, fluid.amount+tofill); - else - fluid.amount+=tofill; + if (!canAccept(resource)) return 0; + + int tofill = Math.min(getCapacity() - fluid.amount, resource.amount); + if (doFill && tofill > 0) { + if (!fluid.isFluidEqual(resource)) fluid = FluidUtils.copy(resource, fluid.amount + tofill); + else fluid.amount += tofill; onLiquidChanged(); } - + return tofill; } @Override - public FluidStack drain(int maxDrain, boolean doDrain) - { - if(fluid.amount == 0 || maxDrain <= 0) - return null; - + public FluidStack drain(int maxDrain, boolean doDrain) { + if (fluid.amount == 0 || maxDrain <= 0) return null; + int todrain = Math.min(maxDrain, fluid.amount); - if(doDrain && todrain > 0) - { - fluid.amount-=todrain; + if (doDrain && todrain > 0) { + fluid.amount -= todrain; onLiquidChanged(); } return FluidUtils.copy(fluid, todrain); } - - public FluidStack drain(FluidStack resource, boolean doDrain) - { - if (resource == null || !resource.isFluidEqual(fluid)) - return null; - + + public FluidStack drain(FluidStack resource, boolean doDrain) { + if (resource == null || !resource.isFluidEqual(fluid)) return null; + return drain(resource.amount, doDrain); } - public void onLiquidChanged() - { - } + public void onLiquidChanged() {} - public void fromTag(NBTTagCompound tag) - { + public void fromTag(NBTTagCompound tag) { fluid = FluidUtils.read(tag); } - - public NBTTagCompound toTag() - { + + public NBTTagCompound toTag() { return FluidUtils.write(fluid, new NBTTagCompound()); } @Override - public int getFluidAmount() - { + public int getFluidAmount() { return fluid.amount; } @Override - public FluidTankInfo getInfo() - { + public FluidTankInfo getInfo() { return new FluidTankInfo(this); } } diff --git a/src/main/java/codechicken/core/fluid/FluidUtils.java b/src/main/java/codechicken/core/fluid/FluidUtils.java index 1466cc1..689b1c3 100644 --- a/src/main/java/codechicken/core/fluid/FluidUtils.java +++ b/src/main/java/codechicken/core/fluid/FluidUtils.java @@ -11,87 +11,73 @@ import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidHandler; -public class FluidUtils -{ +public class FluidUtils { public static int B = FluidContainerRegistry.BUCKET_VOLUME; public static FluidStack water = new FluidStack(FluidRegistry.WATER, 1000); public static FluidStack lava = new FluidStack(FluidRegistry.LAVA, 1000); - public static boolean fillTankWithContainer(IFluidHandler tank, EntityPlayer player) - { + public static boolean fillTankWithContainer(IFluidHandler tank, EntityPlayer player) { ItemStack stack = player.getCurrentEquippedItem(); FluidStack liquid = FluidContainerRegistry.getFluidForFilledItem(stack); - if(liquid == null) + if (liquid == null) return false; + + if (tank.fill(ForgeDirection.UNKNOWN, liquid, false) != liquid.amount && !player.capabilities.isCreativeMode) return false; - if(tank.fill(ForgeDirection.UNKNOWN, liquid, false) != liquid.amount && !player.capabilities.isCreativeMode) - return false; - tank.fill(ForgeDirection.UNKNOWN, liquid, true); - - if(!player.capabilities.isCreativeMode) + + if (!player.capabilities.isCreativeMode) InventoryUtils.consumeItem(player.inventory, player.inventory.currentItem); player.inventoryContainer.detectAndSendChanges(); return true; } - public static boolean emptyTankIntoContainer(IFluidHandler tank, EntityPlayer player, FluidStack tankLiquid) - { + public static boolean emptyTankIntoContainer(IFluidHandler tank, EntityPlayer player, FluidStack tankLiquid) { ItemStack stack = player.getCurrentEquippedItem(); - if(!FluidContainerRegistry.isEmptyContainer(stack)) - return false; - + if (!FluidContainerRegistry.isEmptyContainer(stack)) return false; + ItemStack filled = FluidContainerRegistry.fillFluidContainer(tankLiquid, stack); FluidStack liquid = FluidContainerRegistry.getFluidForFilledItem(filled); - if(liquid == null || filled == null) - return false; - + if (liquid == null || filled == null) return false; + tank.drain(ForgeDirection.UNKNOWN, liquid.amount, true); - if(!player.capabilities.isCreativeMode) - { - if(stack.stackSize == 1) - player.inventory.setInventorySlotContents(player.inventory.currentItem, filled); - else if(player.inventory.addItemStackToInventory(filled)) - stack.stackSize--; - else - return false; + if (!player.capabilities.isCreativeMode) { + if (stack.stackSize == 1) player.inventory.setInventorySlotContents(player.inventory.currentItem, filled); + else if (player.inventory.addItemStackToInventory(filled)) stack.stackSize--; + else return false; } - - player.inventoryContainer.detectAndSendChanges(); + + player.inventoryContainer.detectAndSendChanges(); return true; } - public static FluidStack copy(FluidStack liquid, int quantity) - { + public static FluidStack copy(FluidStack liquid, int quantity) { liquid = liquid.copy(); liquid.amount = quantity; return liquid; } - public static FluidStack read(NBTTagCompound tag) - { + public static FluidStack read(NBTTagCompound tag) { FluidStack stack = FluidStack.loadFluidStackFromNBT(tag); return stack != null ? stack : FluidUtils.emptyFluid(); } - - public static NBTTagCompound write(FluidStack fluid, NBTTagCompound tag) - { - return fluid == null || fluid.getFluid() == null ? new NBTTagCompound() : fluid.writeToNBT(new NBTTagCompound()); + + public static NBTTagCompound write(FluidStack fluid, NBTTagCompound tag) { + return fluid == null || fluid.getFluid() == null + ? new NBTTagCompound() + : fluid.writeToNBT(new NBTTagCompound()); } - public static int getLuminosity(FluidStack stack, double density) - { + public static int getLuminosity(FluidStack stack, double density) { Fluid fluid = stack.getFluid(); - if(fluid == null) - return 0; + if (fluid == null) return 0; int light = fluid.getLuminosity(stack); - if(fluid.isGaseous()) - light=(int)(light*density); + if (fluid.isGaseous()) light = (int) (light * density); return light; } diff --git a/src/main/java/codechicken/core/fluid/TankAccess.java b/src/main/java/codechicken/core/fluid/TankAccess.java index 8cbdcf1..e3f6575 100644 --- a/src/main/java/codechicken/core/fluid/TankAccess.java +++ b/src/main/java/codechicken/core/fluid/TankAccess.java @@ -4,29 +4,24 @@ import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidHandler; -public class TankAccess -{ +public class TankAccess { public IFluidHandler tank; public ForgeDirection side; - - public TankAccess(IFluidHandler tank, ForgeDirection side) - { + + public TankAccess(IFluidHandler tank, ForgeDirection side) { this.tank = tank; this.side = side; } - - public TankAccess(IFluidHandler tank, int side) - { + + public TankAccess(IFluidHandler tank, int side) { this(tank, ForgeDirection.getOrientation(side)); } - public int fill(FluidStack resource, boolean doFill) - { + public int fill(FluidStack resource, boolean doFill) { return tank.fill(side, resource, doFill); } - - public FluidStack drain(int maxDrain, boolean doDrain) - { + + public FluidStack drain(int maxDrain, boolean doDrain) { return tank.drain(side, maxDrain, doDrain); } } diff --git a/src/main/java/codechicken/core/gui/ClickCounter.java b/src/main/java/codechicken/core/gui/ClickCounter.java index 1e2181b..7faeea6 100644 --- a/src/main/java/codechicken/core/gui/ClickCounter.java +++ b/src/main/java/codechicken/core/gui/ClickCounter.java @@ -1,20 +1,17 @@ package codechicken.core.gui; import com.google.common.base.Objects; - import java.util.Map; import java.util.TreeMap; -public class ClickCounter -{ - public class ClickCount - { +public class ClickCounter { + public class ClickCount { public T clicked; public long time; public int count; public boolean update(T clicked) { - if(!Objects.equal(this.clicked, clicked)) { + if (!Objects.equal(this.clicked, clicked)) { this.clicked = clicked; count = 0; time = Long.MIN_VALUE; @@ -28,8 +25,7 @@ public class ClickCounter public ClickCount getCount(int button) { ClickCount c = buttons.get(button); - if(c == null) - buttons.put(button, c = new ClickCount()); + if (c == null) buttons.put(button, c = new ClickCount()); return c; } @@ -40,14 +36,11 @@ public class ClickCounter public int mouseUp(T clicked, int button) { ClickCount c = getCount(button); - if(!c.update(clicked)) - return 0; + if (!c.update(clicked)) return 0; long time = System.currentTimeMillis(); - if(time-c.time < 500) - c.count++; - else - c.count = 1; + if (time - c.time < 500) c.count++; + else c.count = 1; c.time = time; return c.count; } diff --git a/src/main/java/codechicken/core/gui/GuiCCButton.java b/src/main/java/codechicken/core/gui/GuiCCButton.java index c1571ef..4a1ea29 100644 --- a/src/main/java/codechicken/core/gui/GuiCCButton.java +++ b/src/main/java/codechicken/core/gui/GuiCCButton.java @@ -1,13 +1,11 @@ package codechicken.core.gui; import net.minecraft.client.Minecraft; - import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; -public class GuiCCButton extends GuiWidget -{ +public class GuiCCButton extends GuiWidget { public String text; public String actionCommand; private boolean isEnabled = true; @@ -34,28 +32,35 @@ public class GuiCCButton extends GuiWidget public void mouseClicked(int x, int y, int button) { if (isEnabled && pointInside(x, y) && actionCommand != null) { sendAction(actionCommand, button); - Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); + Minecraft.getMinecraft() + .getSoundHandler() + .playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); } } @Override public void draw(int mousex, int mousey, float frame) { - if (!visible) - return; + if (!visible) return; drawButtonTex(mousex, mousey); - if(text != null) - drawText(mousex, mousey); + if (text != null) drawText(mousex, mousey); } public void drawButtonTex(int mousex, int mousey) { GL11.glColor4f(1, 1, 1, 1); renderEngine.bindTexture(guiTex); int state = getButtonTex(mousex, mousey); - drawTexturedModalRect(x, y, 0, 46 + state * 20, width / 2, height / 2);//top left - drawTexturedModalRect(x + width / 2, y, 200 - width / 2, 46 + state * 20, width / 2, height / 2);//top right - drawTexturedModalRect(x, y + height / 2, 0, 46 + state * 20 + 20 - height / 2, width / 2, height / 2);//bottom left - drawTexturedModalRect(x + width / 2, y + height / 2, 200 - width / 2, 46 + state * 20 + 20 - height / 2, width / 2, height / 2);//bottom right + drawTexturedModalRect(x, y, 0, 46 + state * 20, width / 2, height / 2); // top left + drawTexturedModalRect(x + width / 2, y, 200 - width / 2, 46 + state * 20, width / 2, height / 2); // top right + drawTexturedModalRect( + x, y + height / 2, 0, 46 + state * 20 + 20 - height / 2, width / 2, height / 2); // bottom left + drawTexturedModalRect( + x + width / 2, + y + height / 2, + 200 - width / 2, + 46 + state * 20 + 20 - height / 2, + width / 2, + height / 2); // bottom right } public int getButtonTex(int mousex, int mousey) { diff --git a/src/main/java/codechicken/core/gui/GuiCCTextField.java b/src/main/java/codechicken/core/gui/GuiCCTextField.java index 84463b4..944853b 100644 --- a/src/main/java/codechicken/core/gui/GuiCCTextField.java +++ b/src/main/java/codechicken/core/gui/GuiCCTextField.java @@ -2,187 +2,148 @@ package codechicken.core.gui; import net.minecraft.client.gui.GuiScreen; import net.minecraft.util.ChatAllowedCharacters; - import org.lwjgl.input.Keyboard; -public class GuiCCTextField extends GuiWidget -{ +public class GuiCCTextField extends GuiWidget { private String text; private boolean isFocused; private boolean isEnabled; - + public int maxStringLength; public int cursorCounter; public String actionCommand; - + private String allowedCharacters; - public GuiCCTextField(int x, int y, int width, int height, String text) - { + public GuiCCTextField(int x, int y, int width, int height, String text) { super(x, y, width, height); isFocused = false; isEnabled = true; this.text = text; } - public GuiCCTextField setActionCommand(String s) - { + public GuiCCTextField setActionCommand(String s) { actionCommand = s; return this; } - public void setText(String s) - { - if(s.equals(text)) - return; + public void setText(String s) { + if (s.equals(text)) return; String oldText = text; text = s; onTextChanged(oldText); } - public void onTextChanged(String oldText) - { - } + public void onTextChanged(String oldText) {} - public final String getText() - { + public final String getText() { return text; } - - public final boolean isEnabled() - { + + public final boolean isEnabled() { return isEnabled; } - public void setEnabled(boolean b) - { + public void setEnabled(boolean b) { isEnabled = b; - if(!isEnabled && isFocused) - setFocused(false); + if (!isEnabled && isFocused) setFocused(false); } - - public final boolean isFocused() - { + + public final boolean isFocused() { return isFocused; } @Override - public void update() - { + public void update() { cursorCounter++; } @Override - public void keyTyped(char c, int keycode) - { - if(!isEnabled || !isFocused) - return; + public void keyTyped(char c, int keycode) { + if (!isEnabled || !isFocused) return; /*if(c == '\t')//tab { parentGuiScreen.selectNextField(); }*/ - if(c == '\026')//paste + if (c == '\026') // paste { String s = GuiScreen.getClipboardString(); - if(s == null || s.equals("")) - return; + if (s == null || s.equals("")) return; - for(int i = 0; i < s.length(); i++) - { - if(text.length() == maxStringLength) - return; + for (int i = 0; i < s.length(); i++) { + if (text.length() == maxStringLength) return; char tc = s.charAt(i); - if(canAddChar(tc)) - setText(text + tc); + if (canAddChar(tc)) setText(text + tc); } } - if(keycode == Keyboard.KEY_RETURN) - { + if (keycode == Keyboard.KEY_RETURN) { setFocused(false); sendAction(actionCommand, getText()); } - if(keycode == Keyboard.KEY_BACK && text.length() > 0) - setText(text.substring(0, text.length() - 1)); + if (keycode == Keyboard.KEY_BACK && text.length() > 0) setText(text.substring(0, text.length() - 1)); - if((text.length() < maxStringLength || maxStringLength == 0) && canAddChar(c)) - setText(text + c); + if ((text.length() < maxStringLength || maxStringLength == 0) && canAddChar(c)) setText(text + c); } - public boolean canAddChar(char c) - { - return allowedCharacters == null ? ChatAllowedCharacters.isAllowedCharacter(c) : allowedCharacters.indexOf(c) >= 0; + public boolean canAddChar(char c) { + return allowedCharacters == null + ? ChatAllowedCharacters.isAllowedCharacter(c) + : allowedCharacters.indexOf(c) >= 0; } @Override - public void mouseClicked(int x, int y, int button) - { - if(isEnabled && pointInside(x, y)) - { + public void mouseClicked(int x, int y, int button) { + if (isEnabled && pointInside(x, y)) { setFocused(true); - if(button == 1) - setText(""); - } - else - setFocused(false); + if (button == 1) setText(""); + } else setFocused(false); } - public void setFocused(boolean focus) - { - if(focus == isFocused) - return; + public void setFocused(boolean focus) { + if (focus == isFocused) return; isFocused = focus; onFocusChanged(); } - public void onFocusChanged() - { - if(isFocused) - cursorCounter = 0; + public void onFocusChanged() { + if (isFocused) cursorCounter = 0; } - + @Override - public void draw(int i, int j, float f) - { + public void draw(int i, int j, float f) { drawBackground(); drawText(); } - public void drawBackground() - { + public void drawBackground() { drawRect(x - 1, y - 1, x + width + 1, y + height + 1, 0xffa0a0a0); drawRect(x, y, x + width, y + height, 0xff000000); } - - public String getDrawText() - { + + public String getDrawText() { String s = getText(); - if(isEnabled && isFocused && (cursorCounter / 6) % 2 == 0) - s+="_"; + if (isEnabled && isFocused && (cursorCounter / 6) % 2 == 0) s += "_"; return s; } - - public void drawText() - { - drawString(fontRenderer, getDrawText(), x + 4, y + height/2 - 4, getTextColour()); + + public void drawText() { + drawString(fontRenderer, getDrawText(), x + 4, y + height / 2 - 4, getTextColour()); } - public int getTextColour() - { + public int getTextColour() { return isEnabled ? 0xe0e0e0 : 0x707070; } - public GuiCCTextField setMaxStringLength(int i) - { + public GuiCCTextField setMaxStringLength(int i) { maxStringLength = i; return this; } - public GuiCCTextField setAllowedCharacters(String s) - { + public GuiCCTextField setAllowedCharacters(String s) { allowedCharacters = s; return this; } diff --git a/src/main/java/codechicken/core/gui/GuiScreenWidget.java b/src/main/java/codechicken/core/gui/GuiScreenWidget.java index 1138a9b..5136ffa 100644 --- a/src/main/java/codechicken/core/gui/GuiScreenWidget.java +++ b/src/main/java/codechicken/core/gui/GuiScreenWidget.java @@ -1,43 +1,35 @@ package codechicken.core.gui; +import codechicken.lib.gui.GuiDraw; import java.awt.Point; import java.util.ArrayList; - -import codechicken.lib.gui.GuiDraw; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; import org.lwjgl.input.Mouse; import org.lwjgl.opengl.GL11; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiScreen; - -public class GuiScreenWidget extends GuiScreen implements IGuiActionListener -{ +public class GuiScreenWidget extends GuiScreen implements IGuiActionListener { public ArrayList widgets = new ArrayList(); public int xSize, ySize, guiTop, guiLeft; - public GuiScreenWidget() - { + public GuiScreenWidget() { this(176, 166); } - public GuiScreenWidget(int xSize, int ySize) - { + public GuiScreenWidget(int xSize, int ySize) { super(); this.xSize = xSize; this.ySize = ySize; } @Override - public void initGui() - { + public void initGui() { guiTop = (height - ySize) / 2; guiLeft = (width - xSize) / 2; - if(!widgets.isEmpty()) - resize(); + if (!widgets.isEmpty()) resize(); } - public void reset() - { + public void reset() { widgets.clear(); initGui(); addWidgets(); @@ -45,106 +37,78 @@ public class GuiScreenWidget extends GuiScreen implements IGuiActionListener } @Override - public void setWorldAndResolution(Minecraft mc, int i, int j) - { + public void setWorldAndResolution(Minecraft mc, int i, int j) { boolean init = this.mc == null; super.setWorldAndResolution(mc, i, j); - if(init) { + if (init) { addWidgets(); resize(); } } - public void add(GuiWidget widget) - { + public void add(GuiWidget widget) { widgets.add(widget); widget.onAdded(this); } @Override - public void drawScreen(int mousex, int mousey, float f) - { + public void drawScreen(int mousex, int mousey, float f) { GL11.glTranslated(guiLeft, guiTop, 0); drawBackground(); - for(GuiWidget widget : widgets) - widget.draw(mousex-guiLeft, mousey-guiTop, f); + for (GuiWidget widget : widgets) widget.draw(mousex - guiLeft, mousey - guiTop, f); drawForeground(); GL11.glTranslated(-guiLeft, -guiTop, 0); } - public void drawBackground() - { - } + public void drawBackground() {} - public void drawForeground() - { - } + public void drawForeground() {} @Override - protected void mouseClicked(int x, int y, int button) - { + protected void mouseClicked(int x, int y, int button) { super.mouseClicked(x, y, button); - for(GuiWidget widget : widgets) - widget.mouseClicked(x-guiLeft, y-guiTop, button); + for (GuiWidget widget : widgets) widget.mouseClicked(x - guiLeft, y - guiTop, button); } @Override - protected void mouseMovedOrUp(int x, int y, int button) - { + protected void mouseMovedOrUp(int x, int y, int button) { super.mouseMovedOrUp(x, y, button); - for(GuiWidget widget : widgets) - widget.mouseMovedOrUp(x-guiLeft, y-guiTop, button); + for (GuiWidget widget : widgets) widget.mouseMovedOrUp(x - guiLeft, y - guiTop, button); } @Override - protected void mouseClickMove(int x, int y, int button, long time) - { + protected void mouseClickMove(int x, int y, int button, long time) { super.mouseClickMove(x, y, button, time); - for(GuiWidget widget : widgets) - widget.mouseDragged(x-guiLeft, y-guiTop, button, time); + for (GuiWidget widget : widgets) widget.mouseDragged(x - guiLeft, y - guiTop, button, time); } @Override - public void updateScreen() - { + public void updateScreen() { super.updateScreen(); - if(mc.currentScreen == this) - for(GuiWidget widget : widgets) - widget.update(); + if (mc.currentScreen == this) for (GuiWidget widget : widgets) widget.update(); } @Override - public void keyTyped(char c, int keycode) - { + public void keyTyped(char c, int keycode) { super.keyTyped(c, keycode); - for(GuiWidget widget : widgets) - widget.keyTyped(c, keycode); + for (GuiWidget widget : widgets) widget.keyTyped(c, keycode); } @Override - public void handleMouseInput() - { + public void handleMouseInput() { super.handleMouseInput(); int i = Mouse.getEventDWheel(); - if(i != 0) - { + if (i != 0) { Point p = GuiDraw.getMousePosition(); int scroll = i > 0 ? 1 : -1; - for(GuiWidget widget : widgets) - widget.mouseScrolled(p.x, p.y, scroll); + for (GuiWidget widget : widgets) widget.mouseScrolled(p.x, p.y, scroll); } } @Override - public void actionPerformed(String ident, Object... params) - { - } + public void actionPerformed(String ident, Object... params) {} - public void resize() - { - } + public void resize() {} - public void addWidgets() - { - } + public void addWidgets() {} } diff --git a/src/main/java/codechicken/core/gui/GuiScrollPane.java b/src/main/java/codechicken/core/gui/GuiScrollPane.java index e51050f..aa91bc9 100644 --- a/src/main/java/codechicken/core/gui/GuiScrollPane.java +++ b/src/main/java/codechicken/core/gui/GuiScrollPane.java @@ -2,11 +2,9 @@ package codechicken.core.gui; import codechicken.lib.math.MathHelper; import codechicken.lib.vec.Rectangle4i; - import java.awt.*; -public abstract class GuiScrollPane extends GuiWidget -{ +public abstract class GuiScrollPane extends GuiWidget { protected int scrollclicky = -1; protected float scrollpercent; protected int scrollmousey; @@ -29,7 +27,8 @@ public abstract class GuiScrollPane extends GuiWidget } public Rectangle windowBounds() { - return new Rectangle(x+marginleft, y+margintop, width-marginleft-marginright, height-margintop-marginbottom); + return new Rectangle( + x + marginleft, y + margintop, width - marginleft - marginright, height - margintop - marginbottom); } public abstract int contentHeight(); @@ -42,8 +41,10 @@ public abstract class GuiScrollPane extends GuiWidget public Rectangle scrollbarBounds() { Dimension dim = scrollbarDim(); return new Rectangle( - x + width - dim.width, y + (int) ((height - dim.height) * percentscrolled + 0.4999), - dim.width, dim.height); + x + width - dim.width, + y + (int) ((height - dim.height) * percentscrolled + 0.4999), + dim.width, + dim.height); } public void scrollUp() { @@ -55,7 +56,7 @@ public abstract class GuiScrollPane extends GuiWidget } public void scroll(int i) { - percentscrolled += i * height / (float)(2*contentHeight()); + percentscrolled += i * height / (float) (2 * contentHeight()); calculatePercentScrolled(); } @@ -102,15 +103,18 @@ public abstract class GuiScrollPane extends GuiWidget Rectangle w = windowBounds(); int barempty = height - sbar.height; - if (button == 0 && - sbar.height < height && //the scroll bar can move (not full length) - mx >= sbar.x && mx <= sbar.x + sbar.width && - my >= y && my <= y + height)//in the scroll pane + if (button == 0 + && sbar.height < height + && // the scroll bar can move (not full length) + mx >= sbar.x + && mx <= sbar.x + sbar.width + && my >= y + && my <= y + height) // in the scroll pane { if (my < sbar.y) { percentscrolled = (my - y) / (float) barempty; calculatePercentScrolled(); - } else if (my > sbar.y+sbar.height) { + } else if (my > sbar.y + sbar.height) { percentscrolled = (my - y - sbar.height + 1) / (float) barempty; calculatePercentScrolled(); } else { @@ -118,8 +122,7 @@ public abstract class GuiScrollPane extends GuiWidget scrollpercent = percentscrolled; scrollmousey = my; } - } else if (w.contains(mx, my)) - slotDown(mx - w.x, my - w.y + scrolledPixels(), button); + } else if (w.contains(mx, my)) slotDown(mx - w.x, my - w.y + scrolledPixels(), button); } /** @@ -137,10 +140,9 @@ public abstract class GuiScrollPane extends GuiWidget @Override public void mouseMovedOrUp(int mx, int my, int button) { Rectangle w = windowBounds(); - if (isScrolling() && button == 0)//we were scrolling and we released mouse - scrollclicky = -1; - else if (w.contains(mx, my)) - slotUp(mx - w.x, my - w.y + scrolledPixels(), button); + if (isScrolling() && button == 0) // we were scrolling and we released mouse + scrollclicky = -1; + else if (w.contains(mx, my)) slotUp(mx - w.x, my - w.y + scrolledPixels(), button); } @Override @@ -151,12 +153,9 @@ public abstract class GuiScrollPane extends GuiWidget int barupallowed = (int) ((height - sbarh) * scrollpercent + 0.5); int bardownallowed = (height - sbarh) - barupallowed; - if (-scrolldiff > barupallowed) - scrollmousey = scrollclicky - barupallowed; - else if (scrolldiff > bardownallowed) - scrollmousey = scrollclicky + bardownallowed; - else - scrollmousey = mousey; + if (-scrolldiff > barupallowed) scrollmousey = scrollclicky - barupallowed; + else if (scrolldiff > bardownallowed) scrollmousey = scrollclicky + bardownallowed; + else scrollmousey = mousey; calculatePercentScrolled(); } @@ -180,7 +179,7 @@ public abstract class GuiScrollPane extends GuiWidget public void draw(int mx, int my, float frame) { Rectangle w = windowBounds(); drawBackground(frame); - drawContent(mx-w.x, my+scrolledPixels()-w.y, frame); + drawContent(mx - w.x, my + scrolledPixels() - w.y, frame); drawOverlay(frame); drawScrollbar(frame); } @@ -192,24 +191,22 @@ public abstract class GuiScrollPane extends GuiWidget public abstract void drawContent(int mx, int my, float frame); public void drawOverlay(float frame) { - //outlines - drawRect(x, y - 1, x + width, y, 0xffa0a0a0);//top - drawRect(x, y + height, x + width, y + height + 1, 0xffa0a0a0);//bottom - drawRect(x - 1, y - 1, x, y + height + 1, 0xffa0a0a0);//left - drawRect(x + width, y - 1, x + width + 1, y + height + 1, 0xffa0a0a0);//right + // outlines + drawRect(x, y - 1, x + width, y, 0xffa0a0a0); // top + drawRect(x, y + height, x + width, y + height + 1, 0xffa0a0a0); // bottom + drawRect(x - 1, y - 1, x, y + height + 1, 0xffa0a0a0); // left + drawRect(x + width, y - 1, x + width + 1, y + height + 1, 0xffa0a0a0); // right } public void drawScrollbar(float frame) { Rectangle r = scrollbarBounds(); - drawRect(r.x, r.y, r.x + r.width, r.y + r.height, 0xFF8B8B8B);//corners - drawRect(r.x, r.y, r.x + r.width - 1, r.y + r.height - 1, 0xFFF0F0F0);//topleft up - drawRect(r.x + 1, r.y + 1, r.x + r.width, r.y + r.height, 0xFF555555);//bottom right down - drawRect(r.x + 1, r.y + 1, r.x + r.width - 1, r.y + r.height - 1, 0xFFC6C6C6);//scrollbar + drawRect(r.x, r.y, r.x + r.width, r.y + r.height, 0xFF8B8B8B); // corners + drawRect(r.x, r.y, r.x + r.width - 1, r.y + r.height - 1, 0xFFF0F0F0); // topleft up + drawRect(r.x + 1, r.y + 1, r.x + r.width, r.y + r.height, 0xFF555555); // bottom right down + drawRect(r.x + 1, r.y + 1, r.x + r.width - 1, r.y + r.height - 1, 0xFFC6C6C6); // scrollbar int algn = scrollbarGuideAlignment(); - if (algn != 0) - drawRect(algn > 0 ? r.x + r.width : r.x - 1, y, r.x, y + height, 0xFF808080);//lineguide + if (algn != 0) drawRect(algn > 0 ? r.x + r.width : r.x - 1, y, r.x, y + height, 0xFF808080); // lineguide } - } diff --git a/src/main/java/codechicken/core/gui/GuiScrollSlot.java b/src/main/java/codechicken/core/gui/GuiScrollSlot.java index e1da5dd..442a4b1 100644 --- a/src/main/java/codechicken/core/gui/GuiScrollSlot.java +++ b/src/main/java/codechicken/core/gui/GuiScrollSlot.java @@ -1,11 +1,9 @@ package codechicken.core.gui; +import java.awt.*; import org.lwjgl.input.Keyboard; -import java.awt.*; - -public abstract class GuiScrollSlot extends GuiScrollPane -{ +public abstract class GuiScrollSlot extends GuiScrollPane { protected String actionCommand; public boolean focused; protected ClickCounter click = new ClickCounter(); @@ -40,13 +38,11 @@ public abstract class GuiScrollSlot extends GuiScrollPane protected abstract void drawSlot(int slot, int x, int y, int mx, int my, float frame); - protected void unfocus() { - } + protected void unfocus() {} public void setFocused(boolean focus) { focused = focus; - if (!focused) - unfocus(); + if (!focused) unfocus(); } @Override @@ -56,37 +52,34 @@ public abstract class GuiScrollSlot extends GuiScrollPane public int getSlotY(int slot) { int h = 0; - for(int i = 0; i < slot; i++) - h+=getSlotHeight(i); + for (int i = 0; i < slot; i++) h += getSlotHeight(i); return h; } public int getSlot(int my) { - if (my < 0) - return -1; + if (my < 0) return -1; int y = 0; - for(int i = 0; i < getNumSlots(); i++) { + for (int i = 0; i < getNumSlots(); i++) { int h = getSlotHeight(i); - if(my >= y && my < y+h) - return i; - y+=h; + if (my >= y && my < y + h) return i; + y += h; } return -1; } public int getClickedSlot(int my) { - return getSlot(my-windowBounds().y+scrolledPixels()); + return getSlot(my - windowBounds().y + scrolledPixels()); } @Override public int scrolledPixels() { int scrolled = super.scrolledPixels(); - if(!smoothScroll) { + if (!smoothScroll) { int slot = getSlot(scrolled); int sloty = getSlotY(slot); int sloth = getSlotHeight(slot); - scrolled = sloty+(int)((scrolled-sloty)/(double)sloth+0.5)*sloth; + scrolled = sloty + (int) ((scrolled - sloty) / (double) sloth + 0.5) * sloth; } return scrolled; } @@ -106,8 +99,7 @@ public abstract class GuiScrollSlot extends GuiScrollPane @Override public Rectangle scrollbarBounds() { Rectangle r = super.scrollbarBounds(); - if(scrollbarAlignment() == -1) - r.x = x; + if (scrollbarAlignment() == -1) r.x = x; return r; } @@ -125,21 +117,16 @@ public abstract class GuiScrollSlot extends GuiScrollPane public void slotUp(int mx, int my, int button) { int slot = getSlot(my); int c = click.mouseUp(slot >= 0 ? slot : null, button); - if(c > 0 && slot >= 0) - slotClicked(slot, button, mx, my-getSlotY(slot), c); + if (c > 0 && slot >= 0) slotClicked(slot, button, mx, my - getSlotY(slot), c); } @Override public void keyTyped(char c, int keycode) { - if (!focused) - return; + if (!focused) return; - if (keycode == Keyboard.KEY_UP) - selectPrev(); - if (keycode == Keyboard.KEY_DOWN) - selectNext(); - if (keycode == Keyboard.KEY_RETURN && actionCommand != null) - sendAction(actionCommand); + if (keycode == Keyboard.KEY_UP) selectPrev(); + if (keycode == Keyboard.KEY_DOWN) selectNext(); + if (keycode == Keyboard.KEY_RETURN && actionCommand != null) sendAction(actionCommand); } @Override @@ -149,9 +136,9 @@ public abstract class GuiScrollSlot extends GuiScrollPane int y = 0; for (int slot = 0; slot < getNumSlots(); slot++) { int h = getSlotHeight(slot); - if (y+h > scrolled && y < scrolled+w.height) - drawSlot(slot, w.x, w.y+y-scrolledPixels(), mx, my-y, frame); - y+=h; + if (y + h > scrolled && y < scrolled + w.height) + drawSlot(slot, w.x, w.y + y - scrolledPixels(), mx, my - y, frame); + y += h; } } } diff --git a/src/main/java/codechicken/core/gui/GuiWidget.java b/src/main/java/codechicken/core/gui/GuiWidget.java index b73d1ee..a4a0cbe 100644 --- a/src/main/java/codechicken/core/gui/GuiWidget.java +++ b/src/main/java/codechicken/core/gui/GuiWidget.java @@ -7,78 +7,57 @@ import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.renderer.texture.TextureManager; import net.minecraft.util.ResourceLocation; -public class GuiWidget extends Gui -{ +public class GuiWidget extends Gui { protected static final ResourceLocation guiTex = new ResourceLocation("textures/gui/widgets.png"); - + public GuiScreen parentScreen; public TextureManager renderEngine; public FontRenderer fontRenderer; - + public int x; public int y; public int width; public int height; - - public GuiWidget(int x, int y, int width, int height) - { + + public GuiWidget(int x, int y, int width, int height) { setSize(x, y, width, height); } - - public void setSize(int x, int y, int width, int height) - { + + public void setSize(int x, int y, int width, int height) { this.x = x; this.y = y; this.width = width; this.height = height; } - public boolean pointInside(int px, int py) - { + public boolean pointInside(int px, int py) { return px >= x && px < x + width && py >= y && py < y + height; } - - public void sendAction(String actionCommand, Object... params) - { + + public void sendAction(String actionCommand, Object... params) { sendAction(parentScreen, actionCommand, params); } - public static void sendAction(GuiScreen screen, String actionCommand, Object... params) - { - if(actionCommand != null && screen instanceof IGuiActionListener) + public static void sendAction(GuiScreen screen, String actionCommand, Object... params) { + if (actionCommand != null && screen instanceof IGuiActionListener) ((IGuiActionListener) screen).actionPerformed(actionCommand, params); } - public void mouseClicked(int x, int y, int button) - { - } + public void mouseClicked(int x, int y, int button) {} - public void mouseMovedOrUp(int x, int y, int button) - { - } - - public void mouseDragged(int x, int y, int button, long time) - { - } - - public void update() - { - } + public void mouseMovedOrUp(int x, int y, int button) {} - public void draw(int mousex, int mousey, float frame) - { - } + public void mouseDragged(int x, int y, int button, long time) {} - public void keyTyped(char c, int keycode) - { - } + public void update() {} - public void mouseScrolled(int x, int y, int scroll) - { - } - - public void onAdded(GuiScreen s) - { + public void draw(int mousex, int mousey, float frame) {} + + public void keyTyped(char c, int keycode) {} + + public void mouseScrolled(int x, int y, int scroll) {} + + public void onAdded(GuiScreen s) { Minecraft mc = Minecraft.getMinecraft(); parentScreen = s; renderEngine = mc.renderEngine; diff --git a/src/main/java/codechicken/core/gui/IGuiActionListener.java b/src/main/java/codechicken/core/gui/IGuiActionListener.java index 8540251..c32c02a 100644 --- a/src/main/java/codechicken/core/gui/IGuiActionListener.java +++ b/src/main/java/codechicken/core/gui/IGuiActionListener.java @@ -1,6 +1,5 @@ package codechicken.core.gui; -public interface IGuiActionListener -{ +public interface IGuiActionListener { public void actionPerformed(String actionCommand, Object... params); -} \ No newline at end of file +} diff --git a/src/main/java/codechicken/core/internal/CCCEventHandler.java b/src/main/java/codechicken/core/internal/CCCEventHandler.java index 3775fe2..59d5263 100644 --- a/src/main/java/codechicken/core/internal/CCCEventHandler.java +++ b/src/main/java/codechicken/core/internal/CCCEventHandler.java @@ -1,7 +1,6 @@ package codechicken.core.internal; import codechicken.core.CCUpdateChecker; - import codechicken.core.GuiModListScroll; import cpw.mods.fml.client.GuiModList; import cpw.mods.fml.common.eventhandler.SubscribeEvent; @@ -11,14 +10,13 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraftforge.client.event.GuiScreenEvent; -public class CCCEventHandler -{ +public class CCCEventHandler { public static int renderTime; public static float renderFrame; @SubscribeEvent public void clientTick(TickEvent.ClientTickEvent event) { - if(event.phase == Phase.END) { + if (event.phase == Phase.END) { CCUpdateChecker.tick(); renderTime++; } @@ -26,14 +24,12 @@ public class CCCEventHandler @SubscribeEvent public void renderTick(TickEvent.RenderTickEvent event) { - if(event.phase == Phase.START) - renderFrame = event.renderTickTime; + if (event.phase == Phase.START) renderFrame = event.renderTickTime; } @SubscribeEvent @SideOnly(Side.CLIENT) public void posGuiRender(GuiScreenEvent.DrawScreenEvent.Post event) { - if(event.gui instanceof GuiModList) - GuiModListScroll.draw((GuiModList)event.gui, event.mouseX, event.mouseY); + if (event.gui instanceof GuiModList) GuiModListScroll.draw((GuiModList) event.gui, event.mouseX, event.mouseY); } } diff --git a/src/main/java/codechicken/core/inventory/GuiContainerWidget.java b/src/main/java/codechicken/core/inventory/GuiContainerWidget.java index 919ca8a..c14d900 100644 --- a/src/main/java/codechicken/core/inventory/GuiContainerWidget.java +++ b/src/main/java/codechicken/core/inventory/GuiContainerWidget.java @@ -1,127 +1,96 @@ package codechicken.core.inventory; -import java.awt.Point; -import java.util.ArrayList; - -import org.lwjgl.input.Mouse; -import org.lwjgl.opengl.GL11; - -import codechicken.lib.gui.GuiDraw; import codechicken.core.gui.GuiWidget; import codechicken.core.gui.IGuiActionListener; - +import codechicken.lib.gui.GuiDraw; +import java.awt.Point; +import java.util.ArrayList; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.inventory.Container; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.GL11; -public class GuiContainerWidget extends GuiContainer implements IGuiActionListener -{ +public class GuiContainerWidget extends GuiContainer implements IGuiActionListener { public ArrayList widgets = new ArrayList(); - - public GuiContainerWidget(Container inventorySlots) - { + + public GuiContainerWidget(Container inventorySlots) { this(inventorySlots, 176, 166); } - - public GuiContainerWidget(Container inventorySlots, int xSize, int ySize) - { + + public GuiContainerWidget(Container inventorySlots, int xSize, int ySize) { super(inventorySlots); this.xSize = xSize; this.ySize = ySize; } - + @Override - public void setWorldAndResolution(Minecraft mc, int i, int j) - { + public void setWorldAndResolution(Minecraft mc, int i, int j) { super.setWorldAndResolution(mc, i, j); - if(widgets.isEmpty()) - addWidgets(); + if (widgets.isEmpty()) addWidgets(); } - - public void add(GuiWidget widget) - { + + public void add(GuiWidget widget) { widgets.add(widget); widget.onAdded(this); } @Override - protected void drawGuiContainerBackgroundLayer(float f, int mousex, int mousey) - { + protected void drawGuiContainerBackgroundLayer(float f, int mousex, int mousey) { GL11.glTranslated(guiLeft, guiTop, 0); drawBackground(); - for(GuiWidget widget : widgets) - widget.draw(mousex-guiLeft, mousey-guiTop, f); - + for (GuiWidget widget : widgets) widget.draw(mousex - guiLeft, mousey - guiTop, f); + GL11.glTranslated(-guiLeft, -guiTop, 0); } - - public void drawBackground() - { - } + + public void drawBackground() {} @Override - protected void mouseClicked(int x, int y, int button) - { + protected void mouseClicked(int x, int y, int button) { super.mouseClicked(x, y, button); - for(GuiWidget widget : widgets) - widget.mouseClicked(x-guiLeft, y-guiTop, button); - } - - @Override - protected void mouseMovedOrUp(int x, int y, int button) - { - super.mouseMovedOrUp(x, y, button); - for(GuiWidget widget : widgets) - widget.mouseMovedOrUp(x-guiLeft, y-guiTop, button); - } - - @Override - protected void mouseClickMove(int x, int y, int button, long time) - { - super.mouseClickMove(x, y, button, time); - for(GuiWidget widget : widgets) - widget.mouseDragged(x-guiLeft, y-guiTop, button, time); - } - - @Override - public void updateScreen() - { - super.updateScreen(); - if(mc.currentScreen == this) - for(GuiWidget widget : widgets) - widget.update(); - } - - @Override - public void keyTyped(char c, int keycode) - { - super.keyTyped(c, keycode); - for(GuiWidget widget : widgets) - widget.keyTyped(c, keycode); + for (GuiWidget widget : widgets) widget.mouseClicked(x - guiLeft, y - guiTop, button); } @Override - public void handleMouseInput() - { + protected void mouseMovedOrUp(int x, int y, int button) { + super.mouseMovedOrUp(x, y, button); + for (GuiWidget widget : widgets) widget.mouseMovedOrUp(x - guiLeft, y - guiTop, button); + } + + @Override + protected void mouseClickMove(int x, int y, int button, long time) { + super.mouseClickMove(x, y, button, time); + for (GuiWidget widget : widgets) widget.mouseDragged(x - guiLeft, y - guiTop, button, time); + } + + @Override + public void updateScreen() { + super.updateScreen(); + if (mc.currentScreen == this) for (GuiWidget widget : widgets) widget.update(); + } + + @Override + public void keyTyped(char c, int keycode) { + super.keyTyped(c, keycode); + for (GuiWidget widget : widgets) widget.keyTyped(c, keycode); + } + + @Override + public void handleMouseInput() { super.handleMouseInput(); int i = Mouse.getEventDWheel(); - if(i != 0) - { + if (i != 0) { Point p = GuiDraw.getMousePosition(); int scroll = i > 0 ? 1 : -1; - for(GuiWidget widget : widgets) - widget.mouseScrolled(p.x, p.y, scroll); + for (GuiWidget widget : widgets) widget.mouseScrolled(p.x, p.y, scroll); } } @Override - public void actionPerformed(String ident, Object... params) - { - } + public void actionPerformed(String ident, Object... params) {} - public void addWidgets() - { - } + public void addWidgets() {} @Override public void onGuiClosed() { diff --git a/src/main/java/codechicken/core/launch/CodeChickenCorePlugin.java b/src/main/java/codechicken/core/launch/CodeChickenCorePlugin.java index 7f01222..a1e3b69 100644 --- a/src/main/java/codechicken/core/launch/CodeChickenCorePlugin.java +++ b/src/main/java/codechicken/core/launch/CodeChickenCorePlugin.java @@ -1,5 +1,16 @@ package codechicken.core.launch; +import codechicken.core.asm.*; +import codechicken.lib.config.ConfigTag; +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.versioning.DefaultArtifactVersion; +import cpw.mods.fml.common.versioning.VersionParser; +import cpw.mods.fml.relauncher.CoreModManager; +import cpw.mods.fml.relauncher.FMLInjectionData; +import cpw.mods.fml.relauncher.IFMLCallHook; +import cpw.mods.fml.relauncher.IFMLLoadingPlugin; +import cpw.mods.fml.relauncher.IFMLLoadingPlugin.MCVersion; +import cpw.mods.fml.relauncher.IFMLLoadingPlugin.TransformerExclusions; import java.awt.*; import java.io.File; import java.lang.reflect.Constructor; @@ -11,32 +22,18 @@ import java.util.Map; import java.util.jar.Attributes; import java.util.jar.JarFile; import java.util.jar.Manifest; - import javax.swing.JEditorPane; import javax.swing.JOptionPane; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; - -import codechicken.core.asm.*; -import codechicken.lib.config.ConfigTag; -import cpw.mods.fml.common.FMLCommonHandler; -import cpw.mods.fml.relauncher.CoreModManager; - -import cpw.mods.fml.common.versioning.DefaultArtifactVersion; -import cpw.mods.fml.common.versioning.VersionParser; -import cpw.mods.fml.relauncher.FMLInjectionData; -import cpw.mods.fml.relauncher.IFMLCallHook; -import cpw.mods.fml.relauncher.IFMLLoadingPlugin; -import cpw.mods.fml.relauncher.IFMLLoadingPlugin.MCVersion; -import cpw.mods.fml.relauncher.IFMLLoadingPlugin.TransformerExclusions; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @TransformerExclusions(value = {"codechicken.core.asm", "codechicken.obfuscator"}) -@MCVersion( "1.7.10" ) -public class CodeChickenCorePlugin implements IFMLLoadingPlugin, IFMLCallHook -{ +@MCVersion("1.7.10") +public class CodeChickenCorePlugin implements IFMLLoadingPlugin, IFMLCallHook { public static final String mcVersion = "[1.7.10]"; + @Deprecated public static final String version = "1.1.3-unused"; @@ -45,8 +42,7 @@ public class CodeChickenCorePlugin implements IFMLLoadingPlugin, IFMLCallHook public static Logger logger = LogManager.getLogger("CodeChickenCore"); public CodeChickenCorePlugin() { - if (minecraftDir != null) - return;//get called twice, once for IFMLCallHook + if (minecraftDir != null) return; // get called twice, once for IFMLCallHook minecraftDir = (File) FMLInjectionData.data()[6]; currentMcVersion = (String) FMLInjectionData.data()[4]; @@ -58,11 +54,20 @@ public class CodeChickenCorePlugin implements IFMLLoadingPlugin, IFMLCallHook private void injectDeobfPlugin() { try { Class wrapperClass = Class.forName("cpw.mods.fml.relauncher.CoreModManager$FMLPluginWrapper"); - Constructor wrapperConstructor = wrapperClass.getConstructor(String.class, IFMLLoadingPlugin.class, File.class, Integer.TYPE, String[].class); + Constructor wrapperConstructor = wrapperClass.getConstructor( + String.class, IFMLLoadingPlugin.class, File.class, Integer.TYPE, String[].class); Field f_loadPlugins = CoreModManager.class.getDeclaredField("loadPlugins"); wrapperConstructor.setAccessible(true); f_loadPlugins.setAccessible(true); - ((List)f_loadPlugins.get(null)).add(2, wrapperConstructor.newInstance("CCCDeobfPlugin", new MCPDeobfuscationTransformer.LoadPlugin(), null, 0, new String[0])); + ((List) f_loadPlugins.get(null)) + .add( + 2, + wrapperConstructor.newInstance( + "CCCDeobfPlugin", + new MCPDeobfuscationTransformer.LoadPlugin(), + null, + 0, + new String[0])); } catch (Exception e) { logger.error("Failed to inject MCPDeobfuscation Transformer", e); } @@ -74,22 +79,22 @@ public class CodeChickenCorePlugin implements IFMLLoadingPlugin, IFMLCallHook String err = "This version of " + mod + " does not support minecraft version " + mcVersion; logger.error(err); - JEditorPane ep = new JEditorPane("text/html", - "" + - err + - "
Remove it from your coremods folder and check here for updates" + - ""); + JEditorPane ep = new JEditorPane( + "text/html", + "" + err + + "
Remove it from your coremods folder and check here for updates" + + ""); ep.setEditable(false); ep.setOpaque(false); - ep.addHyperlinkListener(new HyperlinkListener() - { + ep.addHyperlinkListener(new HyperlinkListener() { @Override public void hyperlinkUpdate(HyperlinkEvent event) { try { if (event.getEventType().equals(HyperlinkEvent.EventType.ACTIVATED)) Desktop.getDesktop().browse(event.getURL().toURI()); - } catch (Exception ignored) {} + } catch (Exception ignored) { + } } }); @@ -101,11 +106,15 @@ public class CodeChickenCorePlugin implements IFMLLoadingPlugin, IFMLCallHook public static long parseSize(String text) { double d = Double.parseDouble(text.replaceAll("[GMK]B?$", "")); long l = Math.round(d * 1024 * 1024 * 1024L); - switch (text.replaceAll("\\d?","").toUpperCase().charAt(0)) { - default: l /= 1024; - case 'K': l /= 1024; - case 'M': l /= 1024; - case 'G': return l; + switch (text.replaceAll("\\d?", "").toUpperCase().charAt(0)) { + default: + l /= 1024; + case 'K': + l /= 1024; + case 'M': + l /= 1024; + case 'G': + return l; } } @@ -125,28 +134,45 @@ public class CodeChickenCorePlugin implements IFMLLoadingPlugin, IFMLCallHook } public static void systemCheck(ConfigTag checkRAM) { - long minBytes = parseSize(checkRAM.getTag("minRAM").setComment("Amount of RAM minimum this modpack needs to load").getValue("3GB")); + long minBytes = parseSize(checkRAM.getTag("minRAM") + .setComment("Amount of RAM minimum this modpack needs to load") + .getValue("3GB")); if (Runtime.getRuntime().maxMemory() < minBytes) { - String err = "You should have at least " + humanReadableByteCountBin(minBytes) + " of RAM but you have only allocated " + humanReadableByteCountBin(Runtime.getRuntime().maxMemory()) + "."; + String err = "You should have at least " + humanReadableByteCountBin(minBytes) + + " of RAM but you have only allocated " + + humanReadableByteCountBin(Runtime.getRuntime().maxMemory()) + "."; logger.error(err); - JEditorPane ep = new JEditorPane("text/html", - "" + err + "
" + checkRAM.getTag("modPack").setComment("Name of the modpack").getValue("Unidentified ModPack") + - " seriously won't run without enough RAM. " + checkRAM.getTag("wiki").setComment("Webpage describing RAM settings").getValue("See DownloadMoreRam.com for details.") + - "
Recommended values are between " + checkRAM.getTag("recRAM").setComment("Lower bound of recommended RAM").getValue("4GB") + " and " + - checkRAM.getTag("recRAMUpper").setComment("Upper bound of recommended RAM").getValue("6GB") + ". Check your launcher's JVM arguments." + - ""); + JEditorPane ep = new JEditorPane( + "text/html", + "" + err + "
" + + checkRAM.getTag("modPack") + .setComment("Name of the modpack") + .getValue("Unidentified ModPack") + + " seriously won't run without enough RAM. " + + checkRAM.getTag("wiki") + .setComment("Webpage describing RAM settings") + .getValue( + "See DownloadMoreRam.com for details.") + + "
Recommended values are between " + + checkRAM.getTag("recRAM") + .setComment("Lower bound of recommended RAM") + .getValue("4GB") + " and " + + checkRAM.getTag("recRAMUpper") + .setComment("Upper bound of recommended RAM") + .getValue("6GB") + + ". Check your launcher's JVM arguments." + ""); ep.setEditable(false); ep.setOpaque(false); - ep.addHyperlinkListener(new HyperlinkListener() - { + ep.addHyperlinkListener(new HyperlinkListener() { @Override public void hyperlinkUpdate(HyperlinkEvent event) { try { if (event.getEventType().equals(HyperlinkEvent.EventType.ACTIVATED)) Desktop.getDesktop().browse(event.getURL().toURI()); - } catch (Exception ignored) {} + } catch (Exception ignored) { + } } }); @@ -159,12 +185,12 @@ public class CodeChickenCorePlugin implements IFMLLoadingPlugin, IFMLCallHook @Override public String[] getASMTransformerClass() { versionCheck(mcVersion, "CodeChickenCore"); - return new String[]{ - "codechicken.lib.asm.ClassHeirachyManager", - "codechicken.core.asm.InterfaceDependancyTransformer", - "codechicken.core.asm.TweakTransformer", - "codechicken.core.asm.DelegatedTransformer", - "codechicken.core.asm.DefaultImplementationTransformer"}; + return new String[] { + "codechicken.lib.asm.ClassHeirachyManager", + "codechicken.core.asm.TweakTransformer", + "codechicken.core.asm.DelegatedTransformer", + "codechicken.core.asm.DefaultImplementationTransformer" + }; } @Override @@ -183,17 +209,19 @@ public class CodeChickenCorePlugin implements IFMLLoadingPlugin, IFMLCallHook } @Override - public void injectData(Map data) { - } + public void injectData(Map data) {} @Override public Void call() { CodeChickenCoreModContainer.loadConfig(); ConfigTag checkRAM; - checkRAM = CodeChickenCoreModContainer.config.getTag("checks") - .setComment("Configuration options for checking various requirements for a modpack.").useBraces(); - if(checkRAM.getTag("checkRAM").setComment("If set to true, check RAM available for Minecraft before continuing to load").getBooleanValue(false)) - systemCheck(checkRAM); + checkRAM = CodeChickenCoreModContainer.config + .getTag("checks") + .setComment("Configuration options for checking various requirements for a modpack.") + .useBraces(); + if (checkRAM.getTag("checkRAM") + .setComment("If set to true, check RAM available for Minecraft before continuing to load") + .getBooleanValue(false)) systemCheck(checkRAM); TweakTransformer.load(); scanCodeChickenMods(); @@ -202,31 +230,24 @@ public class CodeChickenCorePlugin implements IFMLLoadingPlugin, IFMLCallHook private void scanCodeChickenMods() { File modsDir = new File(minecraftDir, "mods"); - for (File file : modsDir.listFiles()) - scanMod(file); + for (File file : modsDir.listFiles()) scanMod(file); File versionModsDir = new File(minecraftDir, "mods/" + currentMcVersion); - if (versionModsDir.exists()) - for (File file : versionModsDir.listFiles()) - scanMod(file); + if (versionModsDir.exists()) for (File file : versionModsDir.listFiles()) scanMod(file); } private void scanMod(File file) { - if (!file.getName().endsWith(".jar") && !file.getName().endsWith(".zip")) - return; + if (!file.getName().endsWith(".jar") && !file.getName().endsWith(".zip")) return; try { JarFile jar = new JarFile(file); try { Manifest manifest = jar.getManifest(); - if (manifest == null) - return; + if (manifest == null) return; Attributes attr = manifest.getMainAttributes(); - if (attr == null) - return; + if (attr == null) return; String transformer = attr.getValue("CCTransformer"); - if (transformer != null) - DelegatedTransformer.addTransformer(transformer, jar, file); + if (transformer != null) DelegatedTransformer.addTransformer(transformer, jar, file); } finally { jar.close(); } diff --git a/src/main/java/codechicken/core/launch/DepLoader.java b/src/main/java/codechicken/core/launch/DepLoader.java index c2c0376..630e0c9 100644 --- a/src/main/java/codechicken/core/launch/DepLoader.java +++ b/src/main/java/codechicken/core/launch/DepLoader.java @@ -9,13 +9,6 @@ import cpw.mods.fml.relauncher.FMLLaunchHandler; import cpw.mods.fml.relauncher.IFMLCallHook; import cpw.mods.fml.relauncher.IFMLLoadingPlugin; import cpw.mods.fml.relauncher.IFMLLoadingPlugin.MCVersion; -import net.minecraft.launchwrapper.LaunchClassLoader; -import sun.misc.URLClassPath; -import sun.net.util.URLUtil; - -import javax.swing.*; -import javax.swing.event.HyperlinkEvent; -import javax.swing.event.HyperlinkListener; import java.awt.*; import java.awt.Dialog.ModalityType; import java.awt.event.WindowAdapter; @@ -29,19 +22,25 @@ import java.net.URL; import java.net.URLClassLoader; import java.net.URLConnection; import java.nio.ByteBuffer; -import java.util.List; import java.util.*; +import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; +import javax.swing.*; +import javax.swing.event.HyperlinkEvent; +import javax.swing.event.HyperlinkListener; +import net.minecraft.launchwrapper.LaunchClassLoader; +import sun.misc.URLClassPath; +import sun.net.util.URLUtil; /** * For autodownloading stuff. * This is really unoriginal, mostly ripped off FML, credits to cpw. */ -@MCVersion( "1.7.10" ) +@MCVersion("1.7.10") public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { private static ByteBuffer downloadBuffer = ByteBuffer.allocateDirect(1 << 23); private static final String owner = "CB's DepLoader"; @@ -74,10 +73,12 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { private Box makeProgressPanel() { Box box = Box.createVerticalBox(); box.add(Box.createRigidArea(new Dimension(0, 10))); - JLabel welcomeLabel = new JLabel("" + owner + " is setting up your minecraft environment"); + JLabel welcomeLabel = new JLabel("" + owner + + " is setting up your minecraft environment"); box.add(welcomeLabel); welcomeLabel.setAlignmentY(LEFT_ALIGNMENT); - welcomeLabel = new JLabel("Please wait, " + owner + " has some tasks to do before you can play"); + welcomeLabel = + new JLabel("Please wait, " + owner + " has some tasks to do before you can play"); welcomeLabel.setAlignmentY(LEFT_ALIGNMENT); box.add(welcomeLabel); box.add(Box.createRigidArea(new Dimension(0, 10))); @@ -93,12 +94,11 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { @Override public JDialog makeDialog() { - if (container != null) - return container; + if (container != null) return container; setMessageType(JOptionPane.INFORMATION_MESSAGE); setMessage(makeProgressPanel()); - setOptions(new Object[]{"Stop"}); + setOptions(new Object[] {"Stop"}); addPropertyChangeListener(new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { @@ -119,39 +119,40 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { container.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { - requestClose("Closing this window will stop minecraft from launching\nAre you sure you wish to do this?"); + requestClose( + "Closing this window will stop minecraft from launching\nAre you sure you wish to do this?"); } }); return container; } protected void requestClose(String message) { - int shouldClose = JOptionPane.showConfirmDialog(container, message, "Are you sure you want to stop?", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); - if (shouldClose == JOptionPane.YES_OPTION) - container.dispose(); + int shouldClose = JOptionPane.showConfirmDialog( + container, + message, + "Are you sure you want to stop?", + JOptionPane.YES_NO_OPTION, + JOptionPane.WARNING_MESSAGE); + if (shouldClose == JOptionPane.YES_OPTION) container.dispose(); stopIt = true; - if (pokeThread != null) - pokeThread.interrupt(); + if (pokeThread != null) pokeThread.interrupt(); } @Override public void updateProgressString(String progressUpdate, Object... data) { - //FMLLog.finest(progressUpdate, data); - if (currentActivity != null) - currentActivity.setText(String.format(progressUpdate, data)); + // FMLLog.finest(progressUpdate, data); + if (currentActivity != null) currentActivity.setText(String.format(progressUpdate, data)); } @Override public void resetProgress(int sizeGuess) { - if (progress != null) - progress.getModel().setRangeProperties(0, 0, 0, sizeGuess, false); + if (progress != null) progress.getModel().setRangeProperties(0, 0, 0, sizeGuess, false); } @Override public void updateProgress(int fullLength) { - if (progress != null) - progress.getModel().setValue(fullLength); + if (progress != null) progress.getModel().setValue(fullLength); } @Override @@ -166,12 +167,13 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { @Override public void showErrorDialog(String name, String url) { - JEditorPane ep = new JEditorPane("text/html", - "" + - owner + " was unable to download required library " + name + - "
Check your internet connection and try restarting or download it manually from" + - "
" + url + " and put it in your mods folder" + - ""); + JEditorPane ep = new JEditorPane( + "text/html", + "" + owner + + " was unable to download required library " + name + + "
Check your internet connection and try restarting or download it manually from" + + "
" + url + " and put it in your mods folder" + ""); ep.setEditable(false); ep.setOpaque(false); @@ -192,16 +194,13 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { public static class DummyDownloader implements IDownloadDisplay { @Override - public void resetProgress(int sizeGuess) { - } + public void resetProgress(int sizeGuess) {} @Override - public void setPokeThread(Thread currentThread) { - } + public void setPokeThread(Thread currentThread) {} @Override - public void updateProgress(int fullLength) { - } + public void updateProgress(int fullLength) {} @Override public boolean shouldStopIt() { @@ -209,8 +208,7 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { } @Override - public void updateProgressString(String string, Object... data) { - } + public void updateProgressString(String string, Object... data) {} @Override public Object makeDialog() { @@ -218,12 +216,10 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { } @Override - public void showErrorDialog(String name, String url) { - } + public void showErrorDialog(String name, String url) {} } - public static class VersionedFile - { + public static class VersionedFile { public final Pattern pattern; public final String filename; public final ComparableVersion version; @@ -233,11 +229,10 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { this.pattern = pattern; this.filename = filename; Matcher m = pattern.matcher(filename); - if(m.matches()) { + if (m.matches()) { name = m.group(1); version = new ComparableVersion(m.group(2)); - } - else { + } else { name = null; version = null; } @@ -248,8 +243,7 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { } } - public static class Dependency - { + public static class Dependency { public String url; public VersionedFile file; @@ -281,21 +275,20 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { modsDir = new File(mcDir, "mods"); v_modsDir = new File(mcDir, "mods/" + mcVer); - if (!v_modsDir.exists()) - v_modsDir.mkdirs(); + if (!v_modsDir.exists()) v_modsDir.mkdirs(); } private void addClasspath(String name) { try { - ((LaunchClassLoader) DepLoader.class.getClassLoader()).addURL(new File(v_modsDir, name).toURI().toURL()); + ((LaunchClassLoader) DepLoader.class.getClassLoader()) + .addURL(new File(v_modsDir, name).toURI().toURL()); } catch (MalformedURLException e) { throw new RuntimeException(e); } } private void deleteMod(File mod) { - if (mod.delete()) - return; + if (mod.delete()) return; try { ClassLoader cl = DepLoader.class.getClassLoader(); @@ -319,7 +312,8 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { if (!mod.delete()) { mod.deleteOnExit(); - String msg = owner + " was unable to delete file " + mod.getPath() + " the game will now try to delete it on exit. If this dialog appears again, delete it manually."; + String msg = owner + " was unable to delete file " + mod.getPath() + + " the game will now try to delete it on exit. If this dialog appears again, delete it manually."; CodeChickenCorePlugin.logger.error(msg); if (!GraphicsEnvironment.isHeadless()) JOptionPane.showMessageDialog(null, msg, "An update error has occurred", JOptionPane.ERROR_MESSAGE); @@ -348,7 +342,8 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { } catch (Exception e) { libFile.delete(); if (downloadMonitor.shouldStopIt()) { - CodeChickenCorePlugin.logger.error("You have stopped the downloading operation before it could complete"); + CodeChickenCorePlugin.logger.error( + "You have stopped the downloading operation before it could complete"); System.exit(1); return; } @@ -359,7 +354,9 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { private void download(InputStream is, int sizeGuess, File target) throws Exception { if (sizeGuess > downloadBuffer.capacity()) - throw new Exception(String.format("The file %s is too large to be downloaded by " + owner + " - the download is invalid", target.getName())); + throw new Exception(String.format( + "The file %s is too large to be downloaded by " + owner + " - the download is invalid", + target.getName())); downloadBuffer.clear(); @@ -393,9 +390,7 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { /*String cksum = generateChecksum(downloadBuffer); if (cksum.equals(validationHash)) {*/ - if (!target.exists()) - target.createNewFile(); - + if (!target.exists()) target.createNewFile(); downloadBuffer.position(0); FileOutputStream fos = new FileOutputStream(target); @@ -414,19 +409,16 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { private String checkExisting(Dependency dep) { for (File f : modsDir.listFiles()) { VersionedFile vfile = new VersionedFile(f.getName(), dep.file.pattern); - if (!vfile.matches() || !vfile.name.equals(dep.file.name)) - continue; + if (!vfile.matches() || !vfile.name.equals(dep.file.name)) continue; - if (f.renameTo(new File(v_modsDir, f.getName()))) - continue; + if (f.renameTo(new File(v_modsDir, f.getName()))) continue; deleteMod(f); } for (File f : v_modsDir.listFiles()) { VersionedFile vfile = new VersionedFile(f.getName(), dep.file.pattern); - if (!vfile.matches() || !vfile.name.equals(dep.file.name)) - continue; + if (!vfile.matches() || !vfile.name.equals(dep.file.name)) continue; int cmp = vfile.version.compareTo(dep.file.version); if (cmp < 0) { @@ -435,27 +427,25 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { return null; } if (cmp > 0) { - CodeChickenCorePlugin.logger.warn("Warning: version of " + dep.file.name + ", " + vfile.version + " is newer than request " + dep.file.version); + CodeChickenCorePlugin.logger.warn("Warning: version of " + dep.file.name + ", " + vfile.version + + " is newer than request " + dep.file.version); return f.getName(); } - return f.getName();//found dependency + return f.getName(); // found dependency } return null; } public void load() { scanDepInfos(); - if (depMap.isEmpty()) - return; + if (depMap.isEmpty()) return; loadDeps(); activateDeps(); } private void activateDeps() { - for (Dependency dep : depMap.values()) - if (dep.coreLib) - addClasspath(dep.existing); + for (Dependency dep : depMap.values()) if (dep.coreLib) addClasspath(dep.existing); } private void loadDeps() { @@ -477,7 +467,7 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { private void load(Dependency dep) { dep.existing = checkExisting(dep); - if (dep.existing == null)//download dep + if (dep.existing == null) // download dep { download(dep); dep.existing = dep.file.filename; @@ -493,8 +483,7 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { private void scanDepInfos() { for (File file : modFiles()) { - if (!file.getName().endsWith(".jar") && !file.getName().endsWith(".zip")) - continue; + if (!file.getName().endsWith(".jar") && !file.getName().endsWith(".zip")) continue; scanDepInfo(file); } @@ -505,11 +494,11 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { ZipFile zip = new ZipFile(file); ZipEntry e = zip.getEntry("dependancies.info"); if (e == null) e = zip.getEntry("dependencies.info"); - if (e != null) - loadJSon(zip.getInputStream(e)); + if (e != null) loadJSon(zip.getInputStream(e)); zip.close(); } catch (Exception e) { - CodeChickenCorePlugin.logger.error("Failed to load dependencies.info from " + file.getName() + " as JSON"); + CodeChickenCorePlugin.logger.error( + "Failed to load dependencies.info from " + file.getName() + " as JSON"); e.printStackTrace(); } } @@ -517,47 +506,41 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { private void loadJSon(InputStream input) throws IOException { InputStreamReader reader = new InputStreamReader(input); JsonElement root = new JsonParser().parse(reader); - if (root.isJsonArray()) - loadJSonArr(root); - else - loadJson(root.getAsJsonObject()); + if (root.isJsonArray()) loadJSonArr(root); + else loadJson(root.getAsJsonObject()); reader.close(); } private void loadJSonArr(JsonElement root) throws IOException { - for (JsonElement node : root.getAsJsonArray()) - loadJson(node.getAsJsonObject()); + for (JsonElement node : root.getAsJsonArray()) loadJson(node.getAsJsonObject()); } private void loadJson(JsonObject node) throws IOException { - boolean obfuscated = ((LaunchClassLoader) DepLoader.class.getClassLoader()) - .getClassBytes("net.minecraft.world.World") == null; + boolean obfuscated = + ((LaunchClassLoader) DepLoader.class.getClassLoader()).getClassBytes("net.minecraft.world.World") + == null; String testClass = node.get("class").getAsString(); - if (DepLoader.class.getResource("/" + testClass.replace('.', '/') + ".class") != null) - return; + if (DepLoader.class.getResource("/" + testClass.replace('.', '/') + ".class") != null) return; String repo = node.get("repo").getAsString(); String filename = node.get("file").getAsString(); - if (!obfuscated && node.has("dev")) - filename = node.get("dev").getAsString(); + if (!obfuscated && node.has("dev")) filename = node.get("dev").getAsString(); boolean coreLib = node.has("coreLib") && node.get("coreLib").getAsBoolean(); Pattern pattern = null; try { - if(node.has("pattern")) + if (node.has("pattern")) pattern = Pattern.compile(node.get("pattern").getAsString()); } catch (PatternSyntaxException e) { CodeChickenCorePlugin.logger.error("Invalid filename pattern: " + node.get("pattern")); e.printStackTrace(); } - if(pattern == null) - pattern = Pattern.compile("(\\w+).*?([\\d\\.]+)[-\\w]*\\.[^\\d]+"); + if (pattern == null) pattern = Pattern.compile("(\\w+).*?([\\d\\.]+)[-\\w]*\\.[^\\d]+"); VersionedFile file = new VersionedFile(filename, pattern); - if (!file.matches()) - throw new RuntimeException("Invalid filename format for dependency: " + filename); + if (!file.matches()) throw new RuntimeException("Invalid filename format for dependency: " + filename); addDep(new Dependency(repo, file, coreLib)); } @@ -570,8 +553,7 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { } private boolean mergeNew(Dependency oldDep, Dependency newDep) { - if (oldDep == null) - return true; + if (oldDep == null) return true; Dependency newest = newDep.file.version.compareTo(oldDep.file.version) > 0 ? newDep : oldDep; newest.coreLib = newDep.coreLib || oldDep.coreLib; @@ -603,8 +585,7 @@ public class DepLoader implements IFMLLoadingPlugin, IFMLCallHook { } @Override - public void injectData(Map data) { - } + public void injectData(Map data) {} @Override public Void call() { diff --git a/src/main/java/codechicken/obfuscator/ConstantObfuscator.java b/src/main/java/codechicken/obfuscator/ConstantObfuscator.java index bb090c5..0af3660 100644 --- a/src/main/java/codechicken/obfuscator/ConstantObfuscator.java +++ b/src/main/java/codechicken/obfuscator/ConstantObfuscator.java @@ -1,5 +1,8 @@ package codechicken.obfuscator; +import static org.objectweb.asm.tree.AbstractInsnNode.*; + +import codechicken.lib.asm.ObfMapping; import java.util.LinkedList; import java.util.List; import org.objectweb.asm.Opcodes; @@ -9,42 +12,30 @@ import org.objectweb.asm.tree.LdcInsnNode; import org.objectweb.asm.tree.MethodInsnNode; import org.objectweb.asm.tree.MethodNode; -import codechicken.lib.asm.ObfMapping; - -import static org.objectweb.asm.tree.AbstractInsnNode.*; - -public class ConstantObfuscator implements Opcodes -{ +public class ConstantObfuscator implements Opcodes { public ObfRemapper obf; public List descCalls = new LinkedList(); public List classCalls = new LinkedList(); - - public ConstantObfuscator(ObfRemapper obf, String[] a_classCalls, String[] a_descCalls) - { + + public ConstantObfuscator(ObfRemapper obf, String[] a_classCalls, String[] a_descCalls) { this.obf = obf; - for(String callDesc : a_classCalls) - classCalls.add(ObfMapping.fromDesc(callDesc)); - - for(String callDesc : a_descCalls) - descCalls.add(ObfMapping.fromDesc(callDesc)); + for (String callDesc : a_classCalls) classCalls.add(ObfMapping.fromDesc(callDesc)); + + for (String callDesc : a_descCalls) descCalls.add(ObfMapping.fromDesc(callDesc)); } - public void transform(ClassNode cnode) - { - for(MethodNode method : cnode.methods) - for(AbstractInsnNode insn = method.instructions.getFirst(); insn != null; insn = insn.getNext()) + public void transform(ClassNode cnode) { + for (MethodNode method : cnode.methods) + for (AbstractInsnNode insn = method.instructions.getFirst(); insn != null; insn = insn.getNext()) obfuscateInsnSeq(insn); } - - private void obfuscateInsnSeq(AbstractInsnNode insn) - { - if(matchesClass(insn)) - { + + private void obfuscateInsnSeq(AbstractInsnNode insn) { + if (matchesClass(insn)) { LdcInsnNode node1 = (LdcInsnNode) insn; node1.cst = obf.map((String) node1.cst); } - if(matchesDesc(insn)) - { + if (matchesDesc(insn)) { LdcInsnNode node1 = (LdcInsnNode) insn; LdcInsnNode node2 = (LdcInsnNode) node1.getNext(); LdcInsnNode node3 = (LdcInsnNode) node2.getNext(); @@ -54,30 +45,24 @@ public class ConstantObfuscator implements Opcodes node3.cst = mapping.s_desc; } } - - private boolean matchesClass(AbstractInsnNode insn) - { - if(insn.getType() != LDC_INSN) return false; + + private boolean matchesClass(AbstractInsnNode insn) { + if (insn.getType() != LDC_INSN) return false; insn = insn.getNext(); - if(insn == null || insn.getType() != METHOD_INSN) return false; - for(ObfMapping m : classCalls) - if(m.matches((MethodInsnNode) insn)) - return true; + if (insn == null || insn.getType() != METHOD_INSN) return false; + for (ObfMapping m : classCalls) if (m.matches((MethodInsnNode) insn)) return true; return false; } - - private boolean matchesDesc(AbstractInsnNode insn) - { - if(insn.getType() != LDC_INSN) return false; + + private boolean matchesDesc(AbstractInsnNode insn) { + if (insn.getType() != LDC_INSN) return false; insn = insn.getNext(); - if(insn == null || insn.getType() != LDC_INSN) return false; + if (insn == null || insn.getType() != LDC_INSN) return false; insn = insn.getNext(); - if(insn == null || insn.getType() != LDC_INSN) return false; + if (insn == null || insn.getType() != LDC_INSN) return false; insn = insn.getNext(); - if(insn == null || insn.getType() != METHOD_INSN) return false; - for(ObfMapping m : descCalls) - if(m.matches((MethodInsnNode) insn)) - return true; + if (insn == null || insn.getType() != METHOD_INSN) return false; + for (ObfMapping m : descCalls) if (m.matches((MethodInsnNode) insn)) return true; return false; } } diff --git a/src/main/java/codechicken/obfuscator/DummyOutputStream.java b/src/main/java/codechicken/obfuscator/DummyOutputStream.java index 50093ef..475526c 100644 --- a/src/main/java/codechicken/obfuscator/DummyOutputStream.java +++ b/src/main/java/codechicken/obfuscator/DummyOutputStream.java @@ -2,12 +2,9 @@ package codechicken.obfuscator; import java.io.OutputStream; -public class DummyOutputStream extends OutputStream -{ +public class DummyOutputStream extends OutputStream { public static DummyOutputStream instance = new DummyOutputStream(); @Override - public void write(int b) - { - } + public void write(int b) {} } diff --git a/src/main/java/codechicken/obfuscator/IHeirachyEvaluator.java b/src/main/java/codechicken/obfuscator/IHeirachyEvaluator.java index 4c43444..bca8fa0 100644 --- a/src/main/java/codechicken/obfuscator/IHeirachyEvaluator.java +++ b/src/main/java/codechicken/obfuscator/IHeirachyEvaluator.java @@ -1,11 +1,9 @@ package codechicken.obfuscator; +import codechicken.obfuscator.ObfuscationMap.ObfuscationEntry; import java.util.List; -import codechicken.obfuscator.ObfuscationMap.ObfuscationEntry; - -public interface IHeirachyEvaluator -{ +public interface IHeirachyEvaluator { /** * @param desc The mapping descriptor of the class to evaluate heirachy for * @return A list of parents (srg or obf names) diff --git a/src/main/java/codechicken/obfuscator/ILogStreams.java b/src/main/java/codechicken/obfuscator/ILogStreams.java index 0992103..3beeedf 100644 --- a/src/main/java/codechicken/obfuscator/ILogStreams.java +++ b/src/main/java/codechicken/obfuscator/ILogStreams.java @@ -2,8 +2,8 @@ package codechicken.obfuscator; import java.io.PrintStream; -public interface ILogStreams -{ +public interface ILogStreams { public PrintStream err(); + public PrintStream out(); } diff --git a/src/main/java/codechicken/obfuscator/ObfDirection.java b/src/main/java/codechicken/obfuscator/ObfDirection.java index 3405be2..a1bb715 100644 --- a/src/main/java/codechicken/obfuscator/ObfDirection.java +++ b/src/main/java/codechicken/obfuscator/ObfDirection.java @@ -3,32 +3,27 @@ package codechicken.obfuscator; import codechicken.lib.asm.ObfMapping; import codechicken.obfuscator.ObfuscationMap.ObfuscationEntry; -public class ObfDirection -{ +public class ObfDirection { public boolean obfuscate; public boolean srg; public boolean srg_cst; - - public ObfDirection setObfuscate(boolean obfuscate) - { + + public ObfDirection setObfuscate(boolean obfuscate) { this.obfuscate = obfuscate; return this; } - - public ObfDirection setSearge(boolean srg) - { + + public ObfDirection setSearge(boolean srg) { this.srg = srg; return this; } - public ObfDirection setSeargeConstants(boolean srg_cst) - { + public ObfDirection setSeargeConstants(boolean srg_cst) { this.srg_cst = srg_cst; return this; } - public ObfMapping obfuscate(ObfuscationEntry map) - { + public ObfMapping obfuscate(ObfuscationEntry map) { return srg ? map.srg : obfuscate ? map.obf : map.mcp; } } diff --git a/src/main/java/codechicken/obfuscator/ObfRemapper.java b/src/main/java/codechicken/obfuscator/ObfRemapper.java index 3cc70e7..b4668b5 100644 --- a/src/main/java/codechicken/obfuscator/ObfRemapper.java +++ b/src/main/java/codechicken/obfuscator/ObfRemapper.java @@ -1,91 +1,69 @@ package codechicken.obfuscator; +import codechicken.obfuscator.ObfuscationMap.ObfuscationEntry; import org.objectweb.asm.commons.Remapper; -import codechicken.obfuscator.ObfuscationMap.ObfuscationEntry; - -public class ObfRemapper extends Remapper -{ +public class ObfRemapper extends Remapper { public final ObfuscationMap obf; public ObfDirection dir; - - public ObfRemapper(ObfuscationMap obf, ObfDirection dir) - { + + public ObfRemapper(ObfuscationMap obf, ObfDirection dir) { this.obf = obf; this.dir = dir; } - - @Override - public String map(String name) - { - if(name.indexOf('$') >= 0) - return map(name.substring(0, name.indexOf('$')))+name.substring(name.indexOf('$')); - - ObfuscationEntry map; - if(dir.obfuscate) - map = obf.lookupMcpClass(name); - else - map = obf.lookupObfClass(name); - if(map != null) - return dir.obfuscate(map).s_owner; - - return name; - } - @Override - public String mapFieldName(String owner, String name, String desc) - { + public String map(String name) { + if (name.indexOf('$') >= 0) + return map(name.substring(0, name.indexOf('$'))) + name.substring(name.indexOf('$')); + ObfuscationEntry map; - if(dir.obfuscate) - map = obf.lookupMcpField(owner, name); - else - map = obf.lookupObfField(owner, name); - - if(map == null) - map = obf.lookupSrgField(owner, name); - - if(map != null) - return dir.obfuscate(map).s_name; - - return name; - } - - @Override - public String mapMethodName(String owner, String name, String desc) - { - if(owner.length() == 0 || owner.charAt(0) == '[') - return name; - - ObfuscationEntry map; - if(dir.obfuscate) - map = obf.lookupMcpMethod(owner, name, desc); - else - map = obf.lookupObfMethod(owner, name, desc); - - if(map == null) - map = obf.lookupSrg(name); - - if(map != null) - return dir.obfuscate(map).s_name; - + if (dir.obfuscate) map = obf.lookupMcpClass(name); + else map = obf.lookupObfClass(name); + + if (map != null) return dir.obfuscate(map).s_owner; + return name; } @Override - public Object mapValue(Object cst) - { - if(cst instanceof String) - { - if(dir.srg_cst) - { + public String mapFieldName(String owner, String name, String desc) { + ObfuscationEntry map; + if (dir.obfuscate) map = obf.lookupMcpField(owner, name); + else map = obf.lookupObfField(owner, name); + + if (map == null) map = obf.lookupSrgField(owner, name); + + if (map != null) return dir.obfuscate(map).s_name; + + return name; + } + + @Override + public String mapMethodName(String owner, String name, String desc) { + if (owner.length() == 0 || owner.charAt(0) == '[') return name; + + ObfuscationEntry map; + if (dir.obfuscate) map = obf.lookupMcpMethod(owner, name, desc); + else map = obf.lookupObfMethod(owner, name, desc); + + if (map == null) map = obf.lookupSrg(name); + + if (map != null) return dir.obfuscate(map).s_name; + + return name; + } + + @Override + public Object mapValue(Object cst) { + if (cst instanceof String) { + if (dir.srg_cst) { ObfuscationEntry map = obf.lookupSrg((String) cst); - if(map != null) - return dir.obfuscate(map).s_name; + if (map != null) return dir.obfuscate(map).s_name; } return cst; } - + return super.mapValue(cst); } } diff --git a/src/main/java/codechicken/obfuscator/ObfuscationMap.java b/src/main/java/codechicken/obfuscator/ObfuscationMap.java index 3350e5a..0183ff7 100644 --- a/src/main/java/codechicken/obfuscator/ObfuscationMap.java +++ b/src/main/java/codechicken/obfuscator/ObfuscationMap.java @@ -1,5 +1,8 @@ package codechicken.obfuscator; +import codechicken.lib.asm.ObfMapping; +import com.google.common.base.Function; +import com.google.common.collect.ArrayListMultimap; import java.io.File; import java.util.HashMap; import java.util.HashSet; @@ -7,162 +10,127 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; -import com.google.common.base.Function; -import com.google.common.collect.ArrayListMultimap; - -import codechicken.lib.asm.ObfMapping; - -public class ObfuscationMap -{ - public class ObfuscationEntry - { +public class ObfuscationMap { + public class ObfuscationEntry { public final ObfMapping obf; public final ObfMapping srg; public final ObfMapping mcp; - - public ObfuscationEntry(ObfMapping obf, ObfMapping srg, ObfMapping mcp) - { + + public ObfuscationEntry(ObfMapping obf, ObfMapping srg, ObfMapping mcp) { this.obf = obf; this.srg = srg; this.mcp = mcp; } } - - private class ClassEntry extends ObfuscationEntry - { + + private class ClassEntry extends ObfuscationEntry { public Map mcpMap = new HashMap(); public Map srgMap = new HashMap(); public Map obfMap = new HashMap(); - - public ClassEntry(String obf, String srg) - { - super(new ObfMapping(obf, "", ""), - new ObfMapping(srg, "", ""), - new ObfMapping(srg, "", "")); + + public ClassEntry(String obf, String srg) { + super(new ObfMapping(obf, "", ""), new ObfMapping(srg, "", ""), new ObfMapping(srg, "", "")); } - - public ObfuscationEntry addEntry(ObfMapping obf_desc, ObfMapping srg_desc) - { + + public ObfuscationEntry addEntry(ObfMapping obf_desc, ObfMapping srg_desc) { ObfuscationEntry entry = new ObfuscationEntry(obf_desc, srg_desc, srg_desc.copy()); obfMap.put(obf_desc.s_name.concat(obf_desc.s_desc), entry); srgMap.put(srg_desc.s_name, entry); - - if(srg_desc.s_name.startsWith("field_") || srg_desc.s_name.startsWith("func_")) + + if (srg_desc.s_name.startsWith("field_") || srg_desc.s_name.startsWith("func_")) srgMemberMap.put(srg_desc.s_name, entry); - + return entry; } - public void inheritFrom(ClassEntry p) - { + public void inheritFrom(ClassEntry p) { inherit(obfMap, p.obfMap); inherit(srgMap, p.srgMap); inherit(mcpMap, p.mcpMap); } - - private void inherit(Map child, Map parent) - { - for(Entry e : parent.entrySet()) - if(!child.containsKey(e.getKey())) - child.put(e.getKey(), e.getValue()); + + private void inherit(Map child, Map parent) { + for (Entry e : parent.entrySet()) + if (!child.containsKey(e.getKey())) child.put(e.getKey(), e.getValue()); } } - + private Map srgMap = new HashMap(); private Map obfMap = new HashMap(); private ArrayListMultimap srgMemberMap = ArrayListMultimap.create(); - + private IHeirachyEvaluator heirachyEvaluator; private HashSet mappedClasses = new HashSet(); public ILogStreams log = SystemLogStreams.inst; - - public ObfuscationMap setHeirachyEvaluator(IHeirachyEvaluator eval) - { + + public ObfuscationMap setHeirachyEvaluator(IHeirachyEvaluator eval) { heirachyEvaluator = eval; return this; } - - public ObfuscationMap setLog(ILogStreams log) - { + + public ObfuscationMap setLog(ILogStreams log) { this.log = log; return this; } - - public ObfuscationEntry addClass(String obf, String srg) - { + + public ObfuscationEntry addClass(String obf, String srg) { return addEntry(new ObfMapping(obf, "", ""), new ObfMapping(srg, "", "")); } - - public ObfuscationEntry addField(String obf_owner, String obf_name, String srg_owner, String srg_name) - { - return addEntry(new ObfMapping(obf_owner, obf_name, ""), - new ObfMapping(srg_owner, srg_name, "")); + + public ObfuscationEntry addField(String obf_owner, String obf_name, String srg_owner, String srg_name) { + return addEntry(new ObfMapping(obf_owner, obf_name, ""), new ObfMapping(srg_owner, srg_name, "")); } - - public ObfuscationEntry addMethod(String obf_owner, String obf_name, String obf_desc, String srg_owner, String srg_name, String srg_desc) - { - return addEntry(new ObfMapping(obf_owner, obf_name, obf_desc), - new ObfMapping(srg_owner, srg_name, srg_desc)); + + public ObfuscationEntry addMethod( + String obf_owner, String obf_name, String obf_desc, String srg_owner, String srg_name, String srg_desc) { + return addEntry(new ObfMapping(obf_owner, obf_name, obf_desc), new ObfMapping(srg_owner, srg_name, srg_desc)); } - - public ObfuscationEntry addEntry(ObfMapping obf_desc, ObfMapping srg_desc) - { + + public ObfuscationEntry addEntry(ObfMapping obf_desc, ObfMapping srg_desc) { ClassEntry e = srgMap.get(srg_desc.s_owner); - if(e == null) - { + if (e == null) { e = new ClassEntry(obf_desc.s_owner, srg_desc.s_owner); obfMap.put(obf_desc.s_owner, e); srgMap.put(srg_desc.s_owner, e); } - if(obf_desc.s_name.length() > 0) - return e.addEntry(obf_desc, srg_desc); - + if (obf_desc.s_name.length() > 0) return e.addEntry(obf_desc, srg_desc); + return e; } - - public void addMcpName(String srg_name, String mcp_name) - { + + public void addMcpName(String srg_name, String mcp_name) { List entries = srgMemberMap.get(srg_name); - if(entries.isEmpty()) - { - log.err().println("Tried to add mcp name ("+mcp_name+") for unknown srg key ("+srg_name+")"); + if (entries.isEmpty()) { + log.err().println("Tried to add mcp name (" + mcp_name + ") for unknown srg key (" + srg_name + ")"); return; } - for(ObfuscationEntry entry : entries) - { + for (ObfuscationEntry entry : entries) { entry.mcp.s_name = mcp_name; srgMap.get(entry.srg.s_owner).mcpMap.put(entry.mcp.s_name.concat(entry.mcp.s_desc), entry); } } - - public ObfuscationEntry lookupSrg(String srg_key) - { + + public ObfuscationEntry lookupSrg(String srg_key) { List list = srgMemberMap.get(srg_key); return list.isEmpty() ? null : list.get(0); } - - public ObfuscationEntry lookupMcpClass(String name) - { + + public ObfuscationEntry lookupMcpClass(String name) { return srgMap.get(name); } - public ObfuscationEntry lookupObfClass(String name) - { + public ObfuscationEntry lookupObfClass(String name) { return obfMap.get(name); } - public ObfuscationEntry lookupMcpField(String owner, String name) - { + public ObfuscationEntry lookupMcpField(String owner, String name) { return lookupMcpMethod(owner, name, ""); } - public ObfuscationEntry lookupSrgField(String owner, String name) - { - if(name.startsWith("field_")) - { + public ObfuscationEntry lookupSrgField(String owner, String name) { + if (name.startsWith("field_")) { ObfuscationEntry e = lookupSrg(name); - if(e != null) - return e; + if (e != null) return e; } evaluateHeirachy(owner); @@ -170,174 +138,144 @@ public class ObfuscationMap return e == null ? null : e.srgMap.get(name); } - public ObfuscationEntry lookupObfField(String owner, String name) - { + public ObfuscationEntry lookupObfField(String owner, String name) { return lookupObfMethod(owner, name, ""); } - public ObfuscationEntry lookupMcpMethod(String owner, String name, String desc) - { + public ObfuscationEntry lookupMcpMethod(String owner, String name, String desc) { evaluateHeirachy(owner); ClassEntry e = srgMap.get(owner); return e == null ? null : e.mcpMap.get(name.concat(desc)); } - public ObfuscationEntry lookupObfMethod(String owner, String name, String desc) - { + public ObfuscationEntry lookupObfMethod(String owner, String name, String desc) { evaluateHeirachy(owner); ClassEntry e = obfMap.get(owner); return e == null ? null : e.obfMap.get(name.concat(desc)); } - - private boolean isMapped(ObfuscationEntry desc) - { + + private boolean isMapped(ObfuscationEntry desc) { return mappedClasses.contains(desc.srg.s_owner); } - - private ObfuscationEntry getOrCreateClassEntry(String name) - { + + private ObfuscationEntry getOrCreateClassEntry(String name) { ObfuscationEntry e = lookupObfClass(name); - if(e == null) - e = lookupMcpClass(name); - if(e == null) - e = addClass(name, name);//if the class isn't in obf or srg maps, it must be a custom mod class with no name change. + if (e == null) e = lookupMcpClass(name); + if (e == null) + e = addClass( + name, + name); // if the class isn't in obf or srg maps, it must be a custom mod class with no name change. return e; } - public ObfuscationEntry evaluateHeirachy(String name) - { + public ObfuscationEntry evaluateHeirachy(String name) { ObfuscationEntry desc = getOrCreateClassEntry(name); - if(isMapped(desc)) - return desc; + if (isMapped(desc)) return desc; mappedClasses.add(desc.srg.s_owner); - if(heirachyEvaluator == null) + if (heirachyEvaluator == null) throw new IllegalArgumentException("Cannot call method/field mappings if a heirachy evaluator is not set."); - - if(!heirachyEvaluator.isLibClass(desc)) - { + + if (!heirachyEvaluator.isLibClass(desc)) { List parents = heirachyEvaluator.getParents(desc); - if(parents == null) - log.err().println("Could not find class: "+desc.srg.s_owner); - else - for(String parent : parents) - inherit(desc, evaluateHeirachy(parent)); + if (parents == null) log.err().println("Could not find class: " + desc.srg.s_owner); + else for (String parent : parents) inherit(desc, evaluateHeirachy(parent)); } - + return desc; } - public void inherit(ObfuscationEntry desc, ObfuscationEntry p_desc) - { + public void inherit(ObfuscationEntry desc, ObfuscationEntry p_desc) { inherit(desc.srg.s_owner, p_desc.srg.s_owner); } - public void inherit(String name, String parent) - { + public void inherit(String name, String parent) { ClassEntry e = srgMap.get(name); - if(e == null) - throw new IllegalStateException("Tried to inerit to an undefined class: "+name+" extends "+parent); + if (e == null) + throw new IllegalStateException("Tried to inerit to an undefined class: " + name + " extends " + parent); ClassEntry p = srgMap.get(parent); - if(p == null) - throw new IllegalStateException("Tried to inerit from undefired parent: "+name+" extends "+parent); + if (p == null) + throw new IllegalStateException("Tried to inerit from undefired parent: " + name + " extends " + parent); e.inheritFrom(p); } - - public void parseMappings(File[] mappings) - { + + public void parseMappings(File[] mappings) { parseSRGS(mappings[0]); parseCSV(mappings[1]); parseCSV(mappings[2]); } - - public static String[] splitLast(String s, char c) - { + + public static String[] splitLast(String s, char c) { int i = s.lastIndexOf(c); - return new String[]{s.substring(0, i), s.substring(i+1)}; + return new String[] {s.substring(0, i), s.substring(i + 1)}; } - - public static String[] split4(String s, char c) - { + + public static String[] split4(String s, char c) { String[] split = new String[4]; int i2 = s.indexOf(c); split[0] = s.substring(0, i2); - int i = i2+1; + int i = i2 + 1; i2 = s.indexOf(c, i); split[1] = s.substring(i, i2); - i = i2+1; + i = i2 + 1; i2 = s.indexOf(c, i); split[2] = s.substring(i, i2); - i = i2+1; + i = i2 + 1; i2 = s.indexOf(c, i); split[3] = s.substring(i); return split; } - private void parseSRGS(File srgs) - { - log.out().println("Parsing "+srgs.getName()); - - Function function = new Function() - { + private void parseSRGS(File srgs) { + log.out().println("Parsing " + srgs.getName()); + + Function function = new Function() { @Override - public Void apply(String line) - { + public Void apply(String line) { int hpos = line.indexOf('#'); - if(hpos > 0) - line = line.substring(0, hpos).trim(); - if(line.startsWith("CL: ")) - { + if (hpos > 0) line = line.substring(0, hpos).trim(); + if (line.startsWith("CL: ")) { String[] params = splitLast(line.substring(4), ' '); addClass(params[0], params[1]); - } - else if(line.startsWith("FD: ")) - { + } else if (line.startsWith("FD: ")) { String[] params = splitLast(line.substring(4), ' '); String[] p1 = splitLast(params[0], '/'); String[] p2 = splitLast(params[1], '/'); - addField(p1[0], p1[1], - p2[0], p2[1]); + addField(p1[0], p1[1], p2[0], p2[1]); return null; - } - else if(line.startsWith("MD: ")) - { + } else if (line.startsWith("MD: ")) { String[] params = split4(line.substring(4), ' '); String[] p1 = splitLast(params[0], '/'); String[] p2 = splitLast(params[2], '/'); - addMethod(p1[0], p1[1], params[1], - p2[0], p2[1], params[3]); + addMethod(p1[0], p1[1], params[1], p2[0], p2[1], params[3]); return null; } return null; } }; - + ObfuscationRun.processLines(srgs, function); } - private void parseCSV(File csv) - { - log.out().println("Parsing "+csv.getName()); - - Function function = new Function() - { + private void parseCSV(File csv) { + log.out().println("Parsing " + csv.getName()); + + Function function = new Function() { @Override - public Void apply(String line) - { - if(line.startsWith("func_") || line.startsWith("field_")) - { + public Void apply(String line) { + if (line.startsWith("func_") || line.startsWith("field_")) { int i = line.indexOf(','); String srg = line.substring(0, i); - int i2 = i+1; + int i2 = i + 1; i = line.indexOf(',', i2); String mcp = line.substring(i2, i); - + addMcpName(srg, mcp); } return null; } }; - + ObfuscationRun.processLines(csv, function); } } diff --git a/src/main/java/codechicken/obfuscator/ObfuscationRun.java b/src/main/java/codechicken/obfuscator/ObfuscationRun.java index 67e2178..9831ab1 100644 --- a/src/main/java/codechicken/obfuscator/ObfuscationRun.java +++ b/src/main/java/codechicken/obfuscator/ObfuscationRun.java @@ -1,5 +1,6 @@ package codechicken.obfuscator; +import com.google.common.base.Function; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; @@ -12,242 +13,199 @@ import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.commons.RemappingClassAdapter; import org.objectweb.asm.tree.ClassNode; -import com.google.common.base.Function; - -public class ObfuscationRun implements ILogStreams -{ +public class ObfuscationRun implements ILogStreams { public final ObfDirection obfDir; public final ObfuscationMap obf; public final ObfRemapper obfMapper; public final ConstantObfuscator cstMappper; - + public File[] mappings; public Map config; - + private PrintStream out = System.out; private PrintStream err = System.err; private PrintStream quietStream = new PrintStream(DummyOutputStream.instance); - + private boolean verbose; private boolean quiet; public boolean clean; private long startTime; private boolean finished; - - public ObfuscationRun(boolean obfuscate, File[] mappings, Map config) - { + + public ObfuscationRun(boolean obfuscate, File[] mappings, Map config) { obfDir = new ObfDirection().setObfuscate(obfuscate); this.mappings = mappings; this.config = config; - + obf = new ObfuscationMap().setLog(this); obfMapper = new ObfRemapper(obf, obfDir); - cstMappper = new ConstantObfuscator(obfMapper, - config.get("classConstantCalls").split(","), + cstMappper = new ConstantObfuscator( + obfMapper, + config.get("classConstantCalls").split(","), config.get("descConstantCalls").split(",")); } - - public ObfuscationRun setClean() - { + + public ObfuscationRun setClean() { clean = true; return this; } - - public ObfuscationRun setVerbose() - { + + public ObfuscationRun setVerbose() { verbose = true; return this; } - - public ObfuscationRun setQuiet() - { + + public ObfuscationRun setQuiet() { quiet = true; return this; } - - public ObfuscationRun setOut(PrintStream p) - { + + public ObfuscationRun setOut(PrintStream p) { out = p; return this; } - - public PrintStream out() - { + + public PrintStream out() { return quiet ? quietStream : out; } - - public PrintStream fine() - { + + public PrintStream fine() { return verbose ? out : quietStream; } - - public ObfuscationRun setErr(PrintStream p) - { + + public ObfuscationRun setErr(PrintStream p) { err = p; return this; } - - public PrintStream err() - { + + public PrintStream err() { return quiet ? quietStream : err; } - public ObfuscationRun setSearge() - { + public ObfuscationRun setSearge() { obfDir.setSearge(true); return this; } - public ObfuscationRun setSeargeConstants() - { + public ObfuscationRun setSeargeConstants() { obfDir.setSeargeConstants(true); return this; } - - public void start() - { + + public void start() { startTime = System.currentTimeMillis(); } - - public static Map fillDefaults(Map config) - { - if(!config.containsKey("excludedPackages")) - config.put("excludedPackages", "java/;sun/;javax/;scala/;" + - "argo/;org/lwjgl/;org/objectweb/;org/bouncycastle/;com/google/"); - if(!config.containsKey("ignore")) - config.put("ignore", "."); - if(!config.containsKey("classConstantCalls")) - config.put("classConstantCalls", - "codechicken/lib/asm/ObfMapping.(Ljava/lang/String;)V," + - "codechicken/lib/asm/ObfMapping.subclass(Ljava/lang/String;)Lcodechicken/lib/asm/ObfMapping;," + - "codechicken/lib/asm/ObfMapping.(Lcodechicken/lib/asm/ObfMapping;Ljava/lang/String;)V"); - if(!config.containsKey("descConstantCalls")) - config.put("descConstantCalls", - "codechicken/lib/asm/ObfMapping.(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V," + - "org/objectweb/asm/MethodVisitor.visitFieldInsn(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V," + - "org/objectweb/asm/tree/MethodNode.visitFieldInsn(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V," + - "org/objectweb/asm/MethodVisitor.visitMethodInsn(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V," + - "org/objectweb/asm/tree/MethodNode.visitMethodInsn(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V," + - "org/objectweb/asm/tree/MethodInsnNode.(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V," + - "org/objectweb/asm/tree/FieldInsnNode.(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"); - + + public static Map fillDefaults(Map config) { + if (!config.containsKey("excludedPackages")) + config.put( + "excludedPackages", + "java/;sun/;javax/;scala/;" + "argo/;org/lwjgl/;org/objectweb/;org/bouncycastle/;com/google/"); + if (!config.containsKey("ignore")) config.put("ignore", "."); + if (!config.containsKey("classConstantCalls")) + config.put( + "classConstantCalls", + "codechicken/lib/asm/ObfMapping.(Ljava/lang/String;)V," + + "codechicken/lib/asm/ObfMapping.subclass(Ljava/lang/String;)Lcodechicken/lib/asm/ObfMapping;," + + "codechicken/lib/asm/ObfMapping.(Lcodechicken/lib/asm/ObfMapping;Ljava/lang/String;)V"); + if (!config.containsKey("descConstantCalls")) + config.put( + "descConstantCalls", + "codechicken/lib/asm/ObfMapping.(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V," + + "org/objectweb/asm/MethodVisitor.visitFieldInsn(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V," + + "org/objectweb/asm/tree/MethodNode.visitFieldInsn(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V," + + "org/objectweb/asm/MethodVisitor.visitMethodInsn(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V," + + "org/objectweb/asm/tree/MethodNode.visitMethodInsn(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V," + + "org/objectweb/asm/tree/MethodInsnNode.(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V," + + "org/objectweb/asm/tree/FieldInsnNode.(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"); + return config; } - public static void processLines(File file, Function function) - { - try - { + public static void processLines(File file, Function function) { + try { BufferedReader reader = new BufferedReader(new FileReader(file)); String line; - while((line = reader.readLine()) != null) - function.apply(line); + while ((line = reader.readLine()) != null) function.apply(line); reader.close(); - } - catch(Exception e) - { + } catch (Exception e) { throw new RuntimeException(e); } } - - public static void processFiles(File dir, Function function, boolean recursive) - { - for(File file : dir.listFiles()) - if(file.isDirectory() && recursive) - processFiles(file, function, recursive); - else - function.apply(file); + + public static void processFiles(File dir, Function function, boolean recursive) { + for (File file : dir.listFiles()) + if (file.isDirectory() && recursive) processFiles(file, function, recursive); + else function.apply(file); } - - public static void deleteDir(File directory, boolean remove) - { - if(!directory.exists()) - { - if(!remove)directory.mkdirs(); + + public static void deleteDir(File directory, boolean remove) { + if (!directory.exists()) { + if (!remove) directory.mkdirs(); return; } - for(File file : directory.listFiles()) - { - if(file.isDirectory()) - { + for (File file : directory.listFiles()) { + if (file.isDirectory()) { deleteDir(file, true); - } - else - { - if(!file.delete()) - throw new RuntimeException("Delete Failed: "+file); + } else { + if (!file.delete()) throw new RuntimeException("Delete Failed: " + file); } } - if(remove) - { - if(!directory.delete()) - throw new RuntimeException("Delete Failed: "+directory); + if (remove) { + if (!directory.delete()) throw new RuntimeException("Delete Failed: " + directory); } } - + public static File[] parseConfDir(File confDir) { File srgDir = new File(confDir, "conf"); - if(!srgDir.exists()) - srgDir = confDir; - + if (!srgDir.exists()) srgDir = confDir; + File srgs = new File(srgDir, "packaged.srg"); - if(!srgs.exists()) - srgs = new File(srgDir, "joined.srg"); - if(!srgs.exists()) - throw new RuntimeException("Could not find packaged.srg or joined.srg"); - + if (!srgs.exists()) srgs = new File(srgDir, "joined.srg"); + if (!srgs.exists()) throw new RuntimeException("Could not find packaged.srg or joined.srg"); + File mapDir = new File(confDir, "mappings"); - if(!mapDir.exists()) - mapDir = confDir; - + if (!mapDir.exists()) mapDir = confDir; + File methods = new File(mapDir, "methods.csv"); - if(!methods.exists()) - throw new RuntimeException("Could not find methods.csv"); + if (!methods.exists()) throw new RuntimeException("Could not find methods.csv"); File fields = new File(mapDir, "fields.csv"); - if(!fields.exists()) - throw new RuntimeException("Could not find fields.csv"); - - return new File[]{srgs, methods, fields}; + if (!fields.exists()) throw new RuntimeException("Could not find fields.csv"); + + return new File[] {srgs, methods, fields}; } - - public long startTime() - { + + public long startTime() { return startTime; } - public void remap(ClassNode cnode, ClassVisitor cv) - { + public void remap(ClassNode cnode, ClassVisitor cv) { cstMappper.transform(cnode); cnode.accept(new RemappingClassAdapter(cv, obfMapper)); } - public static List getParents(ClassNode cnode) - { + public static List getParents(ClassNode cnode) { List parents = new LinkedList(); - if(cnode.superName != null) - parents.add(cnode.superName); - - for(String s_interface : cnode.interfaces) - parents.add(s_interface); - + if (cnode.superName != null) parents.add(cnode.superName); + + for (String s_interface : cnode.interfaces) parents.add(s_interface); + return parents; } - public void finish(boolean errored) - { - long millis = System.currentTimeMillis()-startTime; - out().println((errored ? "Errored after" : "Done in ")+new DecimalFormat("0.00").format(millis/1000D)+"s"); + public void finish(boolean errored) { + long millis = System.currentTimeMillis() - startTime; + out().println((errored ? "Errored after" : "Done in ") + new DecimalFormat("0.00").format(millis / 1000D) + + "s"); finished = true; } - - public boolean finished() - { + + public boolean finished() { return finished; } - public void parseMappings() - { + public void parseMappings() { obf.parseMappings(mappings); } } diff --git a/src/main/java/codechicken/obfuscator/SystemLogStreams.java b/src/main/java/codechicken/obfuscator/SystemLogStreams.java index 1da29e2..aaddd2a 100644 --- a/src/main/java/codechicken/obfuscator/SystemLogStreams.java +++ b/src/main/java/codechicken/obfuscator/SystemLogStreams.java @@ -2,19 +2,16 @@ package codechicken.obfuscator; import java.io.PrintStream; -public class SystemLogStreams implements ILogStreams -{ +public class SystemLogStreams implements ILogStreams { public static SystemLogStreams inst = new SystemLogStreams(); - + @Override - public PrintStream err() - { + public PrintStream err() { return System.err; } - + @Override - public PrintStream out() - { + public PrintStream out() { return System.out; } }