This commit is contained in:
Bob 2026-03-05 20:20:55 +01:00
parent 10168b945d
commit fd7e28f074
18 changed files with 275 additions and 23 deletions

View File

@ -20,6 +20,11 @@
* The maximum per tick is a 1000 RAD/s increase to prevent world-destroying radiation levels from annihilating demon cores
* The water door now has a skin that isn't rusted with less contrast
* The containment door now has a lead-colored skin with a trefoil on it
* Using a screwdriver on a beamline now toggles a window which flashes if a particle passes
* Particles now start slowly and accelerate, instead of passing a fixed 10 components per tick, particles only do 1 component per tick, which increases by 1 every 1,000 momentum
* RBMK absorber columns now heat up when exposed to neutrons
* The type of neutron does not matter, only the quantity
* 20 flux equals 1°C heatup
## Fixed
* Fixed NBTStack serialization omitting the stack size most of the time, preventing deserialization (mainly in the precision assembler config)

View File

@ -8,13 +8,14 @@ import com.hbm.lib.RefStrings;
import com.hbm.main.MainRegistry;
import com.hbm.tileentity.machine.albion.TileEntityPABeamline;
import api.hbm.block.IToolable;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
public class BlockPABeamline extends BlockDummyable implements ITooltipProvider {
public class BlockPABeamline extends BlockDummyable implements ITooltipProvider, IToolable {
public BlockPABeamline() {
super(Material.iron);
@ -35,4 +36,19 @@ public class BlockPABeamline extends BlockDummyable implements ITooltipProvider
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
addStandardInfo(stack, player, list, ext);
}
@Override
public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) {
if(tool != ToolType.SCREWDRIVER) return false;
if(world.isRemote) return true;
int[] pos = this.findCore(world, x, y, z);
if(pos != null) {
TileEntityPABeamline tile = (TileEntityPABeamline) world.getTileEntity(pos[0], pos[1], pos[2]);
tile.window = !tile.window;
tile.markDirty();
}
return false;
}
}

View File

