This commit is contained in:
HbmMods 2026-06-03 21:53:44 +02:00
parent 1043470ca6
commit 95fd600419
13 changed files with 17 additions and 137 deletions

100
changelog
View File

@ -1,98 +1,4 @@
## Added
* Redstone-over-Radio Terminal
* Allows commands to be sent manually, command line style
* Supports single commands and repeated ones (polling)
* Grenade machinegun
* 30rnd automatic 40mm grenade weapon firing at 120 RPS
* Can be upgraded with an auxiliary electric engine to double the firerate
* Automatic thresher
* A specialized machine for automatically harvesting crops in a 7x7 area
* Replaces the buzzsaw's temporary functionality to do just that (the buzzsaw now loses that ability)
* Drops harvested items using a chute instead of leaving them on the farmland
* When cutting down hemp, willows, and other NTM double plants, only the top part will be cut off, no matter where the thresher touches it
* Can also harvest items from sunflowers and tall grass without breaking the blocks
* Can also handle tall plants like cacti and sugar cane
* New big-ass tank
* Successor to the BAT9k
* Larger footprint, way more storage space
* Needs to be placed on a proper foundation or else it'll sink into the ground
* Legacy BAT9ks can be recycled in a tier 3 anvil
* AUTOCAL Automatic Calculator
* Highly advanced programmable RoR device
* Can send and receive signals and do calculations with the same system as NTM's calculator
* Vending machines
* Comes in snack machine and soda machine variants
* The machines can be purchased off of bobmazon for 64 caps each
* Use vending machine tokens as currency, which can be found occasionally in most structures
* New blast furnace
* 3x3 base, 7 blocks tall
* Can be accelerated with hot air blast (just compressed air in a boiler)
* The faster it is supplied with hot air blast, the faster it gets
* Uses smarter IO, one port can supply all slots without needing to configure anything or have multiple item inputs
* A firebox burning coal can already take the blast furnace to 130% speed (default speed with no blast at all is 50%)
* Produces flue gas, a new type of exhaust that can be burned
## Changed
* RoR graphs can now have their min and max bounds set to a fixed number
* This should make it easier to accurately tell the difference/scale of values when they exist in an expected range (for example, RBMK temperatures)
* RoR controllers now use polling by default, since state change is unable to actually perform a function unless the state changes, preventing repeated commands
* HE/RF converters now have a tooltip showing their buffered energy
* Updated the models of the cage lamp, fluorescent light and halogen lamp
* 528 mode now has a new config for enabling gravity on machines
* Machines not on solid ground will tilt, causing them to break
* Still a work in progress, not all machines make use of it yet
* The ZIRNOX for example will continue to operate when tilted, however the pipes will disconnect, resulting in a fatal loss of cooling
* Slightly adjusted the automatic buzzsaw's texture
* Mobs can no longer spawn on most versions of concrete
* Notable exceptions are mossy and cracked concrete bricks
* Increased the yield of lye from wood ash
* All fluid tanks larger than barrels now have dynamic IO speed instead of providing their entire contents instantly
* Tank fill will slow down the fuller the tank becomes, tank drain also slow downs as it gets emptier
* This means that multiple tanks in IO mode in the same network will still ping pong, but only a small portion of fluid will be "lost" (i.e. invisible due to subtick transfer operations)
* The stinger is now classified as a special weapon
* The carbine can now take a scope
* The battery socket now renders supports when a block is placed on top of it, allowing somewhat aesthetic stacking of sockets
* The bayonet weapon attachment now uses regular steel plates instead of weapon steel, making them available as early as the blast furnace
* Adjusted some 528 mode recipes
* Removed the template crates entirely for being literally useless
* Oil bubbles can no longer go down to Y:0, they now have a minimum center height of Y:15
* The automatic buzzsaw and thresher now have sound loops when active
* The shredder auto shotgun now uses the plasma damage type instead of laser
* Added "nitra to ammunition" recipe in the assembly machine, turning large piles of nitra into random casings/propellants
* Removed more unused blocks to free up block IDs
* Removed the old iron barrel
* Removed the factory hull blocks
* Removed the vacuum block that has been unused for like 5 years at this point
* Removed five of the 10 sturdy ladder variants because they were hella ugly anyway
* Added a new alternate recipe "instant aggregate" in the chemical plant, turning 16 cobblestone into 8 gravel and 8 sand
* 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
* Using state of the art anti-leave-the-screen technology, recipe tooltips (and most tooltips used by `GuiInfoScreen`) should no longer leave the screen
* This means that the recipe selector can now have the tooltip follow the mouse instead of being eternally stuck in the corner
* Recipe selector tooltips now have a nice orange and yellow border
* The nuclear charge and demolition nuclear grenade charge now need neutron reflectors
* Schrabidium grenade charges now use CMB steel instead of bronze
* The satellite base now only uses a medium thruster instead of a large one, making it no longer post pyrolysis
* The steel recipe in the crucible now requires flux
* The recipe is also now a fair bit slower (still faster than a blast furnace overall)
* Remodeled the catalytic reformer
* Crane structure
* Crane structure
## Fixed ## Fixed
* Fixed RoR graph showing the wrong name in the GUI * Fixed AUTOCAL's `listen` command failing if the buffer is empty
* Fixed polling option in RoR controllers reading dead signals * Fixed things not intended to be used in the blast furnace (scrap, lava) being usable fuels
* Fixed state change in RoR controllers not allowing repeat commands * Fixed blast furnace swallowing container items left behind by fuels, instead fuels with containers will not be accepted at all
* 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
* Fixed bricked furnace IO not working right

