uh oh, the ZUNpet is kicking in

This commit is contained in:
HbmMods 2026-08-09 18:11:38 +02:00
parent 88d5926c2e
commit f23fdda794
8 changed files with 91 additions and 10 deletions

View File

@ -5,4 +5,20 @@
* 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
* Ideal for skyblock/seablock type challenge runs, as it can be configured to serve as an Ex Nihilo substitute
* Can also perform the sand and colloid to clay recipe of the acidizer, but at a lower efficiency
## Changed
* Updated russian localization
* The cargo elevator can now be controlled using RoR, allowing the platform to stop at certain heights
* Updated the pepperbox textures
* The wood now looks more like wood and less like plastic
* The bronze parts now have more depth
* Conveyor items being deleted due to cramming can now be configured with the server config `CONVEYOR_CRAM_MAX`, the default still being 25
* Conveyor belts being destroyed due to item cramming can now be configured with the server config `CONVEYOR_CRAM_EXPLODE`, it is still on by default
* Conveyor items will no longer break any belts, even with the config enabled, if the conveyor item entities have existed for less than one cram check cycle
* This means that items that have piled up due to chunk loading should now safely self-destruct without breaking conveyor lines
## Fixed
* Fixed pollution detector localization not working, showing only error messages instead of the pollution type names
* Fixed un-clamped gaussian random use on the wideband detector satellite, causing uncommon detections with inaccuracy exceeding the intended amount

View File

