From fd7e28f074687dc8e8f95245e83b1d0b83e17f7a Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 5 Mar 2026 20:20:55 +0100 Subject: [PATCH] boingus --- changelog | 5 + .../machine/albion/BlockPABeamline.java | 18 +- .../handler/neutron/RBMKNeutronHandler.java | 2 + .../hbm/render/block/RenderRBMKControl.java | 5 + .../com/hbm/render/block/RenderRBMKRod.java | 7 +- .../render/tileentity/RenderPABeamline.java | 21 ++- .../machine/albion/TileEntityPABeamline.java | 55 +++++- .../machine/albion/TileEntityPASource.java | 6 +- .../tileentity/machine/rbmk/RBMKDials.java | 13 +- .../models/particleaccelerator/beamline.obj | 166 ++++++++++++++++-- .../blocks/rbmk/rbmk_absorber_cover_side.png | Bin 204 -> 188 bytes .../blocks/rbmk/rbmk_absorber_cover_top.png | Bin 307 -> 285 bytes .../blocks/rbmk/rbmk_blank_cover_side.png | Bin 188 -> 204 bytes .../blocks/rbmk/rbmk_blank_cover_top.png | Bin 285 -> 307 bytes .../textures/blocks/rbmk/rbmk_boiler_side.png | Bin 370 -> 360 bytes .../textures/blocks/rbmk/rbmk_boiler_top.png | Bin 410 -> 486 bytes .../blocks/rbmk/rbmk_reflector_cover_side.png | Bin 204 -> 188 bytes .../blocks/rbmk/rbmk_reflector_cover_top.png | Bin 307 -> 285 bytes 18 files changed, 275 insertions(+), 23 deletions(-) diff --git a/changelog b/changelog index c2b24e71d..55a35eadf 100644 --- a/changelog +++ b/changelog @@ -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) diff --git a/src/main/java/com/hbm/blocks/machine/albion/BlockPABeamline.java b/src/main/java/com/hbm/blocks/machine/albion/BlockPABeamline.java index e2382367a..06668851f 100644 --- a/src/main/java/com/hbm/blocks/machine/albion/BlockPABeamline.java +++ b/src/main/java/com/hbm/blocks/machine/albion/BlockPABeamline.java @@ -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; + } } diff --git a/src/main/java/com/hbm/handler/neutron/RBMKNeutronHandler.java b/src/main/java/com/hbm/handler/neutron/RBMKNeutronHandler.java index dd77eaf98..d6257622c 100644 --- a/src/main/java/com/hbm/handler/neutron/RBMKNeutronHandler.java +++ b/src/main/java/com/hbm/handler/neutron/RBMKNeutronHandler.java @@ -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; diff --git a/src/main/java/com/hbm/render/block/RenderRBMKControl.java b/src/main/java/com/hbm/render/block/RenderRBMKControl.java index a9a399b67..90beaf20c 100644 --- a/src/main/java/com/hbm/render/block/RenderRBMKControl.java +++ b/src/main/java/com/hbm/render/block/RenderRBMKControl.java @@ -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 { } diff --git a/src/main/java/com/hbm/render/block/RenderRBMKRod.java b/src/main/java/com/hbm/render/block/RenderRBMKRod.java index d8a3e5403..8ab79025e 100644 --- a/src/main/java/com/hbm/render/block/RenderRBMKRod.java +++ b/src/main/java/com/hbm/render/block/RenderRBMKRod.java @@ -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); } diff --git a/src/main/java/com/hbm/render/tileentity/RenderPABeamline.java b/src/main/java/com/hbm/render/tileentity/RenderPABeamline.java index 0d4f3a7d3..a1cd6ca4b 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderPABeamline.java +++ b/src/main/java/com/hbm/render/tileentity/RenderPABeamline.java @@ -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); }}; } diff --git a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPABeamline.java b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPABeamline.java index effe4f514..feb898aba 100644 --- a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPABeamline.java +++ b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPABeamline.java @@ -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 diff --git a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPASource.java b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPASource.java index ac4bd099d..993b76359 100644 --- a/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPASource.java +++ b/src/main/java/com/hbm/tileentity/machine/albion/TileEntityPASource.java @@ -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(); diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/RBMKDials.java b/src/main/java/com/hbm/tileentity/machine/rbmk/RBMKDials.java index ab08afd1a..c2f2abaf1 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/RBMKDials.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/RBMKDials.java @@ -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 diff --git a/src/main/resources/assets/hbm/models/particleaccelerator/beamline.obj b/src/main/resources/assets/hbm/models/particleaccelerator/beamline.obj index 9757a9ea2..7c641575d 100644 --- a/src/main/resources/assets/hbm/models/particleaccelerator/beamline.obj +++ b/src/main/resources/assets/hbm/models/particleaccelerator/beamline.obj @@ -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 diff --git a/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_absorber_cover_side.png b/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_absorber_cover_side.png index 29deb50b07cb6678583afbd64b8658d0667d8121..32a71f4fe6eb42cca5d887c7e0f7dd0e085b7e8e 100644 GIT binary patch delta 144 zcmV;B0B`@y0lWc_G=FnRL_t(IjqQ%H3IZ_@M4yl*u%tWg|9|N~4-xgwF1uY=NU4pN z(@L<;t7e#4cA(Sg035FK`KgxwI#$aBwaofh0B|peBw~yJ)LNU~ynA67MgWediLiz4 yr4{YHNF+5cl3K?;76-M=?SA>1^-J%MlouIaJDha^H`@RJ00{s|MNUMnLSTYW{6ahc delta 160 zcmV;R0AK&S0n7oAG=GChL_t(IjqQ%h3c@fDMUT?WK>)kLZwmx*qp~{QHwvNTI8@l^3OMFk$&g^aIQr}FpD_Xa=D(^`M~{g zBc&Pd136~^M1+3m*p@W!0|54FOKE;LiO82Lf1?&D_lcRZUKv4QE6J+> O00003wk9 delta 264 zcmV+j0r&o$0c&$n|fR%&r7x zsT)t3#JS?afs)Y7H*GlI;_vW#&ywI(mW1_cgLmhBmW17Y3jm05KnMXM2{8^hosak# zm$=?8C}qMpE}^ObfDi(9`z<<7Bdn_Pp5?*ZcP-pD0B~V`pnq!t?n{~G0UpeEy=@?5 zVOBesYj5xP4wh#UF%DHvpCy4$TOt`YB>+{QNXFtT9x!JcpQ=_KSU=b^d*H#=0}pmR zu&`8jeT82<;6W+V46r=7^1#9byf{4%y8mGN2Ua52gVXs~MZ@(I4<1!$3if+Lt%m>r O002ovPDHLkU;%;%=y;<5 diff --git a/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_blank_cover_side.png b/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_blank_cover_side.png index 32a71f4fe6eb42cca5d887c7e0f7dd0e085b7e8e..29deb50b07cb6678583afbd64b8658d0667d8121 100644 GIT binary patch delta 160 zcmV;R0AK&S0n7oAG=GChL_t(IjqQ%h3c@fDMUT?WK>)kLZwmx*qp~{QHwvNTI8@l^3OMFk$&g^aIQr}FpD_Xa=D(^`M~{g zBc&Pd136~^M1+3m*p@W!0|54FOKE;LiO82Lf1?&D_lcRZUKv4QE6J+> O00001^-J%MlouIaJDha^H`@RJ00{s|MNUMnLSTYW{6ahc diff --git a/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_blank_cover_top.png b/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_blank_cover_top.png index c530221bda61ae33e63a1395305060a87a799887..609cfa25c2770e788ddf857f1a671e5ae01e4324 100644 GIT binary patch delta 264 zcmV+j0r&o$0c&$n|fR%&r7x zsT)t3#JS?afs)Y7H*GlI;_vW#&ywI(mW1_cgLmhBmW17Y3jm05KnMXM2{8^hosak# zm$=?8C}qMpE}^ObfDi(9`z<<7Bdn_Pp5?*ZcP-pD0B~V`pnq!t?n{~G0UpeEy=@?5 zVOBesYj5xP4wh#UF%DHvpCy4$TOt`YB>+{QNXFtT9x!JcpQ=_KSU=b^d*H#=0}pmR zu&`8jeT82<;6W+V46r=7^1#9byf{4%y8mGN2Ua52gVXs~MZ@(I4<1!$3if+Lt%m>r O002ovPDHLkU;%;%=y;<5 delta 241 zcmV3wk9 diff --git a/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_boiler_side.png b/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_boiler_side.png index 6b0dc2f302877434e10d3b563d86ae689077ed65..0770631cfc31d0dc1a342c124ac5f1902bb8a32c 100644 GIT binary patch delta 317 zcmV-D0mA0euL|>ei3qq^%|DUkp)2Ir20or&EXpB>Q zN#Z!;nQ_YH_u}(1vn&he^O@Ef?#}cxF)uT%HSYI2(=<^^p_Ibuc;fbV<9fX^0F+Vy zFf+`IZQD?o833)d?#|r--T<}MD9V62x8J{BuXlrtriVJKtAC=D63w&@K+sy(HFS!8 zW|x_%$p=0$$R23FXQ#YnZSIb{cV`u5P_g^+Ky=4({4#By3z->J&IY|?pgb6cp#w62 z!{HF9dkJEtJF!&^0MF+$67C+Iv+J5pXwM$(e`5X@D%^MO#wdfvam36*C%pd#d<@Qv zLW1J)cy#o(Z8qzS-1`#@GQC=BH!9t&>)HW!W7PQcSQ6a5GqTniwQBMYlrhe`Rh$F+ P00000NkvXXu0mjf)HI(4 delta 327 zcmV-N0l5C?0`dZoG=C{cL_t(Ijct=zZUi9=M61kl|AUO?Xfw(u18wIcDGNHW)PiQQ z%g=_-$1~nvZ@4>JYjAf&1Z3`xS}Op6BuHY6f!;e_uNO=ky?2-yYOOFclu`fyW(Jb! zc&&xrdj_ch^02#SB+WJM^DzcU{saJkh&UD_BAu97Iv|Ns%73A-0>E`$Ac?hB<|+B5 z6wEo(ffP$ky05k7f$O@k*2?*QIU-Pv>L?0H4n%B?^)v%1FY@jxQaMOfZ6XzjSYJ{o4+x zwRW^KfGno~??60&-$qijF-F3>m-9b9sX&iJkrY9f)L46(M;Ygw*|vJV%2OQVe9n0& Z`3B4Y_~ClwJq`c>002ovPDHLkV1kJ@m9_u? diff --git a/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_boiler_top.png b/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_boiler_top.png index 77e0a17146e8bc9d729a9428294cbccd16bfcf39..24a2f7f1b099c0ffbff18234b5bbfee77b750c0f 100644 GIT binary patch delta 444 zcmV;t0Ym#29%?O)nEZ#>n&ZjB^fS z3;?ARj4_l_0C3JxO2Jx7trh1SBEmS1`1Syx)(U_zM$c_;=YO0tIcIHV0Yrolf?kS< zf>>)6z!*c{_gHJSsXeEhbH3=9bH+JGt@UCx3BXYTfcIW6hYtfWMy}sqUl^8iMnrJV zky1JVoOcC?G4kb8$NX^5ynbZbZn%{d%jHr{Zqn3)b29l}8-9QP%)HyN-E86J$h1vJy=$8Lz9*%G zh%miO+{y|*u8yy6AcTOm_N4va?i;mcjEIm@Vi*Rxu4BL7vsf%%g{v{u8~}7(hqV^( zJ=R)EDXRIrS|Syo)=El=!{I=iiil{yS~n3<77aipG&Nc|XS%Kmp-xZ@sPz<3CkEWL); zU~9Mqd-kj_0!?UOfI?drIK?2vgsvw2rhndh-^&IcgJ7-Ynq!uRhP9SF&p8b-OM`O` z0M$}wxz?HnfVGzAha0N#h-x;$=sEq+MJa{%KFQ0nJOlt#<9`viFK+-0drzRcc<&KH zBsqYH0kcUguUf4D*zfm9DU%#HR$%m;Veg4*wL;G|JVKu5tk-Mq@9xj?7+{u$e(1)s zc!ceCO9%leWs=7kSZh&AA*IAQhY$kqeYCLK?P#~#c<%`zAcP=1^-J%MlouIaJDha^H`@RJ00{s|MNUMnLSTYW{6ahc delta 160 zcmV;R0AK&S0n7oAG=GChL_t(IjqQ%h3c@fDMUT?WK>)kLZwmx*qp~{QHwvNTI8@l^3OMFk$&g^aIQr}FpD_Xa=D(^`M~{g zBc&Pd136~^M1+3m*p@W!0|54FOKE;LiO82Lf1?&D_lcRZUKv4QE6J+> O00003wk9 delta 264 zcmV+j0r&o$0c&$n|fR%&r7x zsT)t3#JS?afs)Y7H*GlI;_vW#&ywI(mW1_cgLmhBmW17Y3jm05KnMXM2{8^hosak# zm$=?8C}qMpE}^ObfDi(9`z<<7Bdn_Pp5?*ZcP-pD0B~V`pnq!t?n{~G0UpeEy=@?5 zVOBesYj5xP4wh#UF%DHvpCy4$TOt`YB>+{QNXFtT9x!JcpQ=_KSU=b^d*H#=0}pmR zu&`8jeT82<;6W+V46r=7^1#9byf{4%y8mGN2Ua52gVXs~MZ@(I4<1!$3if+Lt%m>r O002ovPDHLkU;%;%=y;<5