@ -355,6 +355,8 @@ public class RBMKNeutronHandler {
((TileEntityRBMKRod) originTE).receiveFlux(this);
return;
} else if(type == RBMKType.ABSORBER) {
((TileEntityRBMKAbsorber) nodeTE).heat += RBMKDials.getAbsorberHeatConversion(worldObj) * this.fluxQuantity;
if(absorberEfficiency == 1)
return;

View File

@ -5,6 +5,7 @@ import org.lwjgl.opengl.GL11;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ModBlocks;
import com.hbm.blocks.machine.rbmk.RBMKBase;
import com.hbm.blocks.machine.rbmk.RBMKPipedBase;
import com.hbm.main.ResourceManager;
import com.hbm.render.util.ObjUtil;
@ -46,6 +47,7 @@ public class RenderRBMKControl implements ISimpleBlockRenderingHandler {
if(i < 3) GL11.glTranslated(0, 1, 0);
}
RBMKPipedBase.renderPipes = true;
tessellator.startDrawingQuads();
renderer.setRenderBounds(0.0625, 0, 0.0625, 0.4375, 0.125, 0.4375);
tessellator.setNormal(0F, 1F, 0F); renderer.renderFaceYPos(block, -0.5, 1, -0.5, block.getIcon(ForgeDirection.UP.ordinal(), 0));
@ -72,6 +74,7 @@ public class RenderRBMKControl implements ISimpleBlockRenderingHandler {
tessellator.setNormal(0F, 0F, 1F); renderer.renderFaceZPos(block, -0.5, 1, -0.5, block.getIcon(ForgeDirection.EAST.ordinal(), 0));
tessellator.setNormal(0F, 0F, -1F); renderer.renderFaceZNeg(block, -0.5, 1, -0.5, block.getIcon(ForgeDirection.WEST.ordinal(), 0));
tessellator.draw();
RBMKPipedBase.renderPipes = false;
if(block != ModBlocks.rbmk_boiler && block != ModBlocks.rbmk_heater) {
tessellator.startDrawingQuads();
@ -113,6 +116,7 @@ public class RenderRBMKControl implements ISimpleBlockRenderingHandler {
}
if(!hasLid) {
RBMKPipedBase.renderPipes = true;
renderer.setRenderBounds(0.0625, 0, 0.0625, 0.4375, 0.125, 0.4375);
renderer.renderStandardBlock(block, x, y + 1, z);
renderer.setRenderBounds(0.0625, 0, 0.5625, 0.4375, 0.125, 0.9375);
@ -121,6 +125,7 @@ public class RenderRBMKControl implements ISimpleBlockRenderingHandler {
renderer.renderStandardBlock(block, x, y + 1, z);
renderer.setRenderBounds(0.5625, 0, 0.0625, 0.9375, 0.125, 0.4375);
renderer.renderStandardBlock(block, x, y + 1, z);
RBMKPipedBase.renderPipes = false;
}
} else {
}

View File

@ -40,14 +40,15 @@ public class RenderRBMKRod implements ISimpleBlockRenderingHandler {
tessellator.startDrawingQuads();
ObjUtil.renderPartWithIcon((HFRWavefrontObject) ResourceManager.rbmk_element, "Inner", rod.inner, tessellator, 0, false);
ObjUtil.renderPartWithIcon((HFRWavefrontObject) ResourceManager.rbmk_element, "Cap", iicon, tessellator, 0, false);
tessellator.setColorOpaque_I(0x304825);
ObjUtil.renderPartWithIcon((HFRWavefrontObject) ResourceManager.rbmk_element_rods, "Rods", rod.fuel, tessellator, 0, false);
tessellator.setColorOpaque_I(0xFFFFFF);
tessellator.setNormal(-1F, 0F, 0F); renderer.renderFaceXNeg(block, -0.5, 0, -0.5, sideIcon);
tessellator.setNormal(1F, 0F, 0F); renderer.renderFaceXPos(block, -0.5, 0, -0.5, sideIcon);
tessellator.setNormal(0F, 0F, -1F); renderer.renderFaceZNeg(block, -0.5, 0, -0.5, sideIcon);
tessellator.setNormal(0F, 0F, 1F); renderer.renderFaceZPos(block, -0.5, 0, -0.5, sideIcon);
tessellator.draw();
tessellator.startDrawingQuads();
tessellator.setColorOpaque_I(0x304825);
ObjUtil.renderPartWithIcon((HFRWavefrontObject) ResourceManager.rbmk_element_rods, "Rods", rod.fuel, tessellator, 0, false);
tessellator.draw();
GL11.glTranslated(0, 1, 0);
}

View File

@ -6,6 +6,7 @@ import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ModBlocks;
import com.hbm.main.ResourceManager;
import com.hbm.render.item.ItemRenderBase;
import com.hbm.tileentity.machine.albion.TileEntityPABeamline;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.item.Item;
@ -29,9 +30,25 @@ public class RenderPABeamline extends TileEntitySpecialRenderer implements IItem
case 2: GL11.glRotatef(90, 0F, 1F, 0F); break;
}
TileEntityPABeamline beamline = (TileEntityPABeamline) tile;
GL11.glShadeModel(GL11.GL_SMOOTH);
bindTexture(ResourceManager.pa_beamline_tex);
ResourceManager.pa_beamline.renderAll();
if(!beamline.window) {
ResourceManager.pa_beamline.renderPart("Beamline");
} else {
ResourceManager.pa_beamline.renderPart("BeamlineWindow");
float flash = beamline.prevLight + (beamline.light - beamline.prevLight) * f;
GL11.glColor3f(0.9F * flash, 0.9F * flash, 1.0F * flash);
GL11.glDisable(GL11.GL_TEXTURE_2D);
RenderArcFurnace.fullbright(true);
ResourceManager.pa_beamline.renderPart("BeamlineGlass");
RenderArcFurnace.fullbright(false);
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glColor3f(1F, 1F, 1F);
}
GL11.glShadeModel(GL11.GL_FLAT);
GL11.glPopMatrix();
@ -53,7 +70,7 @@ public class RenderPABeamline extends TileEntitySpecialRenderer implements IItem
GL11.glRotated(90, 0, 1, 0);
GL11.glShadeModel(GL11.GL_SMOOTH);
bindTexture(ResourceManager.pa_beamline_tex);
ResourceManager.pa_beamline.renderAll();
ResourceManager.pa_beamline.renderPart("Beamline");
GL11.glShadeModel(GL11.GL_FLAT);
}};
}

View File

