Merge branch 'HbmMods:master' into rulang3

This commit is contained in:
Raaaaaaaaaay 2026-08-02 19:05:41 +03:00 committed by GitHub
commit 93cb1718d9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 99 additions and 46 deletions

View File

@ -1,31 +1,8 @@
## Added ## Added
* Wideband Radio Emission Detector Satellite * Rock mill
* Detects high-energy events like nuclear explosions, particle accelerator operations and radar from the entire map * Earlygame post-steel crusher type machine
* Not terribly accurate, positioning may be off by hundreds or thousands of blocks depending on the emission intensity * Can grind down various stones, gravel and sand into finer items while yielding byproduct
* Narrowband Emission Scanning Satellite * Mainly intended to serve as an easy way to automate/bulk craft certain elements in earlygame before BOP
* Detects high-energy events like radar, particle accelerator operations, nuclear or fusion reactors * While the byproduct chances are rather low and the recipe times are slow, the mills are easily scalable due to their low cost
* Can pinpoint exact locations, but is limited in its field of view * Comes with convenient stacking frame
* Ideal for skyblock/seablock type challenge runs, as it can be configured to serve as an Ex Nihilo substitute
## Changed
* Updated russian and chinese localization
* AUTOCAL's `first` and `last` instructions now support variable substitution
* Spy satellites now have the `getsmog` command, checking for soot pollution on the current target coordinate
* The research reactor and breeding reactor have been deprecated
* The reactors and the plate fuel no longer have recipes, but existing ones will continue to function until they run out of fuel
* Removed orphaned multiblock dummies clearing themselves via random ticks, only block updates can do that now
## Fixed
* Fixed pile fuel loader temperature reading not working
* Fixed mining satellite NEI handling
* Fixed crash caused by non-miner satellite ID chips in the cargo landing pad
* Potentially fixed ID-shift affecting satellites launched pre-update
* Fixed xenium resonator item mapping being incorrect, creating a relay satellite instead
* Fixed a potential crash caused by accessing out-of-range data on the radar satellite
* Fixed QMAW manual pages not being able to be overwritten by resource packs
* This feature was a major pain in the ass to actually make, and it apparently never even worked until now
* Fixed satellite groundstation losing its frequency on relog
* Added extra safeguarding preventing crashes caused by multiblock door tile entities not bound to the correct block
* Fixed new pile rods now having radiation values
* Potentially fixed a multiblock migration issue where standard electricity pylons would disappear due to changes in expected metadata
* Fixed the pipe wrench assuming anchor pos 0/0/0 when NBT data is initialized as well as clearing all NBT data if a pipe connection is created
* Fixed tower base structures spawning in sandy biomes

View File