View File

@ -6,7 +6,6 @@ import com.hbm.blocks.ILookOverlay;
import com.hbm.blocks.ITooltipProvider; import com.hbm.blocks.ITooltipProvider;
import com.hbm.blocks.ModBlocks; import com.hbm.blocks.ModBlocks;
import com.hbm.config.ServerConfig; import com.hbm.config.ServerConfig;
import com.hbm.config.StructureConfig;
import com.hbm.interfaces.IBomb; import com.hbm.interfaces.IBomb;
import com.hbm.interfaces.ICopiable; import com.hbm.interfaces.ICopiable;
import com.hbm.lib.RefStrings; import com.hbm.lib.RefStrings;

View File

@ -10,7 +10,6 @@ import com.hbm.blocks.ILookOverlay;
import com.hbm.blocks.ITooltipProvider; import com.hbm.blocks.ITooltipProvider;
import com.hbm.blocks.ModBlocks; import com.hbm.blocks.ModBlocks;
import com.hbm.config.ServerConfig; import com.hbm.config.ServerConfig;
import com.hbm.config.StructureConfig;
import com.hbm.interfaces.IBomb; import com.hbm.interfaces.IBomb;
import com.hbm.interfaces.ICopiable; import com.hbm.interfaces.ICopiable;
import com.hbm.itempool.ItemPool; import com.hbm.itempool.ItemPool;
@ -38,7 +37,6 @@ import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory; import net.minecraft.inventory.IInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;

View File

@ -14,7 +14,6 @@ import org.lwjgl.input.Keyboard;
import com.hbm.blocks.IBlockMulti; import com.hbm.blocks.IBlockMulti;
import com.hbm.blocks.ILookOverlay; import com.hbm.blocks.ILookOverlay;
import com.hbm.blocks.ModBlocks; import com.hbm.blocks.ModBlocks;
import com.hbm.config.StructureConfig;
import com.hbm.interfaces.IControlReceiver; import com.hbm.interfaces.IControlReceiver;
import com.hbm.inventory.gui.element.GuiFileList; import com.hbm.inventory.gui.element.GuiFileList;
import com.hbm.lib.RefStrings; import com.hbm.lib.RefStrings;

View File

@ -1,7 +1,5 @@
package com.hbm.blocks.generic; package com.hbm.blocks.generic;
import com.hbm.blocks.IBlockSideRotation;
import com.hbm.blocks.ModBlocks;
import com.hbm.world.gen.util.LogicBlockActions; import com.hbm.world.gen.util.LogicBlockActions;
import com.hbm.world.gen.util.LogicBlockConditions; import com.hbm.world.gen.util.LogicBlockConditions;
import com.hbm.world.gen.util.LogicBlockInteractions; import com.hbm.world.gen.util.LogicBlockInteractions;

View File

