From ad86d8f9c53fc70bc6ab9c7a082525b9fe416c8c Mon Sep 17 00:00:00 2001 From: miozune Date: Mon, 8 May 2023 03:10:18 +0900 Subject: [PATCH] Separate logic to get detailed string of fluid amount (#378) * Separate logic to get detailed string of fluid amount * updateBuildScript & spotlessApply * probably better way --- build.gradle | 158 ++++++------------ .../java/codechicken/nei/BookmarkPanel.java | 10 +- .../java/codechicken/nei/ClientHandler.java | 5 +- src/main/java/codechicken/nei/ItemList.java | 6 +- .../java/codechicken/nei/NEIClientConfig.java | 4 +- .../java/codechicken/nei/NEIClientUtils.java | 4 +- .../java/codechicken/nei/NEIModContainer.java | 7 +- .../java/codechicken/nei/PresetsWidget.java | 10 +- .../codechicken/nei/ThreadOperationTimer.java | 1 + src/main/java/codechicken/nei/api/API.java | 4 +- .../java/codechicken/nei/api/ItemInfo.java | 5 +- .../codechicken/nei/config/HandlerDumper.java | 4 +- .../nei/config/OptionStringSet.java | 6 +- .../nei/guihook/GuiContainerManager.java | 47 ++++-- .../nei/recipe/BookmarkRecipeId.java | 6 +- .../nei/recipe/CatalystInfoList.java | 4 +- .../nei/recipe/RecipeCatalysts.java | 4 +- .../codechicken/nei/recipe/RecipeInfo.java | 4 +- .../nei/recipe/TemplateRecipeHandler.java | 4 +- 19 files changed, 126 insertions(+), 167 deletions(-) diff --git a/build.gradle b/build.gradle index 055dcee4..e8241eea 100644 --- a/build.gradle +++ b/build.gradle @@ -1,4 +1,4 @@ -//version: 1680120787 +//version: 1683373797 /* DO NOT CHANGE THIS FILE! Also, you may replace this file at any time if there is an update available. @@ -6,29 +6,25 @@ */ -import com.diffplug.blowdryer.Blowdryer -import com.github.jengelman.gradle.plugins.shadow.tasks.ConfigureShadowRelocation import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar import com.gtnewhorizons.retrofuturagradle.ObfuscationAttribute import com.gtnewhorizons.retrofuturagradle.mcp.ReobfuscatedJar import com.gtnewhorizons.retrofuturagradle.minecraft.RunMinecraftTask +import com.gtnewhorizons.retrofuturagradle.util.Distribution import com.matthewprenger.cursegradle.CurseArtifact import com.matthewprenger.cursegradle.CurseRelation import com.modrinth.minotaur.dependencies.ModDependency import com.modrinth.minotaur.dependencies.VersionDependency -import cpw.mods.fml.relauncher.Side -import org.gradle.api.tasks.options.Option; import org.gradle.internal.logging.text.StyledTextOutput.Style import org.gradle.internal.logging.text.StyledTextOutputFactory import org.gradle.internal.xml.XmlTransformer -import org.jetbrains.gradle.ext.* +import org.jetbrains.gradle.ext.Application +import org.jetbrains.gradle.ext.Gradle +import javax.inject.Inject import java.nio.file.Files import java.nio.file.Paths import java.util.concurrent.TimeUnit -import java.util.zip.ZipEntry -import java.util.zip.ZipOutputStream -import javax.inject.Inject buildscript { repositories { @@ -66,21 +62,25 @@ plugins { id 'org.jetbrains.kotlin.kapt' version '1.8.0' apply false id 'com.google.devtools.ksp' version '1.8.0-1.0.9' apply false id 'org.ajoberstar.grgit' version '4.1.1' // 4.1.1 is the last jvm8 supporting version, unused, available for addon.gradle - id 'com.github.johnrengelman.shadow' version '7.1.2' apply false - id 'com.palantir.git-version' version '0.13.0' apply false // 0.13.0 is the last jvm8 supporting version - id 'de.undercouch.download' version '5.3.0' + id 'com.github.johnrengelman.shadow' version '8.1.1' apply false + id 'com.palantir.git-version' version '3.0.0' apply false + id 'de.undercouch.download' version '5.4.0' id 'com.github.gmazzo.buildconfig' version '3.1.0' apply false // Unused, available for addon.gradle - id 'com.diffplug.spotless' version '6.7.2' apply false + id 'com.diffplug.spotless' version '6.13.0' apply false // 6.13.0 is the last jvm8 supporting version id 'com.modrinth.minotaur' version '2.+' apply false id 'com.matthewprenger.cursegradle' version '1.4.0' apply false - id 'com.gtnewhorizons.retrofuturagradle' version '1.2.4' + id 'com.gtnewhorizons.retrofuturagradle' version '1.3.7' } + +print("You might want to check out './gradlew :faq' if your build fails.\n") + boolean settingsupdated = verifySettingsGradle() settingsupdated = verifyGitAttributes() || settingsupdated if (settingsupdated) throw new GradleException("Settings has been updated, please re-run task.") -if (project.file('.git/HEAD').isFile()) { +// In submodules, .git is a file pointing to the real git dir +if (project.file('.git/HEAD').isFile() || project.file('.git').isFile()) { apply plugin: 'com.palantir.git-version' } @@ -132,7 +132,7 @@ propertyDefaultIfUnset("enableGenericInjection", false) // On by default for new // this is meant to be set using the user wide property file. by default we do nothing. propertyDefaultIfUnset("ideaOverrideBuildType", "") // Can be nothing, "gradle" or "idea" -project.extensions.add(Blowdryer, "Blowdryer", Blowdryer) // Make blowdryer available in "apply from:" scripts +project.extensions.add(com.diffplug.blowdryer.Blowdryer, "Blowdryer", com.diffplug.blowdryer.Blowdryer) // Make blowdryer available in "apply from:" scripts if (!disableSpotless) { apply plugin: 'com.diffplug.spotless' apply from: Blowdryer.file('spotless.gradle') @@ -201,6 +201,14 @@ configurations { canBeConsumed = false canBeResolved = false } + + create("devOnlyNonPublishable") { + description = "Runtime and compiletime dependencies that are not published alongside the jar (compileOnly + runtimeOnlyNonPublishable)" + canBeConsumed = false + canBeResolved = false + } + compileOnly.extendsFrom(devOnlyNonPublishable) + runtimeOnlyNonPublishable.extendsFrom(devOnlyNonPublishable) } if (enableModernJavaSyntax.toBoolean()) { @@ -214,6 +222,8 @@ if (enableModernJavaSyntax.toBoolean()) { dependencies { annotationProcessor 'com.github.bsideup.jabel:jabel-javac-plugin:1.0.0' + // workaround for https://github.com/bsideup/jabel/issues/174 + annotationProcessor 'net.java.dev.jna:jna-platform:5.13.0' compileOnly('com.github.bsideup.jabel:jabel-javac-plugin:1.0.0') { transitive = false // We only care about the 1 annotation class } @@ -399,7 +409,7 @@ minecraft { username = developmentEnvironmentUserName.toString() - lwjgl3Version = "3.3.2-SNAPSHOT" + lwjgl3Version = "3.3.2" // Enable assertions in the current mod extraRunJvmArguments.add("-ea:${modGroup}") @@ -713,13 +723,13 @@ ext.java17PatchDependenciesCfg = configurations.create("java17PatchDependencies" } dependencies { - def lwjgl3ifyVersion = '1.3.3' + def lwjgl3ifyVersion = '1.3.5' def asmVersion = '9.4' if (modId != 'lwjgl3ify') { java17Dependencies("com.github.GTNewHorizons:lwjgl3ify:${lwjgl3ifyVersion}") } if (modId != 'hodgepodge') { - java17Dependencies('com.github.GTNewHorizons:Hodgepodge:2.2.4') + java17Dependencies('com.github.GTNewHorizons:Hodgepodge:2.2.8') } java17PatchDependencies('net.minecraft:launchwrapper:1.15') {transitive = false} @@ -793,7 +803,7 @@ public abstract class RunHotswappableMinecraftTask extends RunMinecraftTask { public boolean setEnableHotswap(boolean enable) { enableHotswap = enable } @Inject - public RunHotswappableMinecraftTask(Side side, String superTask, org.gradle.api.invocation.Gradle gradle) { + public RunHotswappableMinecraftTask(Distribution side, String superTask, org.gradle.api.invocation.Gradle gradle) { super(side, gradle) this.lwjglVersion = 3 @@ -802,7 +812,7 @@ public abstract class RunHotswappableMinecraftTask extends RunMinecraftTask { this.extraJvmArgs.addAll(project.provider(() -> enableHotswap ? project.hotswapJvmArgs : [])) this.classpath(project.java17PatchDependenciesCfg) - if (side == Side.CLIENT) { + if (side == Distribution.CLIENT) { this.classpath(project.minecraftTasks.lwjgl3Configuration) } // Use a raw provider instead of map to not create a dependency on the task @@ -814,7 +824,7 @@ public abstract class RunHotswappableMinecraftTask extends RunMinecraftTask { } } -def runClient17Task = tasks.register("runClient17", RunHotswappableMinecraftTask, Side.CLIENT, "runClient") +def runClient17Task = tasks.register("runClient17", RunHotswappableMinecraftTask, Distribution.CLIENT, "runClient") runClient17Task.configure { setup(project) group = "Modded Minecraft" @@ -825,7 +835,7 @@ runClient17Task.configure { userUUID = minecraft.userUUID } -def runServer17Task = tasks.register("runServer17", RunHotswappableMinecraftTask, Side.SERVER, "runServer") +def runServer17Task = tasks.register("runServer17", RunHotswappableMinecraftTask, Distribution.DEDICATED_SERVER, "runServer") runServer17Task.configure { setup(project) group = "Modded Minecraft" @@ -866,11 +876,6 @@ tasks.named("jar", Jar).configure { } if (usesShadowedDependencies.toBoolean()) { - tasks.register('relocateShadowJar', ConfigureShadowRelocation) { - target = tasks.shadowJar - prefix = modGroup + ".shadow" - enabled = relocateShadowedDependencies.toBoolean() - } tasks.named("shadowJar", ShadowJar).configure { manifest { attributes(getManifestAttributes()) @@ -886,7 +891,8 @@ if (usesShadowedDependencies.toBoolean()) { ] archiveClassifier.set('dev') if (relocateShadowedDependencies.toBoolean()) { - dependsOn(relocateShadowJar) + relocationPrefix = modGroup + ".shadow" + enableRelocation = true } } configurations.runtimeElements.outgoing.artifacts.clear() @@ -1219,7 +1225,7 @@ def addCurseForgeRelation(String type, String name) { // Updating -def buildscriptGradleVersion = "8.0.2" +def buildscriptGradleVersion = "8.1.1" tasks.named('wrapper', Wrapper).configure { gradleVersion = buildscriptGradleVersion @@ -1251,6 +1257,19 @@ if (!project.getGradle().startParameter.isOffline() && !Boolean.getBoolean('DISA } } +// If you want to add more cases to this task, implement them as arguments if total amount to print gets too large +tasks.register('faq') { + group = 'GTNH Buildscript' + description = 'Prints frequently asked questions about building a project' + + doLast { + print("If your build fails to fetch dependencies, they might have been deleted and replaced by newer " + + "versions.\nCheck if the versions you try to fetch are still on the distributing sites.\n" + + "The links can be found in repositories.gradle and build.gradle:repositories, " + + "not build.gradle:buildscript.repositories - this one is for gradle plugin metadata.") + } +} + static URL availableBuildScriptUrl() { new URL("https://raw.githubusercontent.com/GTNewHorizons/ExampleMod1.7.10/master/build.gradle") } @@ -1388,7 +1407,7 @@ static int replaceParams(File file, Map params) { return 0 } -// Dependency Deobfuscation +// Dependency Deobfuscation (Deprecated, use the new RFG API documented in dependencies.gradle) def deobf(String sourceURL) { try { @@ -1430,11 +1449,7 @@ def deobfMaven(String repoURL, String mavenDep) { } def deobfCurse(String curseDep) { - try { - return deobfMaven("https://www.cursemaven.com/", "curse.maven:$curseDep") - } catch (Exception ignored) { - out.style(Style.Failure).println("Failed to get $curseDep from cursemaven.") - } + return dependencies.rfg.deobf("curse.maven:$curseDep") } // The method above is to be preferred. Use this method if the filename is not at the end of the URL. @@ -1442,34 +1457,7 @@ 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()) { - 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 "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 - } download.run { src sourceURL @@ -1477,50 +1465,8 @@ def deobf(String sourceURL, String rawFileName) { quiet true overwrite false } - - exec { - commandLine 'java', '-jar', bon2File, '--inputJar', obfFile, '--outputJar', deobfFile, '--mcVer', minecraftVersion, '--mappingsVer', mappingsVer, '--notch' - workingDir bon2Dir - standardOutput = new FileOutputStream("${deobfFile}.log") - } - - return files(deobfFile) + return dependencies.rfg.deobf(files(obfFile)) } - -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/src/main/java/codechicken/nei/BookmarkPanel.java b/src/main/java/codechicken/nei/BookmarkPanel.java index ddcb2fe9..0b4671b2 100644 --- a/src/main/java/codechicken/nei/BookmarkPanel.java +++ b/src/main/java/codechicken/nei/BookmarkPanel.java @@ -24,6 +24,11 @@ import net.minecraft.nbt.NBTTagCompound; import org.apache.commons.io.IOUtils; import org.lwjgl.opengl.GL11; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSyntaxException; + import codechicken.core.CommonUtils; import codechicken.lib.vec.Rectangle4i; import codechicken.nei.ItemPanel.ItemPanelSlot; @@ -33,11 +38,6 @@ import codechicken.nei.recipe.StackInfo; import codechicken.nei.util.NBTJson; import codechicken.nei.util.ReadableNumberConverter; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import com.google.gson.JsonPrimitive; -import com.google.gson.JsonSyntaxException; - public class BookmarkPanel extends PanelWidget { protected File bookmarkFile; diff --git a/src/main/java/codechicken/nei/ClientHandler.java b/src/main/java/codechicken/nei/ClientHandler.java index 401fe28c..42cd90ba 100644 --- a/src/main/java/codechicken/nei/ClientHandler.java +++ b/src/main/java/codechicken/nei/ClientHandler.java @@ -37,6 +37,8 @@ import org.apache.commons.csv.CSVParser; import org.apache.commons.csv.CSVRecord; import org.apache.commons.io.IOUtils; +import com.google.common.collect.Lists; + import codechicken.core.ClientUtils; import codechicken.core.GuiModListScroll; import codechicken.lib.packet.PacketCustom; @@ -44,9 +46,6 @@ import codechicken.nei.api.API; import codechicken.nei.api.ItemInfo; import codechicken.nei.recipe.GuiRecipeTab; import codechicken.nei.recipe.StackInfo; - -import com.google.common.collect.Lists; - import cpw.mods.fml.client.CustomModLoadingErrorDisplayException; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.Loader; diff --git a/src/main/java/codechicken/nei/ItemList.java b/src/main/java/codechicken/nei/ItemList.java index deca7e4c..8ca7c97a 100644 --- a/src/main/java/codechicken/nei/ItemList.java +++ b/src/main/java/codechicken/nei/ItemList.java @@ -13,15 +13,15 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.ListMultimap; + import codechicken.nei.ThreadOperationTimer.TimeoutException; import codechicken.nei.api.ItemFilter; import codechicken.nei.api.ItemFilter.ItemFilterProvider; import codechicken.nei.api.ItemInfo; import codechicken.nei.guihook.GuiContainerManager; -import com.google.common.collect.ArrayListMultimap; -import com.google.common.collect.ListMultimap; - public class ItemList { /** diff --git a/src/main/java/codechicken/nei/NEIClientConfig.java b/src/main/java/codechicken/nei/NEIClientConfig.java index de4a0a0b..0d039b21 100644 --- a/src/main/java/codechicken/nei/NEIClientConfig.java +++ b/src/main/java/codechicken/nei/NEIClientConfig.java @@ -21,6 +21,8 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.lwjgl.input.Keyboard; +import com.google.common.base.Objects; + import codechicken.core.CCUpdateChecker; import codechicken.core.ClassDiscoverer; import codechicken.core.ClientUtils; @@ -53,8 +55,6 @@ import codechicken.nei.recipe.RecipeCatalysts; import codechicken.nei.recipe.RecipeInfo; import codechicken.obfuscator.ObfuscationRun; -import com.google.common.base.Objects; - public class NEIClientConfig { private static boolean configLoaded; diff --git a/src/main/java/codechicken/nei/NEIClientUtils.java b/src/main/java/codechicken/nei/NEIClientUtils.java index 043e6f78..5af02ff9 100644 --- a/src/main/java/codechicken/nei/NEIClientUtils.java +++ b/src/main/java/codechicken/nei/NEIClientUtils.java @@ -43,6 +43,8 @@ import net.minecraft.util.ResourceLocation; import org.lwjgl.input.Keyboard; +import com.google.common.collect.Iterables; + import codechicken.lib.inventory.InventoryRange; import codechicken.lib.inventory.InventoryUtils; import codechicken.lib.util.LangProxy; @@ -50,8 +52,6 @@ import codechicken.nei.api.GuiInfo; import codechicken.nei.api.IInfiniteItemHandler; import codechicken.nei.api.ItemInfo; -import com.google.common.collect.Iterables; - public class NEIClientUtils extends NEIServerUtils { public static LangProxy lang = new LangProxy("nei"); diff --git a/src/main/java/codechicken/nei/NEIModContainer.java b/src/main/java/codechicken/nei/NEIModContainer.java index 45842911..27b648e0 100644 --- a/src/main/java/codechicken/nei/NEIModContainer.java +++ b/src/main/java/codechicken/nei/NEIModContainer.java @@ -5,16 +5,15 @@ import java.util.*; import net.minecraft.util.EnumChatFormatting; +import com.google.common.eventbus.EventBus; +import com.google.common.eventbus.Subscribe; + import codechicken.core.CommonUtils; import codechicken.core.launch.CodeChickenCorePlugin; import codechicken.nei.api.IConfigureNEI; import codechicken.nei.asm.NEICorePlugin; import codechicken.nei.config.IMCHandler; import codechicken.nei.recipe.GuiRecipeTab; - -import com.google.common.eventbus.EventBus; -import com.google.common.eventbus.Subscribe; - import cpw.mods.fml.client.FMLFileResourcePack; import cpw.mods.fml.client.FMLFolderResourcePack; import cpw.mods.fml.common.DummyModContainer; diff --git a/src/main/java/codechicken/nei/PresetsWidget.java b/src/main/java/codechicken/nei/PresetsWidget.java index c459ae70..55265fd4 100644 --- a/src/main/java/codechicken/nei/PresetsWidget.java +++ b/src/main/java/codechicken/nei/PresetsWidget.java @@ -21,6 +21,11 @@ import net.minecraft.item.ItemStack; import org.apache.commons.io.IOUtils; import org.lwjgl.input.Keyboard; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSyntaxException; + import codechicken.core.CommonUtils; import codechicken.core.gui.GuiScrollSlot; import codechicken.lib.gui.GuiDraw; @@ -30,11 +35,6 @@ import codechicken.nei.api.ItemFilter; import codechicken.nei.recipe.GuiRecipe; import codechicken.nei.recipe.StackInfo; import codechicken.nei.util.NBTJson; - -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import com.google.gson.JsonPrimitive; -import com.google.gson.JsonSyntaxException; import cpw.mods.fml.common.registry.GameRegistry; public class PresetsWidget extends Widget { diff --git a/src/main/java/codechicken/nei/ThreadOperationTimer.java b/src/main/java/codechicken/nei/ThreadOperationTimer.java index e0e6979a..7727566b 100644 --- a/src/main/java/codechicken/nei/ThreadOperationTimer.java +++ b/src/main/java/codechicken/nei/ThreadOperationTimer.java @@ -1,6 +1,7 @@ package codechicken.nei; import com.google.common.base.Objects; + import cpw.mods.fml.common.FMLCommonHandler; public class ThreadOperationTimer extends Thread { diff --git a/src/main/java/codechicken/nei/api/API.java b/src/main/java/codechicken/nei/api/API.java index 394c6bfc..775d33ed 100644 --- a/src/main/java/codechicken/nei/api/API.java +++ b/src/main/java/codechicken/nei/api/API.java @@ -12,6 +12,8 @@ import net.minecraft.item.ItemStack; import org.lwjgl.input.Keyboard; +import com.google.common.collect.Sets; + import codechicken.nei.ItemList; import codechicken.nei.ItemSorter; import codechicken.nei.ItemStackSet; @@ -37,8 +39,6 @@ import codechicken.nei.recipe.RecipeCatalysts; import codechicken.nei.recipe.RecipeInfo; import codechicken.nei.recipe.StackInfo; -import com.google.common.collect.Sets; - /** * This is the main class that handles item property configuration. WARNING: DO NOT access this class until the world * has been loaded These methods should be called from INEIConfig implementors diff --git a/src/main/java/codechicken/nei/api/ItemInfo.java b/src/main/java/codechicken/nei/api/ItemInfo.java index a3e584ad..4accd9c2 100644 --- a/src/main/java/codechicken/nei/api/ItemInfo.java +++ b/src/main/java/codechicken/nei/api/ItemInfo.java @@ -39,6 +39,8 @@ import net.minecraftforge.common.BiomeDictionary; import net.minecraftforge.common.IShearable; import net.minecraftforge.oredict.OreDictionary; +import com.google.common.collect.ArrayListMultimap; + import codechicken.core.featurehack.GameDataManipulator; import codechicken.nei.InfiniteStackSizeHandler; import codechicken.nei.InfiniteToolHandler; @@ -55,9 +57,6 @@ import codechicken.nei.config.RegistryDumper; import codechicken.nei.guihook.GuiContainerManager; import codechicken.nei.recipe.BrewingRecipeHandler; import codechicken.nei.recipe.RecipeItemInputHandler; - -import com.google.common.collect.ArrayListMultimap; - import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.ModContainer; import cpw.mods.fml.common.registry.GameRegistry; diff --git a/src/main/java/codechicken/nei/config/HandlerDumper.java b/src/main/java/codechicken/nei/config/HandlerDumper.java index 6ba90e0a..13d57645 100644 --- a/src/main/java/codechicken/nei/config/HandlerDumper.java +++ b/src/main/java/codechicken/nei/config/HandlerDumper.java @@ -10,6 +10,8 @@ import net.minecraft.util.ChatComponentTranslation; import org.apache.commons.io.IOUtils; +import com.google.common.base.Objects; + import codechicken.nei.NEIClientConfig; import codechicken.nei.recipe.GuiRecipeTab; import codechicken.nei.recipe.GuiUsageRecipe; @@ -18,8 +20,6 @@ import codechicken.nei.recipe.IRecipeHandler; import codechicken.nei.recipe.TemplateRecipeHandler; import codechicken.nei.util.NBTJson; -import com.google.common.base.Objects; - public class HandlerDumper extends DataDumper { public HandlerDumper(String name) { diff --git a/src/main/java/codechicken/nei/config/OptionStringSet.java b/src/main/java/codechicken/nei/config/OptionStringSet.java index 787a6304..9afa3196 100644 --- a/src/main/java/codechicken/nei/config/OptionStringSet.java +++ b/src/main/java/codechicken/nei/config/OptionStringSet.java @@ -8,12 +8,12 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; -import codechicken.lib.vec.Rectangle4i; -import codechicken.nei.LayoutManager; - import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; +import codechicken.lib.vec.Rectangle4i; +import codechicken.nei.LayoutManager; + public abstract class OptionStringSet extends Option { public final LinkedList options = new LinkedList<>(); diff --git a/src/main/java/codechicken/nei/guihook/GuiContainerManager.java b/src/main/java/codechicken/nei/guihook/GuiContainerManager.java index 00400a16..31185ae2 100644 --- a/src/main/java/codechicken/nei/guihook/GuiContainerManager.java +++ b/src/main/java/codechicken/nei/guihook/GuiContainerManager.java @@ -14,6 +14,8 @@ import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; import java.util.regex.Pattern; +import javax.annotation.Nullable; + import net.minecraft.client.Minecraft; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.GuiScreen; @@ -159,33 +161,21 @@ public class GuiContainerManager { return namelist; } - public static String itemCountDetails(ItemStack stack) { - final FluidStack fluid = StackInfo.getFluid(stack); - int maxStackSize = stack.getMaxStackSize(); - int stackSize = stack.stackSize; - String FULL_PATTERN = "Count: %s = %s * %s + %s"; - String SHORT_PATTERN = "Count: %s = %s * %s"; - - if (fluid != null) { - maxStackSize = 144; - stackSize = fluid.amount * Math.max(1, stack.stackSize); - FULL_PATTERN = "Amount: %s L = %s * %s L + %s L"; - SHORT_PATTERN = "Amount: %s L = %s * %s L"; - } - + @Nullable + public static String countDetails(int stackSize, int maxStackSize, String fullPattern, String shortPattern) { if (maxStackSize > 1 && stackSize > maxStackSize) { final int remainder = stackSize % maxStackSize; if (remainder > 0) { return String.format( - FULL_PATTERN, + fullPattern, NEIClientUtils.formatNumbers(stackSize), NEIClientUtils.formatNumbers(stackSize / maxStackSize), NEIClientUtils.formatNumbers(maxStackSize), NEIClientUtils.formatNumbers(remainder)); } else { return String.format( - SHORT_PATTERN, + shortPattern, NEIClientUtils.formatNumbers(stackSize), NEIClientUtils.formatNumbers(stackSize / maxStackSize), NEIClientUtils.formatNumbers(maxStackSize)); @@ -195,6 +185,31 @@ public class GuiContainerManager { return null; } + @Nullable + public static String itemCountDetails(ItemStack stack) { + FluidStack fluid = StackInfo.getFluid(stack); + if (fluid != null) { + return fluidAmountDetails(fluid.amount * Math.max(1, stack.stackSize)); + } else { + return countDetails( + stack.stackSize, + stack.getMaxStackSize(), + "Count: %s = %s * %s + %s", + "Count: %s = %s * %s"); + } + } + + @SuppressWarnings("unused") + @Nullable + public static String fluidAmountDetails(FluidStack fluid) { + return fluidAmountDetails(fluid.amount); + } + + @Nullable + public static String fluidAmountDetails(int amount) { + return countDetails(amount, 144, "Amount: %s L = %s * %s L + %s L", "Amount: %s L = %s * %s L"); + } + /** * The general name of this item. * diff --git a/src/main/java/codechicken/nei/recipe/BookmarkRecipeId.java b/src/main/java/codechicken/nei/recipe/BookmarkRecipeId.java index d43d3a3f..beac2cc8 100644 --- a/src/main/java/codechicken/nei/recipe/BookmarkRecipeId.java +++ b/src/main/java/codechicken/nei/recipe/BookmarkRecipeId.java @@ -6,14 +6,14 @@ import java.util.List; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import codechicken.nei.PositionedStack; -import codechicken.nei.util.NBTJson; - import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; +import codechicken.nei.PositionedStack; +import codechicken.nei.util.NBTJson; + public class BookmarkRecipeId { public int position = -1; diff --git a/src/main/java/codechicken/nei/recipe/CatalystInfoList.java b/src/main/java/codechicken/nei/recipe/CatalystInfoList.java index 291f092e..255dec19 100644 --- a/src/main/java/codechicken/nei/recipe/CatalystInfoList.java +++ b/src/main/java/codechicken/nei/recipe/CatalystInfoList.java @@ -8,11 +8,11 @@ import javax.annotation.Nonnull; import net.minecraft.item.ItemStack; +import com.google.common.collect.ForwardingList; + import codechicken.nei.NEIClientConfig; import codechicken.nei.NEIServerUtils; -import com.google.common.collect.ForwardingList; - // Do not directly extend ArrayList, see Effective Java Item 16 public class CatalystInfoList extends ForwardingList { diff --git a/src/main/java/codechicken/nei/recipe/RecipeCatalysts.java b/src/main/java/codechicken/nei/recipe/RecipeCatalysts.java index 5c7afea2..883d500c 100644 --- a/src/main/java/codechicken/nei/recipe/RecipeCatalysts.java +++ b/src/main/java/codechicken/nei/recipe/RecipeCatalysts.java @@ -24,11 +24,11 @@ import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVParser; import org.apache.commons.csv.CSVRecord; +import com.google.common.base.Objects; + import codechicken.nei.NEIClientConfig; import codechicken.nei.NEIServerUtils; import codechicken.nei.PositionedStack; - -import com.google.common.base.Objects; import cpw.mods.fml.common.Loader; public class RecipeCatalysts { diff --git a/src/main/java/codechicken/nei/recipe/RecipeInfo.java b/src/main/java/codechicken/nei/recipe/RecipeInfo.java index 2cdeafa9..75ad591f 100644 --- a/src/main/java/codechicken/nei/recipe/RecipeInfo.java +++ b/src/main/java/codechicken/nei/recipe/RecipeInfo.java @@ -8,13 +8,13 @@ import net.minecraft.client.gui.inventory.GuiCrafting; import net.minecraft.client.gui.inventory.GuiFurnace; import net.minecraft.client.gui.inventory.GuiInventory; +import com.google.common.base.Objects; + import codechicken.nei.OffsetPositioner; import codechicken.nei.api.API; import codechicken.nei.api.IOverlayHandler; import codechicken.nei.api.IStackPositioner; -import com.google.common.base.Objects; - public class RecipeInfo { private static class OverlayKey { diff --git a/src/main/java/codechicken/nei/recipe/TemplateRecipeHandler.java b/src/main/java/codechicken/nei/recipe/TemplateRecipeHandler.java index 80cd8d65..5e0255dd 100644 --- a/src/main/java/codechicken/nei/recipe/TemplateRecipeHandler.java +++ b/src/main/java/codechicken/nei/recipe/TemplateRecipeHandler.java @@ -29,6 +29,8 @@ import net.minecraft.tileentity.TileEntityFurnace; import org.lwjgl.opengl.GL11; +import com.google.common.base.Stopwatch; + import codechicken.lib.vec.Rectangle4i; import codechicken.nei.ItemList; import codechicken.nei.NEIClientConfig; @@ -43,8 +45,6 @@ import codechicken.nei.guihook.GuiContainerManager; import codechicken.nei.guihook.IContainerInputHandler; import codechicken.nei.guihook.IContainerTooltipHandler; -import com.google.common.base.Stopwatch; - /** * A Template Recipe Handler! How about that. Because it was sooo hard, and more seriously required lots of copied code * to make a handler in the past. you can now extend this class to make your custom recipe handlers much easier to