@ -68,6 +68,7 @@ public class OreDictManager {
public static final String KEY_LEAVES = "treeLeaves"; public static final String KEY_LEAVES = "treeLeaves";
public static final String KEY_SAPLING = "treeSapling"; public static final String KEY_SAPLING = "treeSapling";
public static final String KEY_SAND = "sand"; public static final String KEY_SAND = "sand";
public static final String KEY_STONE = "stone";
public static final String KEY_COBBLESTONE = "cobblestone"; public static final String KEY_COBBLESTONE = "cobblestone";
public static final String KEY_BLACK = "dyeBlack"; public static final String KEY_BLACK = "dyeBlack";

View File

@ -34,31 +34,90 @@ public class RockMillRecipes extends GenericRecipes<GenericRecipe> {
int duraShort = 100; int duraShort = 100;
int duraLong = 200; int duraLong = 200;
this.register(new GenericRecipe("rock.cobble").setupNamed(duraShort, consumption).setNameWrapper("rock.crushing") String groupCrush = "autoswitch.crushing";
this.register(new GenericRecipe("rock.cobble").setup(duraShort, consumption).setNameWrapper("rock.crushing")
.inputItems(new OreDictStack(KEY_COBBLESTONE)) .inputItems(new OreDictStack(KEY_COBBLESTONE))
.inputFluids(new FluidStack(Fluids.WATER, 250)) .inputFluids(new FluidStack(Fluids.WATER, 250))
.outputItems(new ChanceOutputMulti( .outputItems(new ChanceOutputMulti(
new ChanceOutput(new ItemStack(Blocks.gravel), 95), new ChanceOutput(new ItemStack(Blocks.gravel), 95),
new ChanceOutput(new ItemStack(ModItems.powder_quartz), 5) new ChanceOutput(new ItemStack(ModItems.powder_quartz), 5)
)).setIconToFirstIngredient()); )).setIconToFirstIngredient().setGroup(groupCrush, INSTANCE));
this.register(new GenericRecipe("rock.gravel").setupNamed(duraShort, consumption).setNameWrapper("rock.crushing") this.register(new GenericRecipe("rock.gravel").setup(duraShort, consumption).setNameWrapper("rock.crushing")
.inputItems(new ComparableStack(Blocks.gravel)) .inputItems(new ComparableStack(Blocks.gravel))
.inputFluids(new FluidStack(Fluids.WATER, 250)) .inputFluids(new FluidStack(Fluids.WATER, 250))
.outputItems(new ChanceOutputMulti( .outputItems(new ChanceOutputMulti(
new ChanceOutput(new ItemStack(Blocks.sand), 75), new ChanceOutput(new ItemStack(Blocks.sand), 75),
new ChanceOutput(new ItemStack(Items.flint), 20), new ChanceOutput(new ItemStack(Items.flint), 20),
new ChanceOutput(new ItemStack(ModItems.powder_boron), 5) new ChanceOutput(new ItemStack(ModItems.powder_boron), 5)
)).setIconToFirstIngredient()); )).setIconToFirstIngredient().setGroup(groupCrush, INSTANCE));
this.register(new GenericRecipe("rock.bauxite").setupNamed(duraLong, consumption).setNameWrapper("rock.crushing") this.register(new GenericRecipe("rock.sand").setup(duraShort, consumption).setNameWrapper("rock.crushing")
.inputItems(new OreDictStack(KEY_SAND))
.inputFluids(new FluidStack(Fluids.WATER, 250))
.outputItems(new ChanceOutputMulti(
new ChanceOutput(new ItemStack(ModItems.dust), 90),
new ChanceOutput(new ItemStack(ModItems.powder_calcium), 5),
new ChanceOutput(new ItemStack(ModItems.fluorite), 5)
)).setIconToFirstIngredient().setGroup(groupCrush, INSTANCE));
this.register(new GenericRecipe("rock.netherrack").setup(duraShort, consumption).setNameWrapper("rock.crushing")
.inputItems(new ComparableStack(Blocks.netherrack))
.inputFluids(new FluidStack(Fluids.WATER, 250))
.outputItems(new ChanceOutputMulti(
new ChanceOutput(new ItemStack(Blocks.gravel), 50),
new ChanceOutput(new ItemStack(Blocks.soul_sand), 25),
new ChanceOutput(new ItemStack(Items.glowstone_dust), 15),
new ChanceOutput(new ItemStack(ModItems.powder_quartz), 10)
)).setIconToFirstIngredient().setGroup(groupCrush, INSTANCE));
this.register(new GenericRecipe("rock.soulsand").setup(duraShort, consumption).setNameWrapper("rock.crushing")
.inputItems(new ComparableStack(Blocks.soul_sand))
.inputFluids(new FluidStack(Fluids.WATER, 250))
.outputItems(new ChanceOutputMulti(
new ChanceOutput(new ItemStack(Blocks.sand), 50),
new ChanceOutput(new ItemStack(ModItems.powder_fire), 25),
new ChanceOutput(new ItemStack(ModItems.powder_uranium), 15),
new ChanceOutput(new ItemStack(Items.blaze_powder), 5),
new ChanceOutput(new ItemStack(Items.nether_wart), 5)
)).setIconToFirstIngredient().setGroup(groupCrush, INSTANCE));
this.register(new GenericRecipe("rock.schist").setup(duraLong, consumption).setNameWrapper("rock.crushing")
.inputItems(new ComparableStack(ModBlocks.stone_gneiss))
.inputFluids(new FluidStack(Fluids.WATER, 250))
.outputItems(new ChanceOutputMulti(
new ChanceOutput(new ItemStack(Blocks.gravel), 50),
new ChanceOutput(new ItemStack(Blocks.sand), 10),
new ChanceOutput(new ItemStack(ModItems.powder_lithium), 25),
new ChanceOutput(new ItemStack(ModItems.powder_niobium), 5),
new ChanceOutput(new ItemStack(ModItems.powder_uranium), 5),
new ChanceOutput(new ItemStack(ModItems.powder_gold), 5)
)).setIconToFirstIngredient().setGroup(groupCrush, INSTANCE));
this.register(new GenericRecipe("rock.hematite").setup(duraLong, consumption).setNameWrapper("rock.crushing")
.inputItems(new OreDictStack(HEMATITE.ore()))
.inputFluids(new FluidStack(Fluids.WATER, 250))
.outputItems(new ChanceOutputMulti(
new ChanceOutput(new ItemStack(Blocks.gravel), 65),
new ChanceOutput(new ItemStack(ModItems.powder_iron), 25),
new ChanceOutput(new ItemStack(ModItems.powder_titanium), 10)
)).setIconToFirstIngredient().setGroup(groupCrush, INSTANCE));
this.register(new GenericRecipe("rock.bauxite").setup(duraLong, consumption).setNameWrapper("rock.crushing")
.inputItems(new OreDictStack(BAUXITE.ore())) .inputItems(new OreDictStack(BAUXITE.ore()))
.inputFluids(new FluidStack(Fluids.WATER, 250)) .inputFluids(new FluidStack(Fluids.WATER, 250))
.outputItems(new ChanceOutputMulti( .outputItems(new ChanceOutputMulti(
new ChanceOutput(new ItemStack(Blocks.gravel), 25), new ChanceOutput(new ItemStack(Blocks.gravel), 25),
new ChanceOutput(new ItemStack(Items.clay_ball), 25), new ChanceOutput(new ItemStack(Items.clay_ball), 25),
new ChanceOutput(new ItemStack(ModBlocks.stone_resource, 1, 2), 25), new ChanceOutput(new ItemStack(ModBlocks.stone_resource, 1, 2), 25),
new ChanceOutput(new ItemStack(ModBlocks.ore_titanium, 1, 2), 25) new ChanceOutput(new ItemStack(ModBlocks.ore_titanium), 25)
)).setIconToFirstIngredient()); )).setIconToFirstIngredient().setGroup(groupCrush, INSTANCE));
this.register(new GenericRecipe("rock.clay").setup(duraLong, consumption)
.inputItems(new OreDictStack(KEY_SAND),
new ComparableStack(ModItems.dust))
.inputFluids(new FluidStack(Fluids.WATER, 1_000))
.outputItems(new ItemStack(Items.clay_ball, 4)));
} }
} }