@ -23,6 +23,8 @@ public class ServerConfig extends RunningConfig {
public static ConfigWrapper<Boolean> ENABLE_MKU = new ConfigWrapper(true);
public static ConfigWrapper<Boolean> STRUCTURE_DEBUG = new ConfigWrapper(false);
public static ConfigWrapper<Integer> AUTOCAL_MAX_CLOCK = new ConfigWrapper(20);
public static ConfigWrapper<Integer> CONVEYOR_CRAM_MAX = new ConfigWrapper(25);
public static ConfigWrapper<Boolean> CONVEYOR_CRAM_EXPLODE = new ConfigWrapper(true);
private static void initDefaults() {
configMap.put("DAMAGE_COMPATIBILITY_MODE", DAMAGE_COMPATIBILITY_MODE);
@ -38,6 +40,8 @@ public class ServerConfig extends RunningConfig {
configMap.put("ENABLE_MKU", ENABLE_MKU);
configMap.put("STRUCTURE_DEBUG", STRUCTURE_DEBUG);
configMap.put("AUTOCAL_MAX_CLOCK", AUTOCAL_MAX_CLOCK);
configMap.put("CONVEYOR_CRAM_MAX", CONVEYOR_CRAM_MAX);
configMap.put("CONVEYOR_CRAM_EXPLODE", CONVEYOR_CRAM_EXPLODE);
}
/** Initializes defaults, then reads the config file if it exists, then writes the config file. */

View File

@ -2,6 +2,7 @@ package com.hbm.entity.item;
import java.util.List;
import com.hbm.config.ServerConfig;
import com.hbm.explosion.vanillant.ExplosionVNT;
import com.hbm.explosion.vanillant.standard.ExplosionEffectTiny;
import com.hbm.lib.Library;
@ -84,7 +85,7 @@ public abstract class EntityMovingConveyorObject extends Entity {
// cram check every 20s
if((ticksExisted + this.getEntityId()) % 400 == 0) {
List<EntityMovingConveyorObject> objs = worldObj.getEntitiesWithinAABB(EntityMovingConveyorObject.class, this.boundingBox.expand(0.125, 0.125, 0.125));
if(objs.size() >= 25) {
if(objs.size() >= ServerConfig.CONVEYOR_CRAM_MAX.get()) {
for(EntityMovingConveyorObject obj : objs) obj.setDead();
ExplosionVNT vnt = new ExplosionVNT(worldObj, posX, posY + 0.125, posZ, 1, this);
vnt.setSFX(new ExplosionEffectTiny());
@ -92,7 +93,9 @@ public abstract class EntityMovingConveyorObject extends Entity {
int x = (int) Math.floor(posX);
int y = (int) Math.floor(posY);
int z = (int) Math.floor(posZ);
if(worldObj.getBlock(x, y, z) instanceof IConveyorBelt) worldObj.func_147480_a(x, y, z, false);
if(worldObj.getBlock(x, y, z) instanceof IConveyorBelt && this.ticksExisted > 400 && ServerConfig.CONVEYOR_CRAM_EXPLODE.get())
worldObj.func_147480_a(x, y, z, false);
}
}

View File

@ -39,6 +39,7 @@ public class RockMillRecipes extends GenericRecipes<GenericRecipe> {
this.register(new GenericRecipe("rock.cobble").setup(duraShort, consumption).setNameWrapper("rock.crushing")
.inputItems(new OreDictStack(KEY_COBBLESTONE))
.inputFluids(new FluidStack(Fluids.WATER, 250))
.outputFluids(new FluidStack(Fluids.COLLOID, 250))
.outputItems(new ChanceOutputMulti(
new ChanceOutput(new ItemStack(Blocks.gravel), 95),
new ChanceOutput(new ItemStack(ModItems.powder_quartz), 5)
@ -47,6 +48,7 @@ public class RockMillRecipes extends GenericRecipes<GenericRecipe> {
this.register(new GenericRecipe("rock.gravel").setup(duraShort, consumption).setNameWrapper("rock.crushing")
.inputItems(new ComparableStack(Blocks.gravel))
.inputFluids(new FluidStack(Fluids.WATER, 250))
.outputFluids(new FluidStack(Fluids.COLLOID, 250))
.outputItems(new ChanceOutputMulti(
new ChanceOutput(new ItemStack(Blocks.sand), 75),
new ChanceOutput(new ItemStack(Items.flint), 20),
@ -56,6 +58,7 @@ public class RockMillRecipes extends GenericRecipes<GenericRecipe> {
this.register(new GenericRecipe("rock.sand").setup(duraShort, consumption).setNameWrapper("rock.crushing")
.inputItems(new OreDictStack(KEY_SAND))
.inputFluids(new FluidStack(Fluids.WATER, 250))
.outputFluids(new FluidStack(Fluids.COLLOID, 250))
.outputItems(new ChanceOutputMulti(
new ChanceOutput(new ItemStack(ModItems.dust), 90),
new ChanceOutput(new ItemStack(ModItems.powder_calcium), 5),
@ -65,6 +68,7 @@ public class RockMillRecipes extends GenericRecipes<GenericRecipe> {
this.register(new GenericRecipe("rock.netherrack").setup(duraShort, consumption).setNameWrapper("rock.crushing")
.inputItems(new ComparableStack(Blocks.netherrack))
.inputFluids(new FluidStack(Fluids.WATER, 250))
.outputFluids(new FluidStack(Fluids.LAVA, 100))
.outputItems(new ChanceOutputMulti(
new ChanceOutput(new ItemStack(Blocks.gravel), 50),
new ChanceOutput(new ItemStack(Blocks.soul_sand), 25),
@ -75,6 +79,7 @@ public class RockMillRecipes extends GenericRecipes<GenericRecipe> {
this.register(new GenericRecipe("rock.soulsand").setup(duraShort, consumption).setNameWrapper("rock.crushing")
.inputItems(new ComparableStack(Blocks.soul_sand))
.inputFluids(new FluidStack(Fluids.WATER, 250))
.outputFluids(new FluidStack(Fluids.LAVA, 100))
.outputItems(new ChanceOutputMulti(
new ChanceOutput(new ItemStack(Blocks.sand), 50),
new ChanceOutput(new ItemStack(ModItems.powder_fire), 25),
@ -86,6 +91,7 @@ public class RockMillRecipes extends GenericRecipes<GenericRecipe> {
this.register(new GenericRecipe("rock.schist").setup(duraLong, consumption).setNameWrapper("rock.crushing")
.inputItems(new ComparableStack(ModBlocks.stone_gneiss))
.inputFluids(new FluidStack(Fluids.WATER, 250))
.outputFluids(new FluidStack(Fluids.COLLOID, 250))
.outputItems(new ChanceOutputMulti(
new ChanceOutput(new ItemStack(Blocks.gravel), 50),
new ChanceOutput(new ItemStack(Blocks.sand), 10),
@ -98,6 +104,7 @@ public class RockMillRecipes extends GenericRecipes<GenericRecipe> {
this.register(new GenericRecipe("rock.hematite").setup(duraLong, consumption).setNameWrapper("rock.crushing")
.inputItems(new OreDictStack(HEMATITE.ore()))
.inputFluids(new FluidStack(Fluids.WATER, 250))
.outputFluids(new FluidStack(Fluids.COLLOID, 250))
.outputItems(new ChanceOutputMulti(
new ChanceOutput(new ItemStack(Blocks.gravel), 65),
new ChanceOutput(new ItemStack(ModItems.powder_iron), 25),
@ -107,6 +114,7 @@ public class RockMillRecipes extends GenericRecipes<GenericRecipe> {
this.register(new GenericRecipe("rock.bauxite").setup(duraLong, consumption).setNameWrapper("rock.crushing")
.inputItems(new OreDictStack(BAUXITE.ore()))
.inputFluids(new FluidStack(Fluids.WATER, 250))
.outputFluids(new FluidStack(Fluids.COLLOID, 250))
.outputItems(new ChanceOutputMulti(
new ChanceOutput(new ItemStack(Blocks.gravel), 25),
new ChanceOutput(new ItemStack(Items.clay_ball), 25),
@ -115,9 +123,8 @@ public class RockMillRecipes extends GenericRecipes<GenericRecipe> {
)).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))
.inputItems(new OreDictStack(KEY_SAND, 2))
.inputFluids(new FluidStack(Fluids.COLLOID, 2_500))
.outputItems(new ItemStack(Items.clay_ball, 4)));
}
}

View File

@ -1257,8 +1257,10 @@ public class ClientProxy extends ServerProxy {
if("blockdust".equals(data.getString("mode"))) {
Block b = Block.getBlockById(data.getInteger("block"));
fx = new net.minecraft.client.particle.EntityBlockDustFX(world, x, y, z, mX, mY + 0.2, mZ, b, 0);
byte meta = data.getByte("meta");
fx = new net.minecraft.client.particle.EntityBlockDustFX(world, x, y, z, mX, mY + 0.2, mZ, b, meta);
ReflectionHelper.setPrivateValue(EntityFX.class, fx, 10 + rand.nextInt(20), "particleMaxAge", "field_70547_e");
fx.setRBGColorF(0.8F, 0.8F, 0.8F);
}
if("colordust".equals(data.getString("mode"))) {

View File

@ -4,6 +4,7 @@ import java.util.ArrayList;
import java.util.List;
import api.hbm.redstoneoverradio.IRORInteractive;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
public class SatelliteDetector extends SatelliteBase {
@ -98,8 +99,8 @@ public class SatelliteDetector extends SatelliteBase {
intensity == BurstIntensity.MEDIUM ? INACCURACY_MEDIUM :
INARRCURACY_HIGH;
this.x += world.rand.nextGaussian() * inaccuracy;
this.z += world.rand.nextGaussian() * inaccuracy;
this.x += MathHelper.clamp_double(world.rand.nextGaussian(), -1, 1) * inaccuracy;
this.z += MathHelper.clamp_double(world.rand.nextGaussian(), -1, 1) * inaccuracy;
}
}

View File

@ -8,10 +8,13 @@ import com.hbm.inventory.gui.GUIMachineRockMill;
import com.hbm.inventory.recipes.loader.GenericRecipe;
import com.hbm.items.ModItems;
import com.hbm.lib.Library;
import com.hbm.main.MainRegistry;
import com.hbm.module.machine.ModuleMachineRockMill;
import com.hbm.tileentity.IGUIProvider;
import com.hbm.tileentity.TileEntityMachineBase;
import com.hbm.util.BobMathUtil;
import com.hbm.util.Vec3NT;
import com.hbm.util.fauxpointtwelve.BlockPos;
import com.hbm.util.fauxpointtwelve.DirPos;
import api.hbm.energymk2.IBatteryItem;
@ -20,8 +23,11 @@ import api.hbm.fluidmk2.IFluidStandardTransceiverMK2;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import io.netty.buffer.ByteBuf;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.inventory.Container;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.AxisAlignedBB;
@ -79,7 +85,7 @@ public class TileEntityMachineRockMill extends TileEntityMachineBase implements
this.maxPower = recipe.power * 100;
}
this.maxPower = BobMathUtil.max(this.power, this.maxPower, 1_000_000);
this.maxPower = BobMathUtil.max(this.power, this.maxPower, 2_500);
this.power = Library.chargeTEFromItems(slots, 0, power, maxPower);
@ -92,6 +98,16 @@ public class TileEntityMachineRockMill extends TileEntityMachineBase implements
this.rockMillModule.update(1D, 1D, true, slots[1]);
this.didProcess = this.rockMillModule.didProcess;
if(this.rockMillModule.markDirty) this.markDirty();
if(this.didProcess && (worldObj.getTotalWorldTime() + BlockPos.getIdentity(xCoord, yCoord, zCoord)) % 3 == 0) {
String sound = Blocks.stone.stepSound.getStepResourcePath();
if(recipe != null && recipe.getIcon().getItem() instanceof ItemBlock && ((ItemBlock) recipe.getIcon().getItem()).field_150939_a != null) {
sound = ((ItemBlock) recipe.getIcon().getItem()).field_150939_a.stepSound.getStepResourcePath();
}
worldObj.playSoundEffect(xCoord + 0.5, yCoord + 1.5, zCoord + 0.5, sound, this.getVolume(1.0F), 0.75F);
}
this.networkPackNT(100);
@ -112,6 +128,38 @@ public class TileEntityMachineRockMill extends TileEntityMachineBase implements
if(worldObj.getTotalWorldTime() % 20 == 0) {
frame = !worldObj.getBlock(xCoord, yCoord + 3, zCoord).isAir(worldObj, xCoord, yCoord + 3, zCoord);
}
if(this.didProcess && MainRegistry.proxy.me().getDistanceSq(xCoord + 0.5, yCoord + 1.5, zCoord + 0.5) < 35 * 35) {
GenericRecipe recipe = rockMillModule.getRecipe();
Block block = Blocks.gravel;
int meta = 0;
if(recipe != null) {
if(recipe.getIcon().getItem() instanceof ItemBlock) {
block = Block.getBlockFromItem(recipe.getIcon().getItem());
meta = recipe.getIcon().getItemDamage();
}
}
Vec3NT vec = new Vec3NT(1, 0, 0);
vec.rotateAroundYDeg(worldObj.rand.nextDouble() * 360);
double speed = 0.125D;
NBTTagCompound data = new NBTTagCompound();
data.setString("type", "vanillaExt");
data.setString("mode", "blockdust");
data.setInteger("block", Block.getIdFromBlock(block));
data.setByte("meta", (byte) meta);
data.setDouble("mX", vec.xCoord * speed);
data.setDouble("mY", vec.yCoord * speed - 0.1D);
data.setDouble("mZ", vec.zCoord * speed);
data.setDouble("posX", xCoord + 0.5 + vec.xCoord * 2.25);
data.setDouble("posY", yCoord + 1.5);
data.setDouble("posZ", zCoord + 0.5 + vec.zCoord * 2.25);
MainRegistry.proxy.effectNT(data);
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB