From 214b3ef20290b5490680c8f95035143541e1df69 Mon Sep 17 00:00:00 2001 From: MartinTheDragon Date: Sun, 31 May 2026 19:06:15 +0200 Subject: [PATCH 1/2] Configure maven publishing --- .gitignore | 3 ++ README.md | 20 ++++++++++ build.gradle | 101 +++++++++++++++++++++++++++++++++++++++++++-------- 3 files changed, 108 insertions(+), 16 deletions(-) diff --git a/.gitignore b/.gitignore index 1317d0286..5c23d575a 100644 --- a/.gitignore +++ b/.gitignore @@ -27,5 +27,8 @@ # CurseForge configuration /curseforge.properties +# Maven configuration +/maven.properties + # Changelog backup /changelog.bak diff --git a/README.md b/README.md index 0c17e73dc..77331bf53 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,26 @@ For further ports, try: Simply navigate to "Releases" on the right side of the page, download links for the compiled JAR as well as the corresponding source code are under the "Assets" category below the changelog. Make sure to review all changelogs when updating! +## Using in your project + +To include the mod as a dependency in a project of your own, you can adjust your Gradle buildscript according to the following example: + +```groovy +repositories { + maven { + name "NTM Releases" + url "https://maven.ntmr.dev/releases" + } +} + +dependencies { + def ntmBuildNumber = "5687" // Change this value according to the release you wish to use + + implementation "com.hbm:HBM-NTM:1.0.27_X${ntmBuildNumber}:dev" + compileOnly "com.hbm:HBM-NTM:1.0.27_X${ntmBuildNumber}:src" +} +``` + ## Building from source Tired of waiting until the next version comes out? Here is a tutorial on how to compile the very newest version yourself: diff --git a/build.gradle b/build.gradle index 3338f7135..5a6da512a 100644 --- a/build.gradle +++ b/build.gradle @@ -18,6 +18,7 @@ buildscript { apply plugin: 'forge' apply plugin: 'curseforge' +apply plugin: 'maven-publish' if(Files.exists(Paths.get("curseforge.properties"))) { @@ -25,6 +26,10 @@ if(Files.exists(Paths.get("curseforge.properties"))) { ext.cfprops = parseConfig(file("curseforge.properties")) } +if(Files.exists(Paths.get("maven.properties"))) { + ext.mavenprops = parseConfig(file("maven.properties")) +} + def version_name = version = mod_version if(!mod_build_number.isEmpty()) { version_name = mod_version + "_X" + mod_build_number @@ -45,7 +50,7 @@ minecraft { eclipse.classpath.file.whenMerged { cp -> // Find all codechicken source jars def srcent = cp.entries.findAll { entry -> entry.path.contains("codechicken") && entry.path.endsWith("-src.jar") } - + // Remove them from classpath cp.entries.removeAll srcent @@ -55,10 +60,10 @@ eclipse.classpath.file.whenMerged { cp -> def file = new File(entry.path) srcmap.put(file.getName().replace("-src.jar", "-dev.jar"), file) } - + // Create file reference factory def fileref = new FileReferenceFactory() - + // Find all codechicken development jars cp.entries.findAll { entry -> entry.path.contains("codechicken") && entry.path.endsWith("-dev.jar") }.forEach { entry -> File srcmapping = new File(entry.path) // Initialize the srcmapping from the dev jar path @@ -99,20 +104,20 @@ repositories { } dependencies { - implementation 'codechicken:CodeChickenCore:1.7.10-1.0.4.29:dev' - compileOnly 'codechicken:CodeChickenCore:1.7.10-1.0.4.29:src' - - implementation 'codechicken:CodeChickenLib:1.7.10-1.1.3.140:dev' - compileOnly 'codechicken:CodeChickenLib:1.7.10-1.1.3.140:src' - - implementation 'codechicken:NotEnoughItems:1.7.10-1.0.3.74:dev' - compileOnly 'codechicken:NotEnoughItems:1.7.10-1.0.3.74:src' + implementation('codechicken:CodeChickenCore:1.7.10-1.0.4.29:dev') { transitive = false } + compileOnly('codechicken:CodeChickenCore:1.7.10-1.0.4.29:src') { transitive = false } - compileOnly "inventorytweaks:InventoryTweaks:1.59-dev:deobf" + implementation('codechicken:CodeChickenLib:1.7.10-1.1.3.140:dev') { transitive = false } + compileOnly('codechicken:CodeChickenLib:1.7.10-1.1.3.140:src') { transitive = false } - implementation "li.cil.oc:OpenComputers:MC1.7.10-1.5.+:api" + implementation('codechicken:NotEnoughItems:1.7.10-1.0.3.74:dev') { transitive = false } + compileOnly('codechicken:NotEnoughItems:1.7.10-1.0.3.74:src') { transitive = false } - compileOnly "com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta.56-GTNH:dev" + compileOnly("inventorytweaks:InventoryTweaks:1.59-dev:deobf") { transitive = false } + + compileOnly("li.cil.oc:OpenComputers:MC1.7.10-1.5.+:api") { transitive = false } + + compileOnly("com.github.GTNewHorizons:Applied-Energistics-2-Unofficial:rv3-beta.56-GTNH:dev") { transitive = false } } processResources { @@ -123,7 +128,7 @@ processResources { // replace stuff in mcmod.info, nothing else from(sourceSets.main.resources.srcDirs) { include 'mcmod.info' - + // replace version and mcversion filesMatching('mcmod.info') { // replace version, mcversion and credits @@ -133,7 +138,7 @@ processResources { ]) } } - + // copy everything else, thats not the mcmod.info from(sourceSets.main.resources.srcDirs) { exclude 'mcmod.info' @@ -147,6 +152,27 @@ jar { } } +task sourceJar(type: Jar) { + from sourceSets.main.allJava + + classifier "src" + + manifest { + attributes 'FMLAT': 'HBM_at.cfg' + } +} + +task devJar(type: Jar) { + from(sourceSets.main.output) { + include "**" + } + classifier "dev" + + manifest { + attributes 'FMLAT': 'HBM_at.cfg' + } +} + task version { doFirst { println project.version @@ -179,6 +205,49 @@ if(Files.exists(Paths.get("curseforge.properties"))) { } } +if(Files.exists(Paths.get("maven.properties"))) { + publishing { + publications { + release(MavenPublication) { + artifactId archivesBaseName + version version_name + + from components.java + + artifact sourceJar { + classifier "src" + } + + artifact devJar { + classifier "dev" + } + + pom.withXml { + // NTM doesn't really feature any special runtime dependencies anyone would need, so blast those away + def node = asNode() + def dependencies = node.get("dependencies") + node.remove(dependencies) + node + } + } + } + repositories { + maven { + name "Nuggies" + url "https://maven.ntmr.dev/releases" + + credentials { + username mavenprops.username + password mavenprops.password + } + authentication { + basic(BasicAuthentication) + } + } + } + } +} + // Properties file parsing helper static def parseConfig(File config) { config.withReader { From 3663c7134fa9d156379db39beae66804a1956e9c Mon Sep 17 00:00:00 2001 From: Boblet Date: Mon, 1 Jun 2026 15:53:12 +0200 Subject: [PATCH 2/2] hm yes yes --- changelog | 7 ++- .../inventory/recipes/ArcWelderRecipes.java | 4 -- .../recipes/AssemblyMachineRecipes.java | 21 +++++++++ .../recipes/BlastFurnaceRecipesNT.java | 2 +- src/main/java/com/hbm/items/ModItems.java | 2 +- .../java/com/hbm/main/CraftingManager.java | 43 +++++++------------ .../render/tileentity/RenderBlastFurnace.java | 9 ++++ .../TileEntityMachineBlastFurnace.java | 7 ++- .../TileEntityMachineIndustrialTurbine.java | 2 +- src/main/resources/assets/hbm/lang/de_DE.lang | 3 ++ src/main/resources/assets/hbm/lang/en_US.lang | 3 ++ 11 files changed, 66 insertions(+), 37 deletions(-) diff --git a/changelog b/changelog index 3b2eb87ac..752ae6cd3 100644 --- a/changelog +++ b/changelog @@ -68,14 +68,19 @@ * Added a new alternate recipe for making obsidian in the chemical plant * Removed the water and steam geysers, which were so obscenely rare most people have never seen either one of them, and became functionally useless without the old geothermal generator * Moved the napalm recipe to the chemical plant +* Moved the microchip (all variants) and atomic clock recipes to the assembler +* The analog and integrated circuit boards now have alternate recipes in the assembler +* Removed two of the older motor recipes in the arc welder + * The only remaining recipe is the dense red copper one ## Fixed * Fixed RoR graph showing the wrong name in the GUI * Fixed polling option in RoR controllers reading dead signals * Fixed state change in RoR controllers not allowing repeat commands -* Fixed blast furnace NEI handler not cycling through all valid material shapes * Fixed RoR transmitter sending empty signals when unused mappings apply * Fixed hopper IO for battery sockets being entirely broken * Fixed cargo elevators not dropping the correct amount of segments * Fixed broken config check causing smithing recipes in anvils to always be tier 1 * Fixed potential client desync when placing or removing lids on a hot RBMK +* Fixed custom missile launch pad cores not being obtainable in 528 mode +* Fixed industrial turbines never fully spinning down diff --git a/src/main/java/com/hbm/inventory/recipes/ArcWelderRecipes.java b/src/main/java/com/hbm/inventory/recipes/ArcWelderRecipes.java index 8b4c1806c..7825f5495 100644 --- a/src/main/java/com/hbm/inventory/recipes/ArcWelderRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ArcWelderRecipes.java @@ -33,10 +33,6 @@ public class ArcWelderRecipes extends SerializableRecipe { public void registerDefaults() { //Parts - recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.motor, 2), 100, 200L, - new OreDictStack(IRON.plate(), 2), new ComparableStack(ModItems.coil_copper), new ComparableStack(ModItems.coil_copper_torus))); - recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.motor, 2), 100, 400L, - new OreDictStack(STEEL.plate(), 1), new ComparableStack(ModItems.coil_copper), new ComparableStack(ModItems.coil_copper_torus))); recipes.add(new ArcWelderRecipe(new ItemStack(ModItems.motor, 2), 100, 400L, new OreDictStack(STEEL.plate(), 2), new OreDictStack(MINGRADE.wireDense(), 2))); recipes.add(new ArcWelderRecipe(DictFrame.fromOne(ModItems.part_generic, EnumPartType.LDE), 200, 5_000L, diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java index 18dab3ac3..a0044c6cd 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblyMachineRecipes.java @@ -75,6 +75,7 @@ public class AssemblyMachineRecipes extends GenericRecipes { this.register(new GenericRecipe("ass.plateweaponsteel").setup(60, 100).outputItems(new ItemStack(ModItems.plate_weaponsteel, 1)).inputItems(new OreDictStack(WEAPONSTEEL.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates").setGroup(autoPlate, this)); this.register(new GenericRecipe("ass.platesaturnite").setup(60, 100).outputItems(new ItemStack(ModItems.plate_saturnite, 1)).inputItems(new OreDictStack(BIGMT.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates").setGroup(autoPlate, this)); this.register(new GenericRecipe("ass.platedura").setup(60, 100).outputItems(new ItemStack(ModItems.plate_dura_steel, 1)).inputItems(new OreDictStack(DURA.ingot())).setPools(GenericRecipes.POOL_PREFIX_ALT + "plates").setGroup(autoPlate, this)); + this.register(new GenericRecipe("ass.platemixed").setup(50, 100).outputItems(new ItemStack(ModItems.plate_mixed, 4)) .inputItems(new OreDictStack(ALLOY.plate(), 2), new ComparableStack(ModItems.neutron_reflector, 1), new OreDictStack(BIGMT.plate(), 1))); this.register(new GenericRecipe("ass.dalekanium").setup(200, 100).outputItems(new ItemStack(ModItems.plate_dalekanium, 1)) @@ -118,6 +119,26 @@ public class AssemblyMachineRecipes extends GenericRecipes { .inputItems(new OreDictStack(ASBESTOS.ingot(), 1), new ComparableStack(Items.string, 8))); this.register(new GenericRecipe("ass.filtercoal").setup(50, 100).outputItems(new ItemStack(ModItems.filter_coal, 1)) .inputItems(new OreDictStack(COAL.dust(), 4), new ComparableStack(Items.string, 2), new ComparableStack(Items.paper, 1))); + + // crafting parts + if(!GeneralConfig.enable528) { // precass otherwise + this.register(new GenericRecipe("ass.chip").setup(100, 250).outputItems(DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP)) + .inputItems(new ComparableStack(ModItems.plate_polymer), new ComparableStack(ModItems.circuit, 1, EnumCircuitType.SILICON), new OreDictStack(GOLD.wireFine()))); + this.register(new GenericRecipe("ass.chipBismoid").setup(100, 1_500).outputItems(DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP_BISMOID)) + .inputItems(new ComparableStack(ModItems.plate_polymer, 2), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.SILICON), new OreDictStack(ANY_BISMOID.nugget()), new OreDictStack(GOLD.wireFine(), 2))); + this.register(new GenericRecipe("ass.chipQuantum").setup(200, 15_000).outputItems(DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP_QUANTUM)) + .inputItems(new OreDictStack(ANY_HARDPLASTIC.ingot(), 2), new OreDictStack(BSCCO.wireDense()), new ComparableStack(ModItems.pellet_charged), new OreDictStack(GOLD.wireFine(), 8))); + this.register(new GenericRecipe("ass.atomicClock").setup(300, 1_000).outputItems(DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ATOMIC_CLOCK)) + .inputItems(new OreDictStack(ANY_PLASTIC.ingot(), 2), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.CHIP), new OreDictStack(SR.dust(), 1))); + + // alternates + this.register(new GenericRecipe("ass.analogAlt").setupNamed(200, 250).outputItems(DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ANALOG)) + .inputItems(new ComparableStack(ModItems.circuit, 4, EnumCircuitType.VACUUM_TUBE), new OreDictStack(ANY_PLASTIC.ingot(), 4), new OreDictStack(W.wireFine(), 8), new OreDictStack(NB.ingot())).setPools(POOL_PREFIX_ALT + ".circuit")); + this.register(new GenericRecipe("ass.factorioChip").setupNamed(300, 20_000).outputItems(DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC)) + .inputItems(new OreDictStack(ANY_PLASTIC.ingot(), 4), new OreDictStack(IRON.plate(), 4), new OreDictStack(CU.wireFine(), 8)).setPools(POOL_PREFIX_ALT + ".circuit")); + this.register(new GenericRecipe("ass.atomicClockAlt").setupNamed(300, 20_000).outputItems(DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ATOMIC_CLOCK, 4)) + .inputItems(new OreDictStack(ANY_PLASTIC.ingot(), 4), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.CHIP), new OreDictStack(CS137.dust(), 1)).setPools(POOL_PREFIX_ALT + ".circuit")); + } // machine parts this.register(new GenericRecipe("ass.centrifugetower").setup(100, 100).outputItems(new ItemStack(ModItems.centrifuge_element, 1)) diff --git a/src/main/java/com/hbm/inventory/recipes/BlastFurnaceRecipesNT.java b/src/main/java/com/hbm/inventory/recipes/BlastFurnaceRecipesNT.java index 8b18d639d..42d269209 100644 --- a/src/main/java/com/hbm/inventory/recipes/BlastFurnaceRecipesNT.java +++ b/src/main/java/com/hbm/inventory/recipes/BlastFurnaceRecipesNT.java @@ -64,7 +64,7 @@ public class BlastFurnaceRecipesNT extends GenericRecipes { .outputItems(new ItemStack(ModItems.meteorite_sword_alloyed, 1))); this.register(new GenericRecipe("blast.starmetal").setDuration(600) - .inputItems(new OreDictStack(CO.ingot()), new ComparableStack(ModItems.powder_meteorite, 1)) + .inputItems(new OreDictStack(BIGMT.ingot()), new ComparableStack(ModItems.powder_meteorite, 1)) .outputItems(new ItemStack(ModItems.ingot_starmetal, 1))); this.register(new GenericRecipe("blast.paa").setDuration(600) diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index fae926b3f..1573a20da 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -556,7 +556,7 @@ public class ModItems { public static Item coil_copper; public static Item coil_copper_torus; public static Item coil_tungsten; - @Deprecated public static Item tank_steel; + public static Item tank_steel; public static Item motor; public static Item motor_desh; public static Item motor_bismuth; diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index ff44c6f7d..7544c7782 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -121,16 +121,6 @@ public class CraftingManager { addRecipeAuto(DictFrame.fromOne(ModItems.circuit, EnumCircuitType.PCB), new Object[] { "I", "P", 'I', ModItems.plate_polymer, 'P', CU.plate() }); addRecipeAuto(DictFrame.fromOne(ModItems.circuit, EnumCircuitType.PCB, 4), new Object[] { "I", "P", 'I', ModItems.plate_polymer, 'P', GOLD.plate() }); addRecipeAuto(DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CONTROLLER_CHASSIS), new Object[] { "PPP", "CBB", "PPP", 'P', ANY_PLASTIC.ingot(), 'C', ModItems.crt_display, 'B', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.PCB) }); - - if(!GeneralConfig.enable528) { - addRecipeAuto(DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP), new Object[] { "I", "S", "W", 'I', ModItems.plate_polymer, 'S', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.SILICON), 'W', CU.wireFine() }); - addRecipeAuto(DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP), new Object[] { "I", "S", "W", 'I', ModItems.plate_polymer, 'S', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.SILICON), 'W', GOLD.wireFine() }); - addRecipeAuto(DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP_BISMOID), new Object[] { "III", "SNS", "WWW", 'I', ModItems.plate_polymer, 'S', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.SILICON), 'N', ANY_BISMOID.nugget(), 'W', CU.wireFine() }); - addRecipeAuto(DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP_BISMOID), new Object[] { "III", "SNS", "WWW", 'I', ModItems.plate_polymer, 'S', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.SILICON), 'N', ANY_BISMOID.nugget(), 'W', GOLD.wireFine() }); - addRecipeAuto(DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP_QUANTUM), new Object[] { "HHH", "SIS", "WWW", 'H', ANY_HARDPLASTIC.ingot(), 'S', BSCCO.wireDense(), 'I', ModItems.pellet_charged, 'W', CU.wireFine() }); - addRecipeAuto(DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP_QUANTUM), new Object[] { "HHH", "SIS", "WWW", 'H', ANY_HARDPLASTIC.ingot(), 'S', BSCCO.wireDense(), 'I', ModItems.pellet_charged, 'W', GOLD.wireFine() }); - addRecipeAuto(DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ATOMIC_CLOCK), new Object[] { "ICI", "CSC", "ICI", 'I', ModItems.plate_polymer, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP), 'S', SR.dust() }); - } addRecipeAuto(new ItemStack(ModItems.crt_display, 4), new Object[] { " A ", "SGS", " T ", 'A', AL.dust(), 'S', STEEL.plate(), 'G', KEY_ANYPANE, 'T', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.VACUUM_TUBE) }); @@ -169,22 +159,18 @@ public class CraftingManager { addShapelessAuto(new ItemStack(ModItems.biomass, 4), new Object[] { Items.sugar, ModItems.powder_sawdust, ModItems.powder_sawdust, Items.wheat, Items.wheat, Items.wheat, Items.wheat, Items.wheat, Items.wheat }); addShapelessAuto(new ItemStack(ModItems.biomass, 4), new Object[] { DictFrame.fromOne(ModBlocks.plant_flower, EnumFlowerType.WEED), DictFrame.fromOne(ModBlocks.plant_flower, EnumFlowerType.WEED), DictFrame.fromOne(ModBlocks.plant_flower, EnumFlowerType.WEED), DictFrame.fromOne(ModBlocks.plant_flower, EnumFlowerType.WEED), DictFrame.fromOne(ModBlocks.plant_flower, EnumFlowerType.WEED), DictFrame.fromOne(ModBlocks.plant_flower, EnumFlowerType.WEED) }); - addRecipeAuto(new ItemStack(ModItems.coil_copper, 1), new Object[] { "WWW", "WIW", "WWW", 'W', MINGRADE.wireFine(), 'I', IRON.ingot() }); - addRecipeAuto(new ItemStack(ModItems.coil_copper, 1), new Object[] { "WWW", "WIW", "WWW", 'W', MINGRADE.wireFine(), 'I', STEEL.ingot() }); - addRecipeAuto(new ItemStack(ModItems.coil_advanced_alloy, 1), new Object[] { "WWW", "WIW", "WWW", 'W', ALLOY.wireFine(), 'I', IRON.ingot() }); - addRecipeAuto(new ItemStack(ModItems.coil_advanced_alloy, 1), new Object[] { "WWW", "WIW", "WWW", 'W', ALLOY.wireFine(), 'I', STEEL.ingot() }); - addRecipeAuto(new ItemStack(ModItems.coil_gold, 1), new Object[] { "WWW", "WIW", "WWW", 'W', GOLD.wireFine(), 'I', IRON.ingot() }); - addRecipeAuto(new ItemStack(ModItems.coil_gold, 1), new Object[] { "WWW", "WIW", "WWW", 'W', GOLD.wireFine(), 'I', STEEL.ingot() }); - addRecipeAuto(new ItemStack(ModItems.coil_magnetized_tungsten, 1), new Object[] { "WWW", "WIW", "WWW", 'W', MAGTUNG.wireFine(), 'I', IRON.ingot() }); - addRecipeAuto(new ItemStack(ModItems.coil_magnetized_tungsten, 1), new Object[] { "WWW", "WIW", "WWW", 'W', MAGTUNG.wireFine(), 'I', STEEL.ingot() }); - addRecipeAuto(new ItemStack(ModItems.coil_tungsten, 1), new Object[] { "WWW", "WIW", "WWW", 'W', W.wireFine(), 'I', IRON.ingot() }); - addRecipeAuto(new ItemStack(ModItems.coil_tungsten, 1), new Object[] { "WWW", "WIW", "WWW", 'W', W.wireFine(), 'I', STEEL.ingot() }); - addRecipeAuto(new ItemStack(ModItems.coil_copper_torus, 2), new Object[] { " C ", "CPC", " C ", 'P', IRON.plate(), 'C', ModItems.coil_copper }); - addRecipeAuto(new ItemStack(ModItems.coil_copper_torus, 2), new Object[] { " C ", "CPC", " C ", 'P', STEEL.plate(), 'C', ModItems.coil_copper }); - addRecipeAuto(new ItemStack(ModItems.coil_advanced_torus, 2), new Object[] { " C ", "CPC", " C ", 'P', IRON.plate(), 'C', ModItems.coil_advanced_alloy }); - addRecipeAuto(new ItemStack(ModItems.coil_advanced_torus, 2), new Object[] { " C ", "CPC", " C ", 'P', STEEL.plate(), 'C', ModItems.coil_advanced_alloy }); - addRecipeAuto(new ItemStack(ModItems.coil_gold_torus, 2), new Object[] { " C ", "CPC", " C ", 'P', IRON.plate(), 'C', ModItems.coil_gold }); - addRecipeAuto(new ItemStack(ModItems.coil_gold_torus, 2), new Object[] { " C ", "CPC", " C ", 'P', STEEL.plate(), 'C', ModItems.coil_gold }); + for(String ingot : new String[] {IRON.ingot(), STEEL.ingot()}) { + addRecipeAuto(new ItemStack(ModItems.coil_copper, 1), new Object[] { "WWW", "WIW", "WWW", 'W', MINGRADE.wireFine(), 'I', ingot }); + addRecipeAuto(new ItemStack(ModItems.coil_advanced_alloy, 1), new Object[] { "WWW", "WIW", "WWW", 'W', ALLOY.wireFine(), 'I', ingot }); + addRecipeAuto(new ItemStack(ModItems.coil_gold, 1), new Object[] { "WWW", "WIW", "WWW", 'W', GOLD.wireFine(), 'I', ingot }); + addRecipeAuto(new ItemStack(ModItems.coil_magnetized_tungsten, 1), new Object[] { "WWW", "WIW", "WWW", 'W', MAGTUNG.wireFine(), 'I', ingot }); + addRecipeAuto(new ItemStack(ModItems.coil_tungsten, 1), new Object[] { "WWW", "WIW", "WWW", 'W', W.wireFine(), 'I', ingot }); + } + for(String plate : new String[] {IRON.plate(), STEEL.plate()}) { + addRecipeAuto(new ItemStack(ModItems.coil_copper_torus, 2), new Object[] { " C ", "CPC", " C ", 'P', plate, 'C', ModItems.coil_copper }); + addRecipeAuto(new ItemStack(ModItems.coil_advanced_torus, 2), new Object[] { " C ", "CPC", " C ", 'P', plate, 'C', ModItems.coil_advanced_alloy }); + addRecipeAuto(new ItemStack(ModItems.coil_gold_torus, 2), new Object[] { " C ", "CPC", " C ", 'P', plate, 'C', ModItems.coil_gold }); + } addRecipeAuto(new ItemStack(ModItems.tank_steel, 2), new Object[] { "STS", "S S", "STS", 'S', STEEL.plate(), 'T', TI.plate() }); addRecipeAuto(new ItemStack(ModItems.motor, 2), new Object[] { " R ", "ICI", "ITI", 'R', MINGRADE.wireFine(), 'T', ModItems.coil_copper_torus, 'I', IRON.plate(), 'C', ModItems.coil_copper }); addRecipeAuto(new ItemStack(ModItems.motor, 2), new Object[] { " R ", "ICI", " T ", 'R', MINGRADE.wireFine(), 'T', ModItems.coil_copper_torus, 'I', STEEL.plate(), 'C', ModItems.coil_copper }); @@ -997,10 +983,11 @@ public class CraftingManager { for(NTMMaterial mat : Mats.orderedList) { if(mat.autogen.contains(MaterialShapes.BOLT)) for(String name : mat.names) addRecipeAuto(new ItemStack(ModItems.bolt, 16, mat.id), new Object[] { "#", "#", '#', MaterialShapes.INGOT.name() + name }); } + + addRecipeAuto(new ItemStack(ModBlocks.struct_launcher_core, 1), new Object[] { "SCS", "SIS", "BEB", 'S', ModBlocks.steel_scaffold, 'I', Blocks.iron_bars, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC), 'B', ModBlocks.struct_launcher, 'E', new ItemStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LEAD.ordinal()) }); + addRecipeAuto(new ItemStack(ModBlocks.struct_launcher_core_large, 1), new Object[] { "SIS", "ICI", "BEB", 'S', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'I', Blocks.iron_bars, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'B', ModBlocks.struct_launcher, 'E', new ItemStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LEAD.ordinal()) }); if(!GeneralConfig.enable528) { - addRecipeAuto(new ItemStack(ModBlocks.struct_launcher_core, 1), new Object[] { "SCS", "SIS", "BEB", 'S', ModBlocks.steel_scaffold, 'I', Blocks.iron_bars, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC), 'B', ModBlocks.struct_launcher, 'E', new ItemStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LEAD.ordinal()) }); - addRecipeAuto(new ItemStack(ModBlocks.struct_launcher_core_large, 1), new Object[] { "SIS", "ICI", "BEB", 'S', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'I', Blocks.iron_bars, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'B', ModBlocks.struct_launcher, 'E', new ItemStack(ModItems.battery_pack, 1, EnumBatteryPack.BATTERY_LEAD.ordinal()) }); addRecipeAuto(new ItemStack(ModItems.reactor_sensor, 1), new Object[] { "WPW", "CMC", "PPP", 'W', W.wireFine(), 'P', PB.plate(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC), 'M', ModItems.magnetron }); addRecipeAuto(new ItemStack(ModBlocks.rbmk_console, 1), new Object[] { "BBB", "DGD", "DCD", 'B', B.ingot(), 'D', ModBlocks.deco_rbmk, 'G', KEY_ANYPANE, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ANALOG) }); addRecipeAuto(new ItemStack(ModBlocks.rbmk_crane_console, 1), new Object[] { "BCD", "DDD", 'B', B.ingot(), 'D', ModBlocks.deco_rbmk, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ANALOG) }); diff --git a/src/main/java/com/hbm/render/tileentity/RenderBlastFurnace.java b/src/main/java/com/hbm/render/tileentity/RenderBlastFurnace.java index 21947e8ab..f46d432bd 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderBlastFurnace.java +++ b/src/main/java/com/hbm/render/tileentity/RenderBlastFurnace.java @@ -6,6 +6,7 @@ import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ModBlocks; import com.hbm.main.ResourceManager; import com.hbm.render.item.ItemRenderBase; +import com.hbm.tileentity.machine.TileEntityMachineBlastFurnace; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.item.Item; @@ -28,6 +29,14 @@ public class RenderBlastFurnace extends TileEntitySpecialRenderer implements IIt case 5: GL11.glRotatef(0, 0F, 1F, 0F); break; } + TileEntityMachineBlastFurnace furnace = (TileEntityMachineBlastFurnace) tile; + + if(furnace.tilted) { + GL11.glTranslated(0, -0.25, 0); + GL11.glRotated(10, 0, 0, 1); + GL11.glRotated(5, 0, 1, 0); + } + bindTexture(ResourceManager.blast_furnace_tex); ResourceManager.blast_furnace.renderAll(); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineBlastFurnace.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineBlastFurnace.java index 86c637ec4..2bba3a340 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineBlastFurnace.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineBlastFurnace.java @@ -20,6 +20,7 @@ import com.hbm.module.ModuleBurnTime; import com.hbm.tileentity.IFluidCopiable; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityMachineBase; +import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; import api.hbm.fluidmk2.IFluidStandardTransceiverMK2; @@ -67,6 +68,7 @@ public class TileEntityMachineBlastFurnace extends TileEntityMachineBase impleme public void updateEntity() { if(!worldObj.isRemote) { + this.checkTilt(TiltType.CONFIG, false); for(DirPos pos : this.getConPos()) { this.trySubscribe(tanks[0].getTankType(), worldObj, pos); @@ -85,7 +87,7 @@ public class TileEntityMachineBlastFurnace extends TileEntityMachineBase impleme this.speed = 0F; GenericRecipe recipe = BlastFurnaceRecipesNT.INSTANCE.getRecipe(slots[1], slots[2]); - if(recipe != null && this.fuel >= FUEL_RATE && this.canOutput(recipe)) { + if(!this.tilted && recipe != null && this.fuel >= FUEL_RATE && this.canOutput(recipe)) { this.speed = MathHelper.clamp_float(0.5F + this.tanks[0].getFill() * 4F / this.tanks[0].getMaxFill(), 0.5F, 3F); @@ -312,4 +314,7 @@ public class TileEntityMachineBlastFurnace extends TileEntityMachineBase impleme @Override public long getProviderSpeed(FluidType type, int pressure) { return Math.max(tanks[1].getFill() * 50 / tanks[1].getMaxFill(), 1); } @Override public FluidTank getTankToPaste() { return null; } + + @Override public int getFloorCount() { return 2 * 2; } + @Override public BlockPos getFloorPosFromIndex(int index) { return this.standardFloor3x3(index); } } diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIndustrialTurbine.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIndustrialTurbine.java index 4c9eacad6..cb1798c91 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIndustrialTurbine.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineIndustrialTurbine.java @@ -90,7 +90,7 @@ public class TileEntityMachineIndustrialTurbine extends TileEntityTurbineBase im @Override public void onServerTick() { this.spin = (double) flywheel_energy / FLYWHEEL_MAX_ENERGY; //because dense steams have way lower energy output, turbines running them take a lot longer to spool up - this.lastPowerTarget = Math.min((long) (Math.max(this.spin, 0.1) * maxPower), this.flywheel_energy); + this.lastPowerTarget = Math.min((long) (Math.max(this.spin, 0.05) * maxPower), this.flywheel_energy); this.flywheel_energy -= this.lastPowerTarget; this.powerBuffer = (long) (this.lastPowerTarget); } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 2154b4c74..9f3fc7d40 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -129,6 +129,9 @@ armorMod.type.leggings=Beinschienen armorMod.type.servo=Servos armorMod.type.special=Spezial +ass.analogAlt=Simple Analogschaltkreise +ass.atomicClockAlt=Caesium-Atomuhr +ass.factorioChip=Minimalisten-Schaltkreise ass.nitra=Nitra zu Munition autoswitch=Teil der Rezeptgruppe "%s"$Rezept ändert sich basierend auf das erste Item diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index a5ae7f913..c49433f72 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -184,6 +184,9 @@ armorMod.type.leggings=Leggings armorMod.type.servo=Servos armorMod.type.special=Special +ass.analogAlt=Simple Analog Circuit +ass.atomicClockAlt=Caesium Atomic Clock +ass.factorioChip=Minimalist Circuits ass.nitra=Nitra to Ammunition autoswitch=Part of auto switch group "%s"$Recipe changes based on first ingredient