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
* Wideband Radio Emission Detector Satellite
* Detects high-energy events like nuclear explosions, particle accelerator operations and radar from the entire map
* Not terribly accurate, positioning may be off by hundreds or thousands of blocks depending on the emission intensity
* Narrowband Emission Scanning Satellite
* Detects high-energy events like radar, particle accelerator operations, nuclear or fusion reactors
* Can pinpoint exact locations, but is limited in its field of view
## 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
* Rock mill
* Earlygame post-steel crusher type machine
* Can grind down various stones, gravel and sand into finer items while yielding byproduct
* Mainly intended to serve as an easy way to automate/bulk craft certain elements in earlygame before BOP
* While the byproduct chances are rather low and the recipe times are slow, the mills are easily scalable due to their low cost
* Comes with convenient stacking frame
* Ideal for skyblock/seablock type challenge runs, as it can be configured to serve as an Ex Nihilo substitute

View File

@ -68,6 +68,7 @@ public class OreDictManager {
public static final String KEY_LEAVES = "treeLeaves";
public static final String KEY_SAPLING = "treeSapling";
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_BLACK = "dyeBlack";

View File

@ -34,31 +34,90 @@ public class RockMillRecipes extends GenericRecipes<GenericRecipe> {
int duraShort = 100;
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))
.inputFluids(new FluidStack(Fluids.WATER, 250))
.outputItems(new ChanceOutputMulti(
new ChanceOutput(new ItemStack(Blocks.gravel), 95),
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))
.inputFluids(new FluidStack(Fluids.WATER, 250))
.outputItems(new ChanceOutputMulti(
new ChanceOutput(new ItemStack(Blocks.sand), 75),
new ChanceOutput(new ItemStack(Items.flint), 20),
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()))
.inputFluids(new FluidStack(Fluids.WATER, 250))
.outputItems(new ChanceOutputMulti(
new ChanceOutput(new ItemStack(Blocks.gravel), 25),
new ChanceOutput(new ItemStack(Items.clay_ball), 25),
new ChanceOutput(new ItemStack(ModBlocks.stone_resource, 1, 2), 25),
new ChanceOutput(new ItemStack(ModBlocks.ore_titanium, 1, 2), 25)
)).setIconToFirstIngredient());
new ChanceOutput(new ItemStack(ModBlocks.ore_titanium), 25)
)).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;
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(
new AStack[] {
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_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_u235 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_u235").setCreativeTab(MainRegistry.partsTab).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_pu239 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_pu239").setCreativeTab(MainRegistry.partsTab).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_ra226be = new ItemDepletedFuel().setUnlocalizedName("waste_plate_ra226be").setCreativeTab(MainRegistry.partsTab).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_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(null).setTextureName(RefStrings.MODID + ":waste_plate_uranium");
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(null).setTextureName(RefStrings.MODID + ":waste_plate_mox");
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(null).setTextureName(RefStrings.MODID + ":waste_plate_ra226be");
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_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
autoswitch=Teil der Rezeptgruppe "%s"$Rezept ändert sich basierend auf das erste Item
autoswitch.crushing=Fels-Zerkleinerung
autoswitch.cyclotron=Zyklotron-Pulverkisten
autoswitch.pile=Wiederaufbereitung Chicago-Pile-Brennstoff
autoswitch.pilerod=Chicago-Pile-Brennstoff
@ -323,6 +324,7 @@ container.machinePrecAss=Präzisions-Montagemaschine
container.machinePUREX=PUREX
container.machinePyroOven=Pyrolyseofen
container.machineRefinery=Ölraffinerie
container.machineRockMill=Steinmühle
container.machineRotaryFurnace=Rotationshochofen
container.machineSelenium=Hochleistungs-Sternmotor
container.machineShredder=Brecher
@ -3765,6 +3767,8 @@ rbmk.rod.xenon=Xenonvergiftung: %s
rbmk.rod.coreTemp=Kerntemperatur: %s
rbmk.rod.skinTemp=Außentemperatur: %s / %s
rock.crushing=Zerkleinern von %s
shape.barrelHeavy=Schwerer Lauf
shape.barrelLight=Leichter Lauf
shape.billet=Billet
@ -4537,7 +4541,7 @@ tile.machine_radgen.name=Strahlenbetriebener Generator
tile.machine_reactor.name=Brutreaktor (LEGACY)
tile.machine_reactor_small.name=Atomreaktor (LEGACY)
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_rtg_blue.name=Konvektionsgenerator
tile.machine_rtg_cyan.name=Schrabidium-Zerfallsenergie-Generator (WIP)

View File

@ -190,6 +190,7 @@ ass.factorioChip=Minimalist Circuits
ass.nitra=Nitra to Ammunition
autoswitch=Part of auto switch group "%s"$Recipe changes based on first ingredient
autoswitch.crushing=Rock Crushing
autoswitch.cyclotron=Cyclotron Powder Boxes
autoswitch.pile=Reprocessing Chicago Pile Rods
autoswitch.pilerod=Chicago Pile Rods
@ -724,6 +725,7 @@ container.machinePrecAss=Precision Assembly Machine
container.machinePUREX=PUREX
container.machinePyroOven=Pyrolysis Oven
container.machineRefinery=Oil Refinery
container.machineRockMill=Rock Mill
container.machineRotaryFurnace=Rotary Furnace
container.machineSelenium=Radial Performance Engine
container.machineShredder=Shredder
@ -4964,6 +4966,8 @@ rbmk.screen.rod=Control: %s
rbmk.screen.temp=Temp: %s
rbmk.screen.xenon=Xenon: %s
rock.crushing=Crushing of %s
satchip.frequency=Satellite frequency
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.
@ -5824,7 +5828,7 @@ tile.machine_radiolysis.name=Radioisotope Thermoelectric Generator and Radiolysi
tile.machine_reactor.name=Breeding Reactor (LEGACY)
tile.machine_reactor_small.name=Research Reactor (LEGACY)
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_rtg_blue.name=Convection Generator
tile.machine_rtg_cyan.name=Schrabidium Decay Generator (WIP)