From ac7e303f926ff3a5424170a0076d9ce832f5bba4 Mon Sep 17 00:00:00 2001 From: Boblet Date: Wed, 22 Apr 2026 14:50:39 +0200 Subject: [PATCH] big oily men eating beans .com --- changelog | 17 ++++++++++ src/main/java/com/hbm/blocks/ModBlocks.java | 8 ++--- .../com/hbm/blocks/generic/BlockDepthOre.java | 11 ++----- .../java/com/hbm/blocks/generic/BlockOre.java | 7 +++++ src/main/java/com/hbm/config/MobConfig.java | 2 ++ .../java/com/hbm/crafting/MineralRecipes.java | 8 +++-- .../hbm/inventory/recipes/MixerRecipes.java | 1 + .../java/com/hbm/main/CraftingManager.java | 2 -- .../java/com/hbm/main/ModEventHandler.java | 10 +++--- .../hbm/tileentity/TileEntityLoadedBase.java | 11 +++++++ .../hbm/tileentity/TileEntityMachineBase.java | 5 --- .../network/TileEntityPipelineBase.java | 8 ++++- .../hbm/world/gen/terrain/MapGenBubble.java | 31 ++++++++----------- 13 files changed, 76 insertions(+), 45 deletions(-) diff --git a/changelog b/changelog index e69de29bb..cbc54f6ca 100644 --- a/changelog +++ b/changelog @@ -0,0 +1,17 @@ +## Changed +* Updated russian and chinese localization +* Oil bubbles are now 3x more common in deserts (biomes with a temperature value of 2 and rainfall of 0) +* Oil bubbles now have a 50% chance of spawning a surface indicator (similar to bedrock oil but still distinct) +* Oil deposits will never drop themselves, they always produce tar when mined +* Any tar type can now be turned into bitumen in a mixer (with worse efficiency compared to a liquefactor) +* RoR levers and indicator lights now have OpenComputers integration +* Alexandrite dropped with fortune is now capped at 2 gems per ore +* Added a config option for decreasing the soot requirement for skeleton guns (or rather, for the calculation, this number is added to the actual soot value, simulating a higher value) +* Radioisotope cells and PT cells are now deprecated, and can no longer be crafted + * Existing cells will continue to work for now +* If two pipe anchors are connected, one having a type set and one still being "none", instead of erroring, the "none" pipe will assume the other one's type + +## Fixed +* Fixed uncrafting of the nickel RTG pellet not respecting item metadata +* Tile entities that use fluids should now force the chunk they are in to be written to disk when unloaded + * This should fix the issue where systems that constantly move fluids around may not properly save to disk \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 9c6987580..eeff5c1bb 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -918,8 +918,8 @@ public class ModBlocks { public static Block field_disturber; public static Block machine_rtg_grey; - public static Block machine_minirtg; - public static Block machine_powerrtg; + @Deprecated public static Block machine_minirtg; + @Deprecated public static Block machine_powerrtg; public static Block machine_radiolysis; public static Block machine_hephaestus; @@ -1844,8 +1844,8 @@ public class ModBlocks { field_disturber = new MachineFieldDisturber().setBlockName("field_disturber").setHardness(5.0F).setResistance(200.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":field_disturber"); machine_rtg_grey = new MachineRTG(Material.iron).setBlockName("machine_rtg_grey").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rtg"); - machine_minirtg = new MachineMiniRTG(Material.iron).setBlockName("machine_minirtg").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rtg_cell"); - machine_powerrtg = new MachineMiniRTG(Material.iron).setBlockName("machine_powerrtg").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rtg_polonium"); + machine_minirtg = new MachineMiniRTG(Material.iron).setBlockName("machine_minirtg").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rtg_cell"); + machine_powerrtg = new MachineMiniRTG(Material.iron).setBlockName("machine_powerrtg").setHardness(5.0F).setResistance(10.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":rtg_polonium"); machine_radiolysis = new MachineRadiolysis(Material.iron).setBlockName("machine_radiolysis").setHardness(10.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel_machine"); machine_hephaestus = new MachineHephaestus(Material.iron).setBlockName("machine_hephaestus").setHardness(10.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel_machine"); diff --git a/src/main/java/com/hbm/blocks/generic/BlockDepthOre.java b/src/main/java/com/hbm/blocks/generic/BlockDepthOre.java index 50ab18551..89d1dc0e7 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockDepthOre.java +++ b/src/main/java/com/hbm/blocks/generic/BlockDepthOre.java @@ -58,13 +58,8 @@ public class BlockDepthOre extends BlockDepth { @Override public int quantityDroppedWithBonus(int fortune, Random rand) { - - int mult = rand.nextInt(fortune + 2) - 1; - - if(mult < 0) { - mult = 0; - } - - return this.quantityDropped(rand) * (mult + 1); + int quantity = this.quantityDropped(rand) * (Math.max(rand.nextInt(fortune + 2) - 1, 0) + 1); + if(this == ModBlocks.ore_alexandrite && quantity > 2) quantity = 2; + return quantity; } } diff --git a/src/main/java/com/hbm/blocks/generic/BlockOre.java b/src/main/java/com/hbm/blocks/generic/BlockOre.java index f0ad07251..9e613c75b 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockOre.java +++ b/src/main/java/com/hbm/blocks/generic/BlockOre.java @@ -14,6 +14,7 @@ import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; @@ -40,6 +41,12 @@ public class BlockOre extends Block { this.setTickRandomly(true); this.rad = rad; } + + @Override + public boolean canSilkHarvest(World world, EntityPlayer player, int x, int y, int z, int meta) { + if(this == ModBlocks.ore_oil) return false; + return super.canSilkHarvest(world, player, x, y, z, meta); + } @Spaghetti("*throws up*") @Override diff --git a/src/main/java/com/hbm/config/MobConfig.java b/src/main/java/com/hbm/config/MobConfig.java index 43c2d5526..f5b583df0 100644 --- a/src/main/java/com/hbm/config/MobConfig.java +++ b/src/main/java/com/hbm/config/MobConfig.java @@ -28,6 +28,7 @@ public class MobConfig { public static boolean enableDucks = true; public static boolean enableMobGear = true; public static boolean enableMobWeapons = true; + public static double mobWeaponSootReduction = 0; public static boolean enableHives = true; public static int hiveSpawn = 256; @@ -100,6 +101,7 @@ public class MobConfig { enableDucks = CommonConfig.createConfigBool(config, CATEGORY, "12.D00_enableDucks", "Whether pressing O should allow the player to duck", true); enableMobGear = CommonConfig.createConfigBool(config, CATEGORY, "12.D01_enableMobGear", "Whether zombies and skeletons should have additional gear when spawning", true); enableMobWeapons = CommonConfig.createConfigBool(config, CATEGORY, "12.D02_enableMobWeapons", "Whether skeletons should have bows replaced with guns when spawning at higher soot levels", true); + mobWeaponSootReduction = CommonConfig.createConfigDouble(config, CATEGORY, "12.D03_mobWeaponSootReduction", "Reduces the amount of soot needed for skeleton guns to appear", 0D); enableHives = CommonConfig.createConfigBool(config, CATEGORY, "12.G00_enableHives", "Whether glyphid hives should spawn", true); hiveSpawn = CommonConfig.createConfigInt(config, CATEGORY, "12.G01_hiveSpawn", "The average amount of chunks per hive", 256); diff --git a/src/main/java/com/hbm/crafting/MineralRecipes.java b/src/main/java/com/hbm/crafting/MineralRecipes.java index 760b81e1d..03cd4afd2 100644 --- a/src/main/java/com/hbm/crafting/MineralRecipes.java +++ b/src/main/java/com/hbm/crafting/MineralRecipes.java @@ -250,9 +250,11 @@ public class MineralRecipes { GameRegistry.addShapelessRecipe(new ItemStack(ModItems.ingot_mercury, 2), new Object[] { new ItemStack(ModItems.pellet_rtg_depleted, 1, DepletedRTGMaterial.MERCURY.ordinal()) }); GameRegistry.addShapelessRecipe(new ItemStack(ModItems.billet_neptunium, 3), new Object[] { new ItemStack(ModItems.pellet_rtg_depleted, 1, DepletedRTGMaterial.NEPTUNIUM.ordinal()) }); GameRegistry.addShapelessRecipe(new ItemStack(ModItems.billet_zirconium, 3), new Object[] { new ItemStack(ModItems.pellet_rtg_depleted, 1, DepletedRTGMaterial.ZIRCONIUM.ordinal()) }); - if(OreDictionary.doesOreNameExist("ingotNickel")) - GameRegistry.addShapelessRecipe(new ItemStack(OreDictionary.getOres("ingotNickel").get(0).getItem(), 2), new Object[] { new ItemStack(ModItems.pellet_rtg_depleted, 1, DepletedRTGMaterial.NICKEL.ordinal()) }); - + if(OreDictionary.doesOreNameExist("ingotNickel")) { + ItemStack nickel = OreDictionary.getOres("ingotNickel").get(0).copy(); + nickel.stackSize = 2; + GameRegistry.addShapelessRecipe(nickel, new Object[] { new ItemStack(ModItems.pellet_rtg_depleted, 1, DepletedRTGMaterial.NICKEL.ordinal()) }); + } GameRegistry.addRecipe(new ItemStack(Item.getItemFromBlock(ModBlocks.block_copper), 1), new Object[] { "###", "###", "###", '#', ModItems.ingot_copper }); GameRegistry.addRecipe(new ItemStack(Item.getItemFromBlock(ModBlocks.block_fluorite), 1), new Object[] { "###", "###", "###", '#', ModItems.fluorite }); GameRegistry.addRecipe(new ItemStack(Item.getItemFromBlock(ModBlocks.block_niter), 1), new Object[] { "###", "###", "###", '#', ModItems.niter }); diff --git a/src/main/java/com/hbm/inventory/recipes/MixerRecipes.java b/src/main/java/com/hbm/inventory/recipes/MixerRecipes.java index e20cf1b56..dbf42353e 100644 --- a/src/main/java/com/hbm/inventory/recipes/MixerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/MixerRecipes.java @@ -101,6 +101,7 @@ public class MixerRecipes extends SerializableRecipe { register(Fluids.PERFLUOROMETHYL, new MixerRecipe(1000, 20).setStack1(new FluidStack(Fluids.PETROLEUM, 1000)).setStack2(new FluidStack(Fluids.UNSATURATEDS, 500)).setSolid(new OreDictStack(F.dust()))); + register(Fluids.BITUMEN, new MixerRecipe(50, 20).setSolid(new OreDictStack(ANY_TAR.any()))); } public static void register(FluidType type, MixerRecipe... rec) { diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 9ca59e364..b086ded17 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -643,8 +643,6 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.rad_absorber, 1, EnumAbsorberTier.GREEN.ordinal()),new Object[] { "ICI", "CPC", "ICI", 'I', ANY_PLASTIC.ingot(), 'C', ModItems.powder_desh_mix,'P', new ItemStack(ModBlocks.rad_absorber, 1, EnumAbsorberTier.RED.ordinal()) }); addRecipeAuto(new ItemStack(ModBlocks.rad_absorber, 1, EnumAbsorberTier.PINK.ordinal()), new Object[] { "ICI", "CPC", "ICI", 'I', BIGMT.ingot(), 'C', ModItems.powder_nitan_mix,'P', new ItemStack(ModBlocks.rad_absorber, 1, EnumAbsorberTier.GREEN.ordinal()) }); addRecipeAuto(new ItemStack(ModBlocks.decon, 1), new Object[] { "BGB", "SAS", "BSB", 'B', BE.ingot(), 'G', Blocks.iron_bars, 'S', STEEL.ingot(), 'A', new ItemStack(ModBlocks.rad_absorber, 1, EnumAbsorberTier.BASE.ordinal()) }); - addRecipeAuto(new ItemStack(ModBlocks.machine_minirtg, 1), new Object[] { "LLL", "PPP", "TRT", 'L', PB.plate(), 'P', PU238.billet(), 'T', ModItems.thermo_element, 'R', ModItems.rtg_unit }); - addRecipeAuto(new ItemStack(ModBlocks.machine_powerrtg, 1), new Object[] { "SRS", "PTP", "SRS", 'S', STAR.ingot(), 'R', ModItems.rtg_unit, 'P', PO210.billet(), 'T', TS.dust() }); addRecipeAuto(new ItemStack(ModBlocks.pink_planks, 4), new Object[] { "W", 'W', ModBlocks.pink_log }); addRecipeAuto(new ItemStack(ModBlocks.pink_slab, 6), new Object[] { "WWW", 'W', ModBlocks.pink_planks }); diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index 525105e46..2284c4c70 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -426,8 +426,10 @@ public class ModEventHandler { } private static ItemStack getSkelegun(float soot, Random rand) { - if (!MobConfig.enableMobWeapons) return null; - if (rand.nextDouble() > Math.log(soot) * 0.25) return null; + if(!MobConfig.enableMobWeapons) return null; + + soot -= MobConfig.mobWeaponSootReduction; + if(rand.nextDouble() > Math.log(soot) * 0.25) return null; ArrayList pool = new ArrayList<>(); @@ -436,9 +438,9 @@ public class ModEventHandler { pool.add(new WeightedRandomObject(null, 20)); } else if(soot > 0.3 && soot < 1) { pool.addAll(MobUtil.slotPoolGuns.get(0.3)); - } else if (soot < 3) { + } else if(soot < 3) { pool.addAll(MobUtil.slotPoolGuns.get(1D)); - } else if (soot < 5) { + } else if(soot < 5) { pool.addAll(MobUtil.slotPoolGuns.get(3D)); } else { pool.addAll(MobUtil.slotPoolGuns.get(5D)); diff --git a/src/main/java/com/hbm/tileentity/TileEntityLoadedBase.java b/src/main/java/com/hbm/tileentity/TileEntityLoadedBase.java index f6f0698a3..9ba41c097 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityLoadedBase.java +++ b/src/main/java/com/hbm/tileentity/TileEntityLoadedBase.java @@ -5,6 +5,7 @@ import com.hbm.packet.toclient.BufPacket; import com.hbm.sound.AudioWrapper; import com.hbm.util.fauxpointtwelve.BlockPos; +import api.hbm.fluidmk2.IFluidUserMK2; import api.hbm.tile.ILoadedTile; import cpw.mods.fml.common.network.NetworkRegistry; import io.netty.buffer.ByteBuf; @@ -28,6 +29,13 @@ public class TileEntityLoadedBase extends TileEntity implements ILoadedTile, IBu public void onChunkUnload() { super.onChunkUnload(); this.isLoaded = false; + + if(this instanceof IFluidUserMK2) markChanged(); + } + + /** The "chunks is modified, pls don't forget to save me" effect of markDirty, minus the block updates */ + public void markChanged() { + this.worldObj.markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this); } public AudioWrapper createAudioLoop() { return null; } @@ -44,6 +52,9 @@ public class TileEntityLoadedBase extends TileEntity implements ILoadedTile, IBu super.readFromNBT(nbt); this.muffled = nbt.getBoolean("muffled"); this.tilted = nbt.getBoolean("tilted"); + + // one more for good measure + if(this instanceof IFluidUserMK2) markChanged(); } @Override diff --git a/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java b/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java index 7d0805030..0fbdaaba4 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java +++ b/src/main/java/com/hbm/tileentity/TileEntityMachineBase.java @@ -21,11 +21,6 @@ public abstract class TileEntityMachineBase extends TileEntityLoadedBase impleme slots = new ItemStack[slotCount]; } - /** The "chunks is modified, pls don't forget to save me" effect of markDirty, minus the block updates */ - public void markChanged() { - this.worldObj.markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this); - } - @Override public int getSizeInventory() { return slots.length; diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityPipelineBase.java b/src/main/java/com/hbm/tileentity/network/TileEntityPipelineBase.java index ad64da847..424528703 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityPipelineBase.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityPipelineBase.java @@ -4,6 +4,7 @@ import java.util.ArrayList; import java.util.List; import com.hbm.inventory.fluid.FluidType; +import com.hbm.inventory.fluid.Fluids; import com.hbm.uninos.UniNodespace; import com.hbm.util.fauxpointtwelve.BlockPos; import com.hbm.util.fauxpointtwelve.DirPos; @@ -92,13 +93,18 @@ public abstract class TileEntityPipelineBase extends TileEntityPipeBaseNT { * 0: Connected
* 1: Connections are incompatible
* 2: Both parties are the same block
- * 3: Connection length exceeds maximum + * 3: Connection length exceeds maximum
* 4: Pipeline fluid types do not match */ public static int canConnect(TileEntityPipelineBase first, TileEntityPipelineBase second) { if(first.getConnectionType() != second.getConnectionType()) return 1; if(first == second) return 2; + + // connect with NONE type anchors + if(first.type == Fluids.NONE && second.type != first.type) first.setType(second.type); + if(second.type == Fluids.NONE && first.type != second.type) second.setType(first.type); + if(first.type != second.type) return 4; double len = Math.min(first.getMaxPipeLength(), second.getMaxPipeLength()); diff --git a/src/main/java/com/hbm/world/gen/terrain/MapGenBubble.java b/src/main/java/com/hbm/world/gen/terrain/MapGenBubble.java index 2e064bfc6..b9a470376 100644 --- a/src/main/java/com/hbm/world/gen/terrain/MapGenBubble.java +++ b/src/main/java/com/hbm/world/gen/terrain/MapGenBubble.java @@ -7,7 +7,6 @@ import com.hbm.blocks.generic.BlockDeadPlant.EnumDeadPlantType; import com.hbm.world.gen.MapGenBaseMeta; import net.minecraft.block.Block; -import net.minecraft.block.material.Material; import net.minecraft.init.Blocks; import net.minecraft.util.MathHelper; import net.minecraft.world.World; @@ -27,9 +26,6 @@ public class MapGenBubble extends MapGenBaseMeta { public int minY = 0; public int rangeY = 25; - - public int spotWidth = 10; - public int spotCount = 50; public boolean fuzzy; @@ -51,7 +47,13 @@ public class MapGenBubble extends MapGenBaseMeta { @Override protected void func_151538_a(World world, int offsetX, int offsetZ, int chunkX, int chunkZ, Block[] blocks) { - if(rand.nextInt(frequency) == frequency - 1 && (canSpawn == null || canSpawn.test(world.getBiomeGenForCoords(offsetX * 16, offsetZ * 16)))) { + + int effecFreq = frequency; + BiomeGenBase biome = world.getBiomeGenForCoords(offsetX * 16, offsetZ * 16); + if(biome.temperature >= 2 && biome.rainfall < 0.1) effecFreq /= 3; + if(effecFreq <= 0) effecFreq = 1; + + if(rand.nextInt(effecFreq) == effecFreq - 1 && (canSpawn == null || canSpawn.test(biome))) { int xCoord = (chunkX - offsetX) * 16 + rand.nextInt(16); int zCoord = (chunkZ - offsetZ) * 16 + rand.nextInt(16); @@ -82,7 +84,7 @@ public class MapGenBubble extends MapGenBaseMeta { } } - if(rand.nextInt(2) == 0) { + if(rand.nextInt(1) == 0) { addSurfaceSpot(xCoord, zCoord, blocks); } } @@ -91,6 +93,8 @@ public class MapGenBubble extends MapGenBaseMeta { protected void addSurfaceSpot(int xCoord, int zCoord, Block[] blocks) { int deadMetaCount = EnumDeadPlantType.values().length; + int spotCount = 150; + int spotWidth = 7; // Add oil spot damage for(int i = 0; i < spotCount; i++) { @@ -103,22 +107,13 @@ public class MapGenBubble extends MapGenBaseMeta { // find ground level for(int y = 127; y >= 0; y--) { int index = (rx * 16 + rz) * 256 + y; - - if(blocks[index] != null) { - Material mat = blocks[index].getMaterial(); - // clean up obstructions in forests - if(mat == Material.leaves || mat == Material.wood || mat == Material.cactus) { - blocks[index] = Blocks.air; - metas[index] = 0; - } - } if(blocks[index] != null && blocks[index].isOpaqueCube()) { for(int oy = 1; oy > -3; oy--) { int subIndex = index + oy; int distSq = offX * offX + offZ * offZ; - boolean inner = distSq > (spotWidth / 3) * (spotWidth / 3); + boolean inner = distSq < (spotWidth / 2) * (spotWidth / 2); if(blocks[subIndex] == Blocks.grass || blocks[subIndex] == Blocks.dirt) { blocks[subIndex] = inner ? ModBlocks.dirt_oily : ModBlocks.dirt_dead; @@ -153,8 +148,8 @@ public class MapGenBubble extends MapGenBaseMeta { // and now for the hole(tm) for(int i = 1; i < 6; i++) { ForgeDirection dir = ForgeDirection.getOrientation(i); - int x = xCoord - dir.offsetX; - int z = zCoord - dir.offsetZ; + int x = dir.offsetX - xCoord; + int z = dir.offsetZ - zCoord; if(x >= 0 && x < 16 && z >= 0 && z < 16) { int solids = 0;