From 71d431d2b7cc8519d64f228ad12e61c5869320f2 Mon Sep 17 00:00:00 2001 From: ReCore Date: Mon, 6 Jul 2026 10:21:33 +0930 Subject: [PATCH 1/2] Added env var configs Also auto-downloading JVM --- build.gradle | 1 + settings.gradle | 3 + .../com/steelextractor/SteelExtractor.kt | 84 ++++++++++++------- 3 files changed, 56 insertions(+), 32 deletions(-) diff --git a/build.gradle b/build.gradle index df15e5a..8c20edb 100644 --- a/build.gradle +++ b/build.gradle @@ -60,6 +60,7 @@ processResources { java { toolchain { languageVersion = JavaLanguageVersion.of(25) + vendor = JvmVendorSpec.ADOPTIUM } // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task // if it is present. diff --git a/settings.gradle b/settings.gradle index 75c4d72..662d147 100644 --- a/settings.gradle +++ b/settings.gradle @@ -7,4 +7,7 @@ pluginManagement { mavenCentral() gradlePluginPortal() } +} +plugins { + id 'org.gradle.toolchains.foojay-resolver-convention' version '1.0.0' } \ No newline at end of file diff --git a/src/main/kotlin/com/steelextractor/SteelExtractor.kt b/src/main/kotlin/com/steelextractor/SteelExtractor.kt index c98d66c..165ab82 100644 --- a/src/main/kotlin/com/steelextractor/SteelExtractor.kt +++ b/src/main/kotlin/com/steelextractor/SteelExtractor.kt @@ -52,13 +52,14 @@ import java.nio.file.Path import java.nio.file.Paths import java.util.concurrent.CompletableFuture import kotlin.random.Random +import kotlin.system.exitProcess import kotlin.system.measureTimeMillis object SteelExtractor : ModInitializer { private val logger = LoggerFactory.getLogger("steel-extractor") /** Set to false to skip chunk generation and chunk stage hash extraction. */ - private const val ENABLE_CHUNK_EXTRACTION = true + private val ENABLE_CHUNK_EXTRACTION = System.getenv("STEEL_EXTRACTOR_ENABLE_CHUNK_EXTRACTION")?.toBoolean() ?: true /** Set to false to skip storing per-chunk block data in memory and writing binary dump files. */ private const val ENABLE_BINARY_DUMP = true @@ -195,37 +196,47 @@ object SteelExtractor : ModInitializer { val test2 = BuiltInRegistries.FLUID.byId(2) logger.info(test2.toString()) - val immediateExtractors = arrayOf( - Blocks(), - BlockEntities(), - Items(), - ParticleTypeRegistryExtractor(), - VillagerTypeRegistryExtractor(), - VillagerProfessionRegistryExtractor(), - Packets(), - MenuTypes(), - Entities(), - EntityEvents(), - Fluids(), - GameRulesExtractor(), - Classes(), - Attributes(), - MobEffects(), - Potions(), - SoundTypes(), - SoundEvents(), - MultiNoiseBiomeParameters(), - BiomeHashes(), - LevelEvents(), - Tags(), - StructureStarts(), - Strippables(), - Weathering(), - CandleCakes(), - Waxables(), - PoiTypesExtractor(), - GameEvents(), - ) + // Build immediate extractors list conditionally. To disable a particular extractor, + // set the environment variable STEEL_EXTRACTOR_DISABLE_=1 (or true/yes). + // Example: STEEL_EXTRACTOR_DISABLE_BLOCKS=1 + val immediateExtractors = mutableListOf() + fun addUnlessDisabled(name: String, supplier: () -> Extractor) { + if (System.getenv("STEEL_EXTRACTOR_DISABLE_$name")?.toBoolean() == true) { + logger.info("Extractor $name disabled via STEEL_EXTRACTOR_DISABLE_$name") + } else { + immediateExtractors.add(supplier()) + } + } + + addUnlessDisabled("BLOCKS") { Blocks() } + addUnlessDisabled("BLOCK_ENTITIES") { BlockEntities() } + addUnlessDisabled("ITEMS") { Items() } + addUnlessDisabled("PARTICLE_TYPES") { ParticleTypeRegistryExtractor() } + addUnlessDisabled("VILLAGER_TYPES") { VillagerTypeRegistryExtractor() } + addUnlessDisabled("VILLAGER_PROFESSIONS") { VillagerProfessionRegistryExtractor() } + addUnlessDisabled("PACKETS") { Packets() } + addUnlessDisabled("MENU_TYPES") { MenuTypes() } + addUnlessDisabled("ENTITIES") { Entities() } + addUnlessDisabled("ENTITY_EVENTS") { EntityEvents() } + addUnlessDisabled("FLUIDS") { Fluids() } + addUnlessDisabled("GAME_RULES") { GameRulesExtractor() } + addUnlessDisabled("CLASSES") { Classes() } + addUnlessDisabled("ATTRIBUTES") { Attributes() } + addUnlessDisabled("MOB_EFFECTS") { MobEffects() } + addUnlessDisabled("POTIONS") { Potions() } + addUnlessDisabled("SOUND_TYPES") { SoundTypes() } + addUnlessDisabled("SOUND_EVENTS") { SoundEvents() } + addUnlessDisabled("MULTI_NOISE_BIOME_PARAMETERS") { MultiNoiseBiomeParameters() } + addUnlessDisabled("BIOME_HASHES") { BiomeHashes() } + addUnlessDisabled("LEVEL_EVENTS") { LevelEvents() } + addUnlessDisabled("TAGS") { Tags() } + addUnlessDisabled("STRUCTURE_STARTS") { StructureStarts() } + addUnlessDisabled("STRIPPABLES") { Strippables() } + addUnlessDisabled("WEATHERING") { Weathering() } + addUnlessDisabled("CANDLE_CAKES") { CandleCakes() } + addUnlessDisabled("WAXABLES") { Waxables() } + addUnlessDisabled("POI_TYPES") { PoiTypesExtractor() } + addUnlessDisabled("GAME_EVENTS") { GameEvents() } val chunkStageExtractor = ChunkStageHashes() @@ -302,6 +313,11 @@ object SteelExtractor : ModInitializer { if (!ENABLE_CHUNK_EXTRACTION) { logger.info("All extractors complete! (chunk extraction skipped)") + if (System.getenv("STEEL_EXTRACTOR_EXIT_ON_COMPLETE")?.toBoolean() == true) { + logger.info("Exiting because STEEL_EXTRACTOR_EXIT_ON_COMPLETE is enabled") + ServerLifecycleEvents.SERVER_STOPPING.invoker().onServerStopping(server); + server.halt(false); // false means to do a graceful shutdown + } } }) @@ -568,6 +584,10 @@ object SteelExtractor : ModInitializer { } } logger.info("All extractors complete!") + if (System.getenv("STEEL_EXTRACTOR_EXIT_ON_COMPLETE")?.toBoolean() == true) { + logger.info("Exiting because STEEL_EXTRACTOR_EXIT_ON_COMPLETE is enabled") + exitProcess(0); + } } } } From 3c185b84a9fae5ad4b6006b64990e97a2a5f9ba2 Mon Sep 17 00:00:00 2001 From: ReCore Date: Mon, 6 Jul 2026 10:26:57 +0930 Subject: [PATCH 2/2] Using the envFlag function i missed --- src/main/kotlin/com/steelextractor/SteelExtractor.kt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/kotlin/com/steelextractor/SteelExtractor.kt b/src/main/kotlin/com/steelextractor/SteelExtractor.kt index 165ab82..1e7fa60 100644 --- a/src/main/kotlin/com/steelextractor/SteelExtractor.kt +++ b/src/main/kotlin/com/steelextractor/SteelExtractor.kt @@ -59,10 +59,10 @@ object SteelExtractor : ModInitializer { private val logger = LoggerFactory.getLogger("steel-extractor") /** Set to false to skip chunk generation and chunk stage hash extraction. */ - private val ENABLE_CHUNK_EXTRACTION = System.getenv("STEEL_EXTRACTOR_ENABLE_CHUNK_EXTRACTION")?.toBoolean() ?: true + private val ENABLE_CHUNK_EXTRACTION = envFlag("STEEL_EXTRACTOR_ENABLE_CHUNK_EXTRACTION") /** Set to false to skip storing per-chunk block data in memory and writing binary dump files. */ - private const val ENABLE_BINARY_DUMP = true + private val ENABLE_BINARY_DUMP = envFlag("STEEL_EXTRACTOR_ENABLE_BINARY_DUMP") /** Sampling parameters: place random CLUSTER_SIZE x CLUSTER_SIZE clusters within a SAMPLE_HALF_RANGE*2 x SAMPLE_HALF_RANGE*2 area. */ const val CHUNK_SAMPLE_SEED: Long = 123456 @@ -201,7 +201,7 @@ object SteelExtractor : ModInitializer { // Example: STEEL_EXTRACTOR_DISABLE_BLOCKS=1 val immediateExtractors = mutableListOf() fun addUnlessDisabled(name: String, supplier: () -> Extractor) { - if (System.getenv("STEEL_EXTRACTOR_DISABLE_$name")?.toBoolean() == true) { + if (envFlag("STEEL_EXTRACTOR_DISABLE_$name")) { logger.info("Extractor $name disabled via STEEL_EXTRACTOR_DISABLE_$name") } else { immediateExtractors.add(supplier()) @@ -313,7 +313,7 @@ object SteelExtractor : ModInitializer { if (!ENABLE_CHUNK_EXTRACTION) { logger.info("All extractors complete! (chunk extraction skipped)") - if (System.getenv("STEEL_EXTRACTOR_EXIT_ON_COMPLETE")?.toBoolean() == true) { + if (envFlag("STEEL_EXTRACTOR_EXIT_ON_COMPLETE")) { logger.info("Exiting because STEEL_EXTRACTOR_EXIT_ON_COMPLETE is enabled") ServerLifecycleEvents.SERVER_STOPPING.invoker().onServerStopping(server); server.halt(false); // false means to do a graceful shutdown @@ -584,7 +584,7 @@ object SteelExtractor : ModInitializer { } } logger.info("All extractors complete!") - if (System.getenv("STEEL_EXTRACTOR_EXIT_ON_COMPLETE")?.toBoolean() == true) { + if (envFlag("STEEL_EXTRACTOR_EXIT_ON_COMPLETE")) { logger.info("Exiting because STEEL_EXTRACTOR_EXIT_ON_COMPLETE is enabled") exitProcess(0); }