@ -1,8 +1,5 @@
package com.hbm.blocks.generic; package com.hbm.blocks.generic;
import com.hbm.blocks.IBlockSideRotation;
import net.minecraft.block.material.Material;
public class LogicBlockInvis extends LogicBlock{ public class LogicBlockInvis extends LogicBlock{
public LogicBlockInvis() { public LogicBlockInvis() {

View File

@ -1,22 +1,14 @@
package com.hbm.items.tool; package com.hbm.items.tool;
import java.util.List; import java.util.List;
import java.util.Random;
import com.hbm.blocks.ModBlocks;
import com.hbm.config.GeneralConfig;
import com.hbm.itempool.ItemPool;
import com.hbm.itempool.ItemPoolsSingle;
import com.hbm.lib.Library; import com.hbm.lib.Library;
import com.hbm.main.MainRegistry;
import com.hbm.main.StructureManager; import com.hbm.main.StructureManager;
import com.hbm.tileentity.machine.storage.TileEntitySafe;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.WeightedRandomChestContent;
import net.minecraft.world.World; import net.minecraft.world.World;
public class ItemWandD extends Item { public class ItemWandD extends Item {
@ -33,8 +25,6 @@ public class ItemWandD extends Item {
int y = world.getHeightValue(pos.blockX, pos.blockZ); int y = world.getHeightValue(pos.blockX, pos.blockZ);
Random rand = new Random();
StructureManager.crane.build(world, pos.blockX, y, pos.blockZ); StructureManager.crane.build(world, pos.blockX, y, pos.blockZ);
/*if(world.getBlock(pos.blockX, y - 1, pos.blockZ).canPlaceTorchOnTop(world, pos.blockX, y - 1, pos.blockZ)) { /*if(world.getBlock(pos.blockX, y - 1, pos.blockZ).canPlaceTorchOnTop(world, pos.blockX, y - 1, pos.blockZ)) {
world.setBlock(pos.blockX, y, pos.blockZ, ModBlocks.safe, rand.nextInt(4) + 2, 2); world.setBlock(pos.blockX, y, pos.blockZ, ModBlocks.safe, rand.nextInt(4) + 2, 2);

View File

@ -81,19 +81,23 @@ public class ModuleBurnTime {
writer.name("D:heatBalefie").value(modHeat[modBalefire]); writer.name("D:heatBalefie").value(modHeat[modBalefire]);
} }
public int getBurnTime(ItemStack stack) { public int getBurnTime(ItemStack stack, double def) {
//int fuel = TileEntityFurnace.getItemBurnTime(stack);
int fuel = FuelHandler.getBurnTimeFromCache(stack); int fuel = FuelHandler.getBurnTimeFromCache(stack);
if(fuel == 0) return 0;
return (int) (fuel * getMod(stack, modTime, def));
}
if(fuel == 0) public int getBurnTime(ItemStack stack) {
return 0; return getBurnTime(stack, 1D);
}
return (int) (fuel * getMod(stack, modTime)); public int getBurnHeat(int base, ItemStack stack, double def) {
if(base <= 0) return 0;
return (int) (base * getMod(stack, modHeat));
} }
public int getBurnHeat(int base, ItemStack stack) { public int getBurnHeat(int base, ItemStack stack) {
if(base <= 0) return 0; return getBurnHeat(base, stack, 1D);
return (int) (base * getMod(stack, modHeat));
} }
public double getMod(ItemStack stack, double[] mod, double def) { public double getMod(ItemStack stack, double[] mod, double def) {

View File

@ -231,7 +231,7 @@ public class ParseMSES1 implements IParse {
// listens to an RoR signal using the supplied channel name and saves it to the buffer // listens to an RoR signal using the supplied channel name and saves it to the buffer
if(lower.startsWith("listen ")) { if(lower.startsWith("listen ")) {
if(line.length() <= 7 || ctx.buffer.isEmpty()) return EnumStatementReturn.PARAMETER_ERROR; if(line.length() <= 7) return EnumStatementReturn.PARAMETER_ERROR;
RTTYChannel chan = RTTYSystem.listen(ctx.world, substitute(ctx, line.substring(7))); RTTYChannel chan = RTTYSystem.listen(ctx.world, substitute(ctx, line.substring(7)));
if(chan != null) ctx.buffer = chan.signal + ""; if(chan != null) ctx.buffer = chan.signal + "";
return EnumStatementReturn.OK; return EnumStatementReturn.OK;

View File

@ -199,7 +199,8 @@ public class TileEntityMachineBlastFurnace extends TileEntityMachineBase impleme
} }
public int getBurnTime(ItemStack stack) { public int getBurnTime(ItemStack stack) {
return burnModule.getBurnHeat(burnModule.getBurnTime(stack), stack); if(stack.getItem().hasContainerItem(stack)) return 0;
return burnModule.getBurnHeat(burnModule.getBurnTime(stack, 0D), stack, 0D);
} }
@Override @Override

View File

@ -6,7 +6,6 @@ import java.util.function.Function;
import java.util.function.Predicate; import java.util.function.Predicate;
import com.hbm.config.ServerConfig; import com.hbm.config.ServerConfig;
import com.hbm.config.StructureConfig;
import com.hbm.util.Tuple.Pair; import com.hbm.util.Tuple.Pair;
import com.hbm.util.Tuple.Quartet; import com.hbm.util.Tuple.Quartet;

View File

@ -6,7 +6,6 @@ import com.hbm.blocks.generic.LogicBlock;
import com.hbm.entity.mob.EntityUndeadSoldier; import com.hbm.entity.mob.EntityUndeadSoldier;
import com.hbm.items.ModItems; import com.hbm.items.ModItems;
import com.hbm.tileentity.bomb.TileEntityCharge; import com.hbm.tileentity.bomb.TileEntityCharge;
import com.hbm.tileentity.machine.TileEntityLockableBase;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.AxisAlignedBB;

View File

@ -5,15 +5,12 @@ import com.hbm.blocks.generic.LogicBlock;
import com.hbm.items.ModItems; import com.hbm.items.ModItems;
import com.hbm.potion.HbmPotion; import com.hbm.potion.HbmPotion;
import com.hbm.tileentity.machine.TileEntityLockableBase; import com.hbm.tileentity.machine.TileEntityLockableBase;
import com.hbm.tileentity.machine.storage.TileEntityCrateBase;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.potion.PotionEffect; import net.minecraft.potion.PotionEffect;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChatComponentText; import net.minecraft.util.ChatComponentText;
import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.Facing; import net.minecraft.util.Facing;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
@ -28,13 +25,8 @@ public class LogicBlockInteractions {
public static LinkedHashMap<String, Consumer<Object[]>> interactions; public static LinkedHashMap<String, Consumer<Object[]>> interactions;
public static Consumer<Object[]> TEST = (array) -> { public static Consumer<Object[]> TEST = (array) -> {
World world = (World) array[0];
LogicBlock.TileEntityLogicBlock logic = (LogicBlock.TileEntityLogicBlock) array[1]; LogicBlock.TileEntityLogicBlock logic = (LogicBlock.TileEntityLogicBlock) array[1];
int x = (int) array[2];
int y = (int) array[3];
int z = (int) array[4];
EntityPlayer player = (EntityPlayer) array[5]; EntityPlayer player = (EntityPlayer) array[5];
int side = (int) array[6];
if(logic.phase > 1) return; if(logic.phase > 1) return;
@ -62,14 +54,12 @@ public class LogicBlockInteractions {
public static Consumer<Object[]> POWER_LOCK = (array) -> { public static Consumer<Object[]> POWER_LOCK = (array) -> {
World world = (World) array[0]; World world = (World) array[0];
LogicBlock.TileEntityLogicBlock logic = (LogicBlock.TileEntityLogicBlock) array[1];
EntityPlayer player = (EntityPlayer) array[5]; EntityPlayer player = (EntityPlayer) array[5];
int x = (int) array[2]; int x = (int) array[2];
int y = (int) array[3]; int y = (int) array[3];
int z = (int) array[4]; int z = (int) array[4];
IEnergyHandlerMK2 handler = null; IEnergyHandlerMK2 handler = null;
ForgeDirection parallel = logic.direction.getRotation(ForgeDirection.UP);
for (int i1 = 0; i1 < 6; ++i1) { for (int i1 = 0; i1 < 6; ++i1) {
if(world.getTileEntity(x + Facing.offsetsXForSide[i1], y + Facing.offsetsYForSide[i1], z + Facing.offsetsZForSide[i1]) instanceof IEnergyHandlerMK2) { if(world.getTileEntity(x + Facing.offsetsXForSide[i1], y + Facing.offsetsYForSide[i1], z + Facing.offsetsZForSide[i1]) instanceof IEnergyHandlerMK2) {