@ -1,15 +1,65 @@
package com.hbm.tileentity.machine.albion;
import com.hbm.tileentity.TileEntityLoadedBase;
import com.hbm.tileentity.machine.albion.TileEntityPASource.Particle;
import com.hbm.util.fauxpointtwelve.BlockPos;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.tileentity.TileEntity;
import io.netty.buffer.ByteBuf;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.AxisAlignedBB;
import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityPABeamline extends TileEntity implements IParticleUser {
public class TileEntityPABeamline extends TileEntityLoadedBase implements IParticleUser {
public boolean window = false;
public boolean didPass = false;
public float light;
public float prevLight;
@Override
public void updateEntity() {
if(worldObj.isRemote) {
this.prevLight = this.light;
if(this.light > 0) this.light -= 0.25F;
if(this.light > this.prevLight) this.prevLight = this.light;
} else {
this.networkPackNT(150);
}
}
@Override
public void serialize(ByteBuf buf) {
super.serialize(buf);
buf.writeBoolean(window);
buf.writeBoolean(didPass);
didPass = false;
}
@Override
public void deserialize(ByteBuf buf) {
super.deserialize(buf);
this.window = buf.readBoolean();
this.didPass = buf.readBoolean();
if(didPass) light = 2F;
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
this.window = nbt.getBoolean("window");
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
nbt.setBoolean("window", window);
}
@Override
public boolean canParticleEnter(Particle particle, ForgeDirection dir, int x, int y, int z) {
@ -21,6 +71,7 @@ public class TileEntityPABeamline extends TileEntity implements IParticleUser {
@Override
public void onEnter(Particle particle, ForgeDirection dir) {
particle.addDistance(3);
this.didPass = true;
}
@Override

View File

@ -27,6 +27,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
@ -78,7 +79,10 @@ public class TileEntityPASource extends TileEntityCooledBase implements IGUIProv
if(!worldObj.isRemote) {
this.power = Library.chargeTEFromItems(slots, 0, power, this.getMaxPower());
for(int i = 0; i < 10; i++) {
int steps = 1;
if(this.particle != null) steps = 1 + MathHelper.clamp_int(this.particle.momentum / 1_000, 0, 9);
for(int i = 0; i < steps; i++) {
if(particle != null) {
this.state = PAState.RUNNING;
steppy();

View File

@ -39,7 +39,8 @@ public class RBMKDials {
KEY_ABSORBER_EFFICIENCY("dialAbsorberEfficiency", 1.0),
KEY_REFLECTOR_EFFICIENCY("dialReflectorEfficiency", 1.0),
KEY_DISABLE_DEPLETION("dialDisableDepletion", false),
KEY_DISABLE_XENON("dialDisableXenon", false);
KEY_DISABLE_XENON("dialDisableXenon", false),
KEY_ABSORBER_HEAT_CONVERSION("dialAbsorberHeatConversion", 0.05);
public final String keyString;
public final Object defValue;
@ -109,6 +110,7 @@ public class RBMKDials {
gameRules.get(RBMKKeys.KEY_ENABLE_MELTDOWN_OVERPRESSURE).add(new Tuple.Pair<>(world, world.getGameRules().getGameRuleBooleanValue(RBMKKeys.KEY_ENABLE_MELTDOWN_OVERPRESSURE.keyString)));
gameRules.get(RBMKKeys.KEY_MODERATOR_EFFICIENCY).add(new Tuple.Pair<>(world, GameRuleHelper.getClampedDouble(world, RBMKKeys.KEY_MODERATOR_EFFICIENCY, 0.0D, 1.0D)));
gameRules.get(RBMKKeys.KEY_ABSORBER_EFFICIENCY).add(new Tuple.Pair<>(world, GameRuleHelper.getClampedDouble(world, RBMKKeys.KEY_ABSORBER_EFFICIENCY, 0.0D, 1.0D)));
gameRules.get(RBMKKeys.KEY_ABSORBER_HEAT_CONVERSION).add(new Tuple.Pair<>(world, GameRuleHelper.getClampedDouble(world, RBMKKeys.KEY_ABSORBER_HEAT_CONVERSION, 0.0D, 1.0D)));
gameRules.get(RBMKKeys.KEY_REFLECTOR_EFFICIENCY).add(new Tuple.Pair<>(world, GameRuleHelper.getClampedDouble(world, RBMKKeys.KEY_REFLECTOR_EFFICIENCY, 0.0D, 1.0D)));
gameRules.get(RBMKKeys.KEY_DISABLE_DEPLETION).add(new Tuple.Pair<>(world, world.getGameRules().getGameRuleBooleanValue(RBMKKeys.KEY_DISABLE_DEPLETION.keyString)));
gameRules.get(RBMKKeys.KEY_DISABLE_XENON).add(new Tuple.Pair<>(world, world.getGameRules().getGameRuleBooleanValue(RBMKKeys.KEY_DISABLE_XENON.keyString)));
@ -347,6 +349,15 @@ public class RBMKDials {
return (double) getGameRule(world, RBMKKeys.KEY_ABSORBER_EFFICIENCY);
}
/**
* How many °C are generated per one flux that hits an absorber.
* @param world
* @return
*/
public static double getAbsorberHeatConversion(World world) {
return (double) getGameRule(world, RBMKKeys.KEY_ABSORBER_HEAT_CONVERSION);
}
/**
* The percentage of neutron to reflect when a stream hits a reflector column.
* @param world

View File

@ -1,6 +1,146 @@
# Blender v2.79 (sub 0) OBJ File: 'beamline.blend'
# www.blender.org
o Cube_Cube.001
o BeamlineGlass
v 0.375000 0.750000 -1.000000
v 0.375000 0.250000 -1.000000
v 0.375000 0.250000 1.000000
v 0.375000 0.750000 1.000000
v -0.375000 0.250000 -1.000000
v -0.375000 0.250000 1.000000
v -0.375000 0.750000 1.000000
v -0.375000 0.750000 -1.000000
vt 0.700000 0.437500
vt 0.300000 0.312500
vt 0.700000 0.312500
vt 0.300000 0.812427
vt 0.700000 0.937597
vt 0.300000 0.937427
vt 0.300000 0.437500
vt 0.700000 0.812597
vn 1.0000 0.0000 0.0000
vn -1.0000 0.0000 0.0000
s off
f 1/1/1 3/2/1 2/3/1
f 7/4/2 5/5/2 6/6/2
f 1/1/1 4/7/1 3/2/1
f 7/4/2 8/8/2 5/5/2
o BeamlineWindow
v -0.500000 0.250000 1.000000
v -0.500000 0.750000 1.000000
v -0.500000 0.250000 -1.000000
v -0.500000 0.750000 -1.000000
v 0.500000 0.250000 1.000000
v 0.500000 0.750000 1.000000
v 0.500000 0.250000 -1.000000
v 0.500000 0.750000 -1.000000
v 0.500000 1.000000 -1.500000
v 0.500000 0.000000 -1.500000
v 0.500000 0.000000 1.500000
v 0.500000 1.000000 1.500000
v 0.375000 0.750000 -1.000000
v 0.375000 0.250000 -1.000000
v 0.375000 0.250000 1.000000
v 0.375000 0.750000 1.000000
v -0.500000 0.000000 -1.500000
v -0.500000 0.000000 1.500000
v -0.500000 1.000000 1.500000
v -0.500000 1.000000 -1.500000
v -0.375000 0.250000 -1.000000
v -0.375000 0.250000 1.000000
v -0.375000 0.750000 1.000000
v -0.375000 0.750000 -1.000000
vt 0.700000 0.812597
vt 0.300000 0.843677
vt 0.300000 0.812427
vt 0.800000 0.500000
vt 1.000000 0.250000
vt 1.000000 0.500000
vt 0.300000 0.312469
vt 0.325000 0.437500
vt 0.300000 0.437469
vt 0.200000 0.250000
vt 0.000000 0.500000
vt 0.000000 0.250000
vt 0.800000 0.250000
vt 0.200000 0.000000
vt 0.800000 0.000000
vt 0.800000 0.750000
vt 0.200000 0.500000
vt 0.800000 0.500000
vt 0.700000 0.312500
vt 0.700000 0.437500
vt 0.200000 0.250000
vt 0.300000 0.343750
vt 0.700000 0.406250
vt 0.675000 0.312492
vt 0.700000 0.937597
vt 0.200000 1.000000
vt 0.300000 0.937427
vt 0.300000 0.937458
vt 0.200000 0.750000
vt 0.300000 0.812458
vt 0.800000 1.000000
vt 0.700000 0.906347
vt 0.675000 0.812597
vt 0.325000 0.937427
vt 0.700000 0.843847
vt 0.800000 0.250000
vt 0.325000 0.312500
vt 0.200000 0.500000
vt 0.700000 0.343750
vt 0.300000 0.406250
vt 0.675000 0.437492
vt 0.300000 0.906177
vt 0.675000 0.937597
vt 0.325000 0.812427
vn 0.0000 -1.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 1.0000 0.0000
vn 1.0000 0.0000 0.0000
vn -1.0000 0.0000 0.0000
s off
f 12/9/3 31/10/3 10/11/3
f 28/12/4 18/13/4 25/14/4
f 13/15/4 24/16/4 14/17/4
f 20/18/5 26/19/5 19/20/5
f 18/21/3 26/22/3 25/23/3
f 28/24/6 20/25/6 17/26/6
f 15/27/7 17/26/7 16/28/7
f 13/15/7 18/21/7 15/27/7
f 16/28/7 20/25/7 14/17/7
f 14/17/7 19/29/7 13/15/7
f 15/27/6 23/30/6 13/15/6
f 14/17/3 21/31/3 16/28/3
f 16/28/5 22/32/5 15/27/5
f 11/33/8 26/34/8 9/35/8
f 9/36/8 27/37/8 10/38/8
f 10/11/8 28/24/8 12/9/8
f 12/9/8 25/39/8 11/33/8
f 9/35/6 29/40/6 11/33/6
f 11/33/5 32/41/5 12/9/5
f 10/38/4 30/42/4 9/36/4
f 12/9/3 32/43/3 31/10/3
f 28/12/4 17/44/4 18/13/4
f 13/15/4 23/45/4 24/16/4
f 20/18/5 27/46/5 26/19/5
f 18/21/3 19/29/3 26/22/3
f 28/24/6 27/37/6 20/25/6
f 15/27/7 18/21/7 17/26/7
f 13/15/7 19/29/7 18/21/7
f 16/28/7 17/26/7 20/25/7
f 14/17/7 20/25/7 19/29/7
f 15/27/6 22/47/6 23/30/6
f 14/17/3 24/48/3 21/31/3
f 16/28/5 21/49/5 22/32/5
f 11/33/8 25/39/8 26/34/8
f 9/36/8 26/34/8 27/37/8
f 10/11/8 27/37/8 28/24/8
f 12/9/8 28/24/8 25/39/8
f 9/35/6 30/50/6 29/40/6
f 11/33/5 29/51/5 32/41/5
f 10/38/4 31/52/4 30/42/4
o Beamline
v -0.500000 0.000000 1.500000
v -0.500000 1.000000 1.500000
v -0.500000 0.000000 -1.500000
@ -30,15 +170,15 @@ vn 0.0000 0.0000 1.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
s off
f 2/1/1 3/2/1 1/3/1
f 4/4/2 7/5/2 3/6/2
f 8/7/3 5/8/3 7/9/3
f 6/10/4 1/11/4 5/12/4
f 7/13/5 1/3/5 3/2/5
f 4/4/6 6/10/6 8/7/6
f 2/1/1 4/4/1 3/2/1
f 4/4/2 8/7/2 7/5/2
f 8/7/3 6/10/3 5/8/3
f 6/10/4 2/1/4 1/11/4
f 7/13/5 5/14/5 1/3/5
f 4/4/6 2/1/6 6/10/6
f 34/53/9 35/54/9 33/55/9
f 36/56/10 39/57/10 35/58/10
f 40/59/11 37/60/11 39/61/11
f 38/62/12 33/63/12 37/64/12
f 39/65/13 33/55/13 35/54/13
f 36/56/14 38/62/14 40/59/14
f 34/53/9 36/56/9 35/54/9
f 36/56/10 40/59/10 39/57/10
f 40/59/11 38/62/11 37/60/11
f 38/62/12 34/53/12 33/63/12
f 39/65/13 37/66/13 33/55/13
f 36/56/14 34/53/14 38/62/14

Binary file not shown.

Before

Width:  |  Height:  |  Size: 204 B

After

Width:  |  Height:  |  Size: 188 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 307 B

After

Width:  |  Height:  |  Size: 285 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 188 B

After

Width:  |  Height:  |  Size: 204 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 285 B

After

Width:  |  Height:  |  Size: 307 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 370 B

After

Width:  |  Height:  |  Size: 360 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 410 B

After

Width:  |  Height:  |  Size: 486 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 204 B

After

Width:  |  Height:  |  Size: 188 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 307 B

After

Width:  |  Height:  |  Size: 285 B