View File

@ -226,6 +226,14 @@ public class AnvilRecipes extends SerializableRecipe {
boolean exp = GeneralConfig.enableExpensiveMode; boolean exp = GeneralConfig.enableExpensiveMode;
constructionRecipes.add(new AnvilConstructionRecipe(
new AStack[] {
new OreDictStack(KEY_STONE, 16),
new OreDictStack(STEEL.plate(), 4),
new OreDictStack(CU.pipe(), 1),
new ComparableStack(ModItems.motor, 1)
}, new AnvilOutput(new ItemStack(ModBlocks.machine_rockmill))).setTier(2));
constructionRecipes.add(new AnvilConstructionRecipe( constructionRecipes.add(new AnvilConstructionRecipe(
new AStack[] { new AStack[] {
new OreDictStack(STEEL.ingot(), 8), new OreDictStack(STEEL.ingot(), 8),

View File

@ -2980,13 +2980,13 @@ public class ModItems {
waste_schrabidium = new ItemDepletedFuel().setUnlocalizedName("waste_schrabidium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_schrabidium"); waste_schrabidium = new ItemDepletedFuel().setUnlocalizedName("waste_schrabidium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_schrabidium");
waste_zfb_mox = new ItemDepletedFuel().setUnlocalizedName("waste_zfb_mox").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_zfb_mox"); waste_zfb_mox = new ItemDepletedFuel().setUnlocalizedName("waste_zfb_mox").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_zfb_mox");
waste_plate_u233 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_u233").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_uranium"); waste_plate_u233 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_u233").setCreativeTab(null).setTextureName(RefStrings.MODID + ":waste_plate_uranium");
waste_plate_u235 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_u235").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_uranium"); waste_plate_u235 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_u235").setCreativeTab(null).setTextureName(RefStrings.MODID + ":waste_plate_uranium");
waste_plate_mox = new ItemDepletedFuel().setUnlocalizedName("waste_plate_mox").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_mox"); waste_plate_mox = new ItemDepletedFuel().setUnlocalizedName("waste_plate_mox").setCreativeTab(null).setTextureName(RefStrings.MODID + ":waste_plate_mox");
waste_plate_pu239 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_pu239").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_mox"); waste_plate_pu239 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_pu239").setCreativeTab(null).setTextureName(RefStrings.MODID + ":waste_plate_mox");
waste_plate_sa326 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_sa326").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_sa326"); waste_plate_sa326 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_sa326").setCreativeTab(null).setTextureName(RefStrings.MODID + ":waste_plate_sa326");
waste_plate_ra226be = new ItemDepletedFuel().setUnlocalizedName("waste_plate_ra226be").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_ra226be"); waste_plate_ra226be = new ItemDepletedFuel().setUnlocalizedName("waste_plate_ra226be").setCreativeTab(null).setTextureName(RefStrings.MODID + ":waste_plate_ra226be");
waste_plate_pu238be = new ItemDepletedFuel().setUnlocalizedName("waste_plate_pu238be").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_pu238be"); waste_plate_pu238be = new ItemDepletedFuel().setUnlocalizedName("waste_plate_pu238be").setCreativeTab(null).setTextureName(RefStrings.MODID + ":waste_plate_pu238be");
pile_rod_uranium = new ItemPileRod().setUnlocalizedName("pile_rod_uranium").setCreativeTab(null).setTextureName(RefStrings.MODID + ":pile_rod_uranium"); pile_rod_uranium = new ItemPileRod().setUnlocalizedName("pile_rod_uranium").setCreativeTab(null).setTextureName(RefStrings.MODID + ":pile_rod_uranium");
pile_rod_pu239 = new ItemPileRod().setUnlocalizedName("pile_rod_pu239").setCreativeTab(null).setTextureName(RefStrings.MODID + ":pile_rod_pu239"); pile_rod_pu239 = new ItemPileRod().setUnlocalizedName("pile_rod_pu239").setCreativeTab(null).setTextureName(RefStrings.MODID + ":pile_rod_pu239");

View File

@ -135,6 +135,7 @@ ass.factorioChip=Minimalisten-Schaltkreise
ass.nitra=Nitra zu Munition ass.nitra=Nitra zu Munition
autoswitch=Teil der Rezeptgruppe "%s"$Rezept ändert sich basierend auf das erste Item autoswitch=Teil der Rezeptgruppe "%s"$Rezept ändert sich basierend auf das erste Item
autoswitch.crushing=Fels-Zerkleinerung
autoswitch.cyclotron=Zyklotron-Pulverkisten autoswitch.cyclotron=Zyklotron-Pulverkisten
autoswitch.pile=Wiederaufbereitung Chicago-Pile-Brennstoff autoswitch.pile=Wiederaufbereitung Chicago-Pile-Brennstoff
autoswitch.pilerod=Chicago-Pile-Brennstoff autoswitch.pilerod=Chicago-Pile-Brennstoff
@ -323,6 +324,7 @@ container.machinePrecAss=Präzisions-Montagemaschine
container.machinePUREX=PUREX container.machinePUREX=PUREX
container.machinePyroOven=Pyrolyseofen container.machinePyroOven=Pyrolyseofen
container.machineRefinery=Ölraffinerie container.machineRefinery=Ölraffinerie
container.machineRockMill=Steinmühle
container.machineRotaryFurnace=Rotationshochofen container.machineRotaryFurnace=Rotationshochofen
container.machineSelenium=Hochleistungs-Sternmotor container.machineSelenium=Hochleistungs-Sternmotor
container.machineShredder=Brecher container.machineShredder=Brecher
@ -3765,6 +3767,8 @@ rbmk.rod.xenon=Xenonvergiftung: %s
rbmk.rod.coreTemp=Kerntemperatur: %s rbmk.rod.coreTemp=Kerntemperatur: %s
rbmk.rod.skinTemp=Außentemperatur: %s / %s rbmk.rod.skinTemp=Außentemperatur: %s / %s
rock.crushing=Zerkleinern von %s
shape.barrelHeavy=Schwerer Lauf shape.barrelHeavy=Schwerer Lauf
shape.barrelLight=Leichter Lauf shape.barrelLight=Leichter Lauf
shape.billet=Billet shape.billet=Billet
@ -4537,7 +4541,7 @@ tile.machine_radgen.name=Strahlenbetriebener Generator
tile.machine_reactor.name=Brutreaktor (LEGACY) tile.machine_reactor.name=Brutreaktor (LEGACY)
tile.machine_reactor_small.name=Atomreaktor (LEGACY) tile.machine_reactor_small.name=Atomreaktor (LEGACY)
tile.machine_refinery.name=Ölraffinerie tile.machine_refinery.name=Ölraffinerie
tile.machine_reix_mainframe.name=Rei-X Hauptrechner (WIP) tile.machine_rockmill.name=Steinmühle
tile.machine_rotary_furnace.name=Rotationshochofen tile.machine_rotary_furnace.name=Rotationshochofen
tile.machine_rtg_blue.name=Konvektionsgenerator tile.machine_rtg_blue.name=Konvektionsgenerator
tile.machine_rtg_cyan.name=Schrabidium-Zerfallsenergie-Generator (WIP) tile.machine_rtg_cyan.name=Schrabidium-Zerfallsenergie-Generator (WIP)

View File

@ -190,6 +190,7 @@ ass.factorioChip=Minimalist Circuits
ass.nitra=Nitra to Ammunition ass.nitra=Nitra to Ammunition
autoswitch=Part of auto switch group "%s"$Recipe changes based on first ingredient autoswitch=Part of auto switch group "%s"$Recipe changes based on first ingredient
autoswitch.crushing=Rock Crushing
autoswitch.cyclotron=Cyclotron Powder Boxes autoswitch.cyclotron=Cyclotron Powder Boxes
autoswitch.pile=Reprocessing Chicago Pile Rods autoswitch.pile=Reprocessing Chicago Pile Rods
autoswitch.pilerod=Chicago Pile Rods autoswitch.pilerod=Chicago Pile Rods
@ -724,6 +725,7 @@ container.machinePrecAss=Precision Assembly Machine
container.machinePUREX=PUREX container.machinePUREX=PUREX
container.machinePyroOven=Pyrolysis Oven container.machinePyroOven=Pyrolysis Oven
container.machineRefinery=Oil Refinery container.machineRefinery=Oil Refinery
container.machineRockMill=Rock Mill
container.machineRotaryFurnace=Rotary Furnace container.machineRotaryFurnace=Rotary Furnace
container.machineSelenium=Radial Performance Engine container.machineSelenium=Radial Performance Engine
container.machineShredder=Shredder container.machineShredder=Shredder
@ -4964,6 +4966,8 @@ rbmk.screen.rod=Control: %s
rbmk.screen.temp=Temp: %s rbmk.screen.temp=Temp: %s
rbmk.screen.xenon=Xenon: %s rbmk.screen.xenon=Xenon: %s
rock.crushing=Crushing of %s
satchip.frequency=Satellite frequency satchip.frequency=Satellite frequency
satchip.foeq=Gives you an achievement. That's it. satchip.foeq=Gives you an achievement. That's it.
satchip.gerald.desc=Single use.$Requires orbital module.$Melter of CPUs, bane of every server owner. satchip.gerald.desc=Single use.$Requires orbital module.$Melter of CPUs, bane of every server owner.
@ -5824,7 +5828,7 @@ tile.machine_radiolysis.name=Radioisotope Thermoelectric Generator and Radiolysi
tile.machine_reactor.name=Breeding Reactor (LEGACY) tile.machine_reactor.name=Breeding Reactor (LEGACY)
tile.machine_reactor_small.name=Research Reactor (LEGACY) tile.machine_reactor_small.name=Research Reactor (LEGACY)
tile.machine_refinery.name=Oil Refinery tile.machine_refinery.name=Oil Refinery
tile.machine_reix_mainframe.name=Rei-X Mainframe (WIP) tile.machine_rockmill.name=Rock Mill
tile.machine_rotary_furnace.name=Rotary Furnace tile.machine_rotary_furnace.name=Rotary Furnace
tile.machine_rtg_blue.name=Convection Generator tile.machine_rtg_blue.name=Convection Generator
tile.machine_rtg_cyan.name=Schrabidium Decay Generator (WIP) tile.machine_rtg_cyan.name=Schrabidium Decay Generator (WIP)