From 873ceac8f428cc82f8ade781ca84a40d9e6b6268 Mon Sep 17 00:00:00 2001 From: Bob Date: Sat, 7 Mar 2026 17:49:51 +0100 Subject: [PATCH 1/2] aye --- changelog | 5 + .../hbm/blocks/machine/rbmk/RBMKCooler.java | 7 +- .../hbm/blocks/machine/rbmk/RBMKLoader.java | 4 +- .../hbm/inventory/recipes/PrecAssRecipes.java | 24 +- .../com/hbm/items/machine/ItemRBMKRod.java | 6 +- src/main/java/com/hbm/main/ClientProxy.java | 4 + .../com/hbm/particle/ParticleRBMKFlame.java | 1 + .../com/hbm/particle/ParticleRBMKSteam.java | 101 ++ .../entity/projectile/RenderRBMKDebris.java | 9 +- .../machine/rbmk/TileEntityRBMKBoiler.java | 17 +- .../assets/hbm/manual/rbmk/cooler.json | 3 +- .../hbm/models/projectiles/deb_element.obj | 1117 ++++++++--------- .../assets/hbm/models/projectiles/deb_lid.obj | 118 +- .../hbm/textures/blocks/rbmk/rbmk_fuel.png | Bin 0 -> 250 bytes .../textures/blocks/rbmk/rbmk_heater_top.png | Bin 410 -> 486 bytes .../blocks/rbmk/rbmk_reflector_cover_top.png | Bin 285 -> 328 bytes .../hbm/textures/blocks/rbmk/rbmk_side.png | Bin 467 -> 425 bytes .../hbm/textures/blocks/rbmk/rbmk_top.png | Bin 397 -> 417 bytes .../hbm/textures/blocks/rbmk_loader.png | Bin 579 -> 610 bytes .../hbm/textures/blocks/rbmk_steam_inlet.png | Bin 649 -> 577 bytes .../hbm/textures/blocks/rbmk_steam_outlet.png | Bin 628 -> 568 bytes 21 files changed, 748 insertions(+), 668 deletions(-) create mode 100644 src/main/java/com/hbm/particle/ParticleRBMKSteam.java create mode 100644 src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_fuel.png diff --git a/changelog b/changelog index 2d4dc8be5..0bda761d0 100644 --- a/changelog +++ b/changelog @@ -46,6 +46,11 @@ * Changed the way reasim RBMK fuel channels work * Instead of six randomized neutron streams, reasim rods now use eight half strength streams in an even star pattern * The pattern is rotated in a random multiple of 9° (i.e. four possible angle variations) +* RBMK steam channels now spawn steam particles if water is voided due to the steam buffer not being emptied in time +* Rebalanced 528 mode + * Increased the chance for most precision assembler recipes to succeed + * Increased the chance for items to be salvaged by recycling + * In expensive mode, the chances have been increased drastically compared to the old values ## 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/rbmk/RBMKCooler.java b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKCooler.java index 5dd6fa078..eb00c1ab2 100644 --- a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKCooler.java +++ b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKCooler.java @@ -1,5 +1,6 @@ package com.hbm.blocks.machine.rbmk; +import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKCooler; import net.minecraft.tileentity.TileEntity; @@ -9,10 +10,8 @@ public class RBMKCooler extends RBMKBase { @Override public TileEntity createNewTileEntity(World world, int meta) { - - if(meta >= this.offset) - return new TileEntityRBMKCooler(); - + if(meta >= this.offset) return new TileEntityRBMKCooler(); + if(hasExtra(meta)) return new TileEntityProxyCombo().fluid(); return null; } diff --git a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKLoader.java b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKLoader.java index da2c58002..23cb20f69 100644 --- a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKLoader.java +++ b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKLoader.java @@ -5,6 +5,7 @@ import java.util.List; import com.hbm.blocks.ITooltipProvider; import com.hbm.blocks.generic.BlockGeneric; import com.hbm.inventory.fluid.FluidType; +import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.trait.FT_Coolable; import com.hbm.inventory.fluid.trait.FT_Heatable; @@ -24,12 +25,11 @@ public class RBMKLoader extends BlockGeneric implements IFluidConnectorBlock, IT @Override public boolean canConnect(FluidType type, IBlockAccess world, int x, int y, int z, ForgeDirection dir) { if(dir == ForgeDirection.UP) return type.hasTrait(FT_Heatable.class); - return type.hasTrait(FT_Coolable.class); + return type.hasTrait(FT_Coolable.class) || type == Fluids.PERFLUOROMETHYL; } @Override public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { this.addStandardInfo(stack, player, list, ext); } - } diff --git a/src/main/java/com/hbm/inventory/recipes/PrecAssRecipes.java b/src/main/java/com/hbm/inventory/recipes/PrecAssRecipes.java index 6c06125da..cae9f0173 100644 --- a/src/main/java/com/hbm/inventory/recipes/PrecAssRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/PrecAssRecipes.java @@ -46,7 +46,7 @@ public class PrecAssRecipes extends GenericRecipes { .inputItems(new ComparableStack(ModItems.circuit, 1, EnumCircuitType.SILICON), new ComparableStack(ModItems.plate_polymer, 3), new OreDictStack(GOLD.wireFine(), 4)).setPools(POOL_PREFIX_528 + "chip"), - DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP), 50, GeneralConfig.enableExpensiveMode ? 10 : 90); + DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP), 90, GeneralConfig.enableExpensiveMode ? 50 : 90); registerPair(new GenericRecipe("precass.chip_bismoid").setup(200, 1_000L) .inputItems(new ComparableStack(ModItems.circuit, 4, EnumCircuitType.SILICON), @@ -54,7 +54,7 @@ public class PrecAssRecipes extends GenericRecipes { new OreDictStack(ANY_BISMOID.nugget(), 2), new OreDictStack(GOLD.wireFine(), 4)) .inputFluids(new FluidStack(Fluids.PERFLUOROMETHYL, 1_000)).setPools(POOL_PREFIX_528 + "chip_bismoid"), - DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP_BISMOID), 50, GeneralConfig.enableExpensiveMode ? 10 : 75); + DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP_BISMOID), 75, GeneralConfig.enableExpensiveMode ? 50 : 75); registerPair(new GenericRecipe("precass.chip_quantum").setup(300, 20_000L) .inputItems(new ComparableStack(ModItems.circuit, 8, EnumCircuitType.SILICON), @@ -63,14 +63,14 @@ public class PrecAssRecipes extends GenericRecipes { new ComparableStack(ModItems.pellet_charged, 4), new OreDictStack(GOLD.wireFine(), 8)) .inputFluids(new FluidStack(Fluids.HELIUM4, 4_000)).setPools(POOL_PREFIX_528 + "chip_quantum"), - DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP_QUANTUM), 50, GeneralConfig.enableExpensiveMode ? 10 : 50); + DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP_QUANTUM), 75, GeneralConfig.enableExpensiveMode ? 50 : 50); registerPair(new GenericRecipe("precass.atomic_clock").setup(200, 2_000L) .inputItems(new ComparableStack(ModItems.circuit, 8, EnumCircuitType.CHIP), new OreDictStack(ANY_PLASTIC.ingot(), 4), new OreDictStack(ZR.wireFine(), 8), new OreDictStack(SR.dust(), 1)).setPools(POOL_PREFIX_528 + "strontium"), - DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ATOMIC_CLOCK), 50, GeneralConfig.enableExpensiveMode ? 10 : 50); + DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ATOMIC_CLOCK), 50, GeneralConfig.enableExpensiveMode ? 50 : 50); registerPair(new GenericRecipe("precass.controller").setup(400, 15_000L) .inputItems(new ComparableStack(ModItems.circuit, 32, EnumCircuitType.CHIP), @@ -80,7 +80,7 @@ public class PrecAssRecipes extends GenericRecipes { new ComparableStack(ModItems.upgrade_speed_1), new OreDictStack(PB.wireFine(), 16)) .inputFluids(new FluidStack(Fluids.PERFLUOROMETHYL, 1_000)), - DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CONTROLLER), 10, GeneralConfig.enableExpensiveMode ? 50 : 90); + DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CONTROLLER), 50, GeneralConfig.enableExpensiveMode ? 50 : 90); registerPair(new GenericRecipe("precass.controller_advanced").setup(600, 25_000) .inputItems(new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CHIP_BISMOID), @@ -90,7 +90,7 @@ public class PrecAssRecipes extends GenericRecipes { new ComparableStack(ModItems.upgrade_speed_3), new OreDictStack(PB.wireFine(), 24)) .inputFluids(new FluidStack(Fluids.PERFLUOROMETHYL, 4_000)), - DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CONTROLLER_ADVANCED), 10, GeneralConfig.enableExpensiveMode ? 33 : 75); + DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CONTROLLER_ADVANCED), 35, GeneralConfig.enableExpensiveMode ? 50 : 75); registerPair(new GenericRecipe("precass.controller_quantum").setup(600, 250_000) .inputItems(new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CHIP_QUANTUM), @@ -100,7 +100,7 @@ public class PrecAssRecipes extends GenericRecipes { new ComparableStack(ModItems.upgrade_overdrive_1), new OreDictStack(PB.wireFine(), 32)) .inputFluids(new FluidStack(Fluids.PERFLUOROMETHYL_COLD, 6_000)), - DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CONTROLLER_QUANTUM), 5, GeneralConfig.enableExpensiveMode ? 10 : 50); + DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CONTROLLER_QUANTUM), 25, GeneralConfig.enableExpensiveMode ? 50 : 75); addFirstUpgrade(ModItems.upgrade_speed_1, ModItems.upgrade_speed_2, "precass.upgrade_speed_ii"); addSecondUpgrade(ModItems.upgrade_speed_2, ModItems.upgrade_speed_3, "precass.upgrade_speed_iii"); @@ -119,7 +119,7 @@ public class PrecAssRecipes extends GenericRecipes { new OreDictStack(BIGMT.ingot(), 16), new OreDictStack(ANY_HARDPLASTIC.ingot(), 16), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.ADVANCED)), - new ItemStack(ModItems.upgrade_overdrive_1), 10, GeneralConfig.enableExpensiveMode ? 10 : 50); + new ItemStack(ModItems.upgrade_overdrive_1), 50, GeneralConfig.enableExpensiveMode ? 50 : 75); registerPair(new GenericRecipe("precass.upgrade_overdive_ii").setup(600, 5_000) .inputItems(new ComparableStack(ModItems.upgrade_overdrive_1, 1), new ComparableStack(ModItems.upgrade_speed_3, 1), @@ -127,7 +127,7 @@ public class PrecAssRecipes extends GenericRecipes { new OreDictStack(BIGMT.ingot(), 16), new ComparableStack(ModItems.ingot_cft, 8), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CAPACITOR_BOARD)), - new ItemStack(ModItems.upgrade_overdrive_2), 10, GeneralConfig.enableExpensiveMode ? 10 : 50); + new ItemStack(ModItems.upgrade_overdrive_2), 50, GeneralConfig.enableExpensiveMode ? 50 : 75); registerPair(new GenericRecipe("precass.upgrade_overdive_iii").setup(1_200, 100_000) .inputItems(new ComparableStack(ModItems.upgrade_overdrive_2, 1), new ComparableStack(ModItems.upgrade_speed_3, 1), @@ -135,7 +135,7 @@ public class PrecAssRecipes extends GenericRecipes { new OreDictStack(ANY_BISMOIDBRONZE.ingot(), 16), new ComparableStack(ModItems.ingot_cft, 16), new ComparableStack(ModItems.circuit, 16, EnumCircuitType.BISMOID)), - new ItemStack(ModItems.upgrade_overdrive_3), 5, GeneralConfig.enableExpensiveMode ? 10 : 50); + new ItemStack(ModItems.upgrade_overdrive_3), 25, GeneralConfig.enableExpensiveMode ? 50 : 75); } int min = 1_200; @@ -165,7 +165,7 @@ public class PrecAssRecipes extends GenericRecipes { .inputItems(new ComparableStack(ModItems.circuit, 8, EnumCircuitType.CHIP), new ComparableStack(ModItems.circuit, 4, EnumCircuitType.CAPACITOR_TANTALIUM), new ComparableStack(lower), new OreDictStack(ANY_PLASTIC.ingot(), 4)), - new ItemStack(higher), 15, 25); // upgrades are now actually valuable + new ItemStack(higher), 50, 75); // upgrades are now actually valuable } public void addSecondUpgrade(Item lower, Item higher, String name) { @@ -175,7 +175,7 @@ public class PrecAssRecipes extends GenericRecipes { new ComparableStack(ModItems.circuit, 16, EnumCircuitType.CAPACITOR_TANTALIUM), new ComparableStack(lower), new OreDictStack(RUBBER.ingot(), 4)) .inputFluids(new FluidStack(Fluids.SOLVENT, 500)), - new ItemStack(higher), 5, 10); // admittedly this one's just me being a dick + new ItemStack(higher), 25, 75); // admittedly this one's just me being a dick } /** Registers a generic pair of faulty product and recycling of broken items. */ diff --git a/src/main/java/com/hbm/items/machine/ItemRBMKRod.java b/src/main/java/com/hbm/items/machine/ItemRBMKRod.java index 8519c2d5f..694865737 100644 --- a/src/main/java/com/hbm/items/machine/ItemRBMKRod.java +++ b/src/main/java/com/hbm/items/machine/ItemRBMKRod.java @@ -168,16 +168,18 @@ public class ItemRBMKRod extends Item { setPoison(stack, xenon); } - double outFlux = reactivityFunc(inFlux, getEnrichment(stack)) * RBMKDials.getReactivityMod(world); + double mult = 1D; double coreHeat = this.getCoreHeat(stack); if(this.heatCoeffStart != 0) { if(coreHeat >= this.heatCoeffStart) { double prog = (coreHeat - this.heatCoeffStart) / this.heatCoeffLength; if(prog > 1) prog = 1; - double mult = Math.sin((prog * Math.PI + Math.PI) / 2); + mult = Math.sin((prog * Math.PI + Math.PI) / 2); } } + + double outFlux = reactivityFunc(inFlux, getEnrichment(stack) * mult) * RBMKDials.getReactivityMod(world); //if depletion is enabled if(RBMKDials.getDepletion(world)) { diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index cd8a1b13e..40e158e17 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -1729,6 +1729,10 @@ public class ClientProxy extends ServerProxy { Minecraft.getMinecraft().effectRenderer.addEffect(new ParticleRBMKFlame(man, world, x, y, z, maxAge)); } + if("rbmksteam".equals(type)) { + Minecraft.getMinecraft().effectRenderer.addEffect(new ParticleRBMKSteam(man, world, x, y, z)); + } + if("rbmkmush".equals(type)) { float scale = data.getFloat("scale"); Minecraft.getMinecraft().effectRenderer.addEffect(new ParticleRBMKMush(man, world, x, y, z, scale)); diff --git a/src/main/java/com/hbm/particle/ParticleRBMKFlame.java b/src/main/java/com/hbm/particle/ParticleRBMKFlame.java index c3452431e..2eb365b40 100644 --- a/src/main/java/com/hbm/particle/ParticleRBMKFlame.java +++ b/src/main/java/com/hbm/particle/ParticleRBMKFlame.java @@ -27,6 +27,7 @@ public class ParticleRBMKFlame extends EntityFX { this.particleScale = rand.nextFloat() + 1F; } + @Override public int getFXLayer() { return 3; } diff --git a/src/main/java/com/hbm/particle/ParticleRBMKSteam.java b/src/main/java/com/hbm/particle/ParticleRBMKSteam.java new file mode 100644 index 000000000..d98e27163 --- /dev/null +++ b/src/main/java/com/hbm/particle/ParticleRBMKSteam.java @@ -0,0 +1,101 @@ +package com.hbm.particle; + +import org.lwjgl.opengl.GL11; + +import com.hbm.lib.RefStrings; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.Minecraft; +import net.minecraft.client.particle.EntityFX; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; + +@SideOnly(Side.CLIENT) +public class ParticleRBMKSteam extends EntityFX { + + public static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/particle/rbmk_jet_steam.png"); + private TextureManager theRenderEngine; + + public ParticleRBMKSteam(TextureManager texman, World world, double x, double y, double z) { + super(world, x, y, z); + this.theRenderEngine = texman; + this.particleMaxAge = 30; + this.particleAlpha = 0.25F; + this.particleScale = 4F; + } + + @Override + public int getFXLayer() { + return 3; + } + + public void renderParticle(Tessellator tess, float interp, float x, float y, float z, float tx, float tz) { + + this.theRenderEngine.bindTexture(getTexture()); + boolean fog = GL11.glIsEnabled(GL11.GL_FOG); + if(fog) GL11.glDisable(GL11.GL_FOG); + + GL11.glPushMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_BLEND); + GL11.glAlphaFunc(GL11.GL_GREATER, 0); + GL11.glDepthMask(false); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + RenderHelper.disableStandardItemLighting(); + + if(this.particleAge > this.particleMaxAge) + this.particleAge = this.particleMaxAge; + + int texIndex = (int) (((double) this.particleAge / (double) this.particleMaxAge) * 20) % 20 - 1; + float f0 = 1F / 20F; + + float uMin = texIndex * f0; + float uMax = uMin + f0; + float vMin = 0; + float vMax = 1; + + tess.startDrawingQuads(); + + tess.setNormal(0.0F, 1.0F, 0.0F); + tess.setBrightness(240); + + tess.setColorRGBA_F(1.0F, 1.0F, 1.0F, this.particleAlpha); + + EntityPlayer player = Minecraft.getMinecraft().thePlayer; + double dX = player.lastTickPosX + (player.posX - player.lastTickPosX) * (double)interp; + double dY = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double)interp; + double dZ = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double)interp; + + float pX = (float) (this.prevPosX + (this.posX - this.prevPosX) * (double) interp - dX); + float pY = (float) (this.prevPosY + (this.posY - this.prevPosY) * (double) interp - dY); + float pZ = (float) (this.prevPosZ + (this.posZ - this.prevPosZ) * (double) interp - dZ); + + GL11.glTranslatef(pX + x, pY + y, pZ + z); + GL11.glRotatef(-RenderManager.instance.playerViewY, 0.0F, 1.0F, 0.0F); + + tess.addVertexWithUV(this.particleScale * -0.25 - 1, -0.25, 0, uMax, vMax); + tess.addVertexWithUV(this.particleScale * -0.25 - 1, this.particleScale - 0.25, 0, uMax, vMin); + tess.addVertexWithUV(this.particleScale * 0.25 - 1, this.particleScale - 0.25, 0, uMin, vMin); + tess.addVertexWithUV(this.particleScale * 0.25 - 1, -0.25, 0, uMin, vMax); + + tess.draw(); + + GL11.glPolygonOffset(0.0F, 0.0F); + GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_BLEND); + GL11.glPopMatrix(); + if(fog) GL11.glEnable(GL11.GL_FOG); + } + + protected ResourceLocation getTexture() { + return texture; + } +} diff --git a/src/main/java/com/hbm/render/entity/projectile/RenderRBMKDebris.java b/src/main/java/com/hbm/render/entity/projectile/RenderRBMKDebris.java index b469c5e6b..383b7a77b 100644 --- a/src/main/java/com/hbm/render/entity/projectile/RenderRBMKDebris.java +++ b/src/main/java/com/hbm/render/entity/projectile/RenderRBMKDebris.java @@ -15,9 +15,10 @@ public class RenderRBMKDebris extends Render { //for fallback only private static final ResourceLocation tex_base = new ResourceLocation(RefStrings.MODID + ":textures/blocks/rbmk/rbmk_side.png"); - private static final ResourceLocation tex_element = new ResourceLocation(RefStrings.MODID + ":textures/blocks/rbmk/rbmk_element.png"); + private static final ResourceLocation tex_element = new ResourceLocation(RefStrings.MODID + ":textures/blocks/rbmk/rbmk_fuel.png"); private static final ResourceLocation tex_control = new ResourceLocation(RefStrings.MODID + ":textures/blocks/rbmk/rbmk_control.png"); - private static final ResourceLocation tex_blank = new ResourceLocation(RefStrings.MODID + ":textures/blocks/rbmk/rbmk_blank.png"); + private static final ResourceLocation tex_blank = new ResourceLocation(RefStrings.MODID + ":textures/blocks/rbmk/rbmk_blank_side.png"); + private static final ResourceLocation tex_lid = new ResourceLocation(RefStrings.MODID + ":textures/blocks/rbmk/rbmk_blank_cover_top.png"); private static final ResourceLocation tex_graphite = new ResourceLocation(RefStrings.MODID + ":textures/blocks/block_graphite.png"); @Override @@ -35,10 +36,10 @@ public class RenderRBMKDebris extends Render { switch(type) { case BLANK: bindTexture(tex_blank); ResourceManager.deb_blank.renderAll(); break; - case ELEMENT: bindTexture(tex_element); ResourceManager.deb_element.renderAll(); break; + case ELEMENT: bindTexture(tex_base); ResourceManager.deb_element.renderAll(); break; case FUEL: bindTexture(tex_element); ResourceManager.deb_fuel.renderAll(); break; case GRAPHITE: bindTexture(tex_graphite); ResourceManager.deb_graphite.renderAll(); break; - case LID: bindTexture(tex_blank); ResourceManager.deb_lid.renderAll(); break; + case LID: bindTexture(tex_lid); ResourceManager.deb_lid.renderAll(); break; case ROD: bindTexture(tex_control); ResourceManager.deb_rod.renderAll(); break; default: break; } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java index 716d1f933..c638a75b9 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java @@ -7,6 +7,7 @@ import api.hbm.tile.IInfoProviderEC; import com.hbm.blocks.ModBlocks; import com.hbm.entity.projectile.EntityRBMKDebris.DebrisType; import com.hbm.handler.CompatHandler; +import com.hbm.handler.threading.PacketThreading; import com.hbm.interfaces.IControlReceiver; import com.hbm.inventory.container.ContainerRBMKGeneric; import com.hbm.inventory.fluid.FluidType; @@ -14,11 +15,14 @@ import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.gui.GUIRBMKBoiler; import com.hbm.lib.Library; +import com.hbm.main.MainRegistry; +import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; import com.hbm.uninos.UniNodespace; import com.hbm.util.CompatEnergyControl; import com.hbm.util.fauxpointtwelve.DirPos; import cpw.mods.fml.common.Optional; +import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; @@ -39,6 +43,7 @@ public class TileEntityRBMKBoiler extends TileEntityRBMKSlottedBase implements I public FluidTank steam; protected int consumption; protected int output; + protected int ventDelay; public TileEntityRBMKBoiler() { super(0); @@ -59,6 +64,7 @@ public class TileEntityRBMKBoiler extends TileEntityRBMKSlottedBase implements I this.consumption = 0; this.output = 0; + if(this.ventDelay > 0) this.ventDelay--; double heatCap = this.getHeatFromSteam(steam.getTankType()); double heatProvided = this.heat - heatCap; @@ -89,8 +95,17 @@ public class TileEntityRBMKBoiler extends TileEntityRBMKSlottedBase implements I feed.setFill(feed.getFill() - waterUsed); steam.setFill(steam.getFill() + steamProduced); - if(steam.getFill() > steam.getMaxFill()) + if(steam.getFill() > steam.getMaxFill()) { steam.setFill(steam.getMaxFill()); + + if(ventDelay <= 0) { + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "rbmksteam"); + PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, xCoord + 0.25 + worldObj.rand.nextInt(2) * 0.5, yCoord + RBMKDials.getColumnHeight(worldObj), zCoord + 0.25 + worldObj.rand.nextInt(2) * 0.5), new TargetPoint(worldObj.provider.dimensionId, xCoord + 0.5, yCoord + 1, zCoord + 0.5, 100)); + MainRegistry.proxy.effectNT(data); + this.ventDelay = 20; + } + } this.heat -= waterUsed * HEAT_PER_MB_WATER; } diff --git a/src/main/resources/assets/hbm/manual/rbmk/cooler.json b/src/main/resources/assets/hbm/manual/rbmk/cooler.json index 4bd4c2049..70cd3c4a9 100644 --- a/src/main/resources/assets/hbm/manual/rbmk/cooler.json +++ b/src/main/resources/assets/hbm/manual/rbmk/cooler.json @@ -7,7 +7,6 @@ "zh_CN": "RBMK冷却器" }, "content": { - "en_US": "The cooler is an optional component that can be used to cool an [[RBMK]], however unlike the [[steam channel|RBMK Steam Channel]], the cooler does not allow the heat to be extracted and used. The RBMK cooler simply \"eats\" cryogel to remove heat. Coolers are rarely useful for power producing reactors, however they are sometimes found in high-heat breeding reactor setups or as backup cooling.", - "zh_CN": "冷却器是用于冷却[[RBMK]]的可选部件,但其与[[蒸汽管道|RBMK Steam Channel]] 不同,冷却器并不能将热量提取出来并用在其他地方。RBMK冷却器只会 “吞掉”冷凝胶,并将其用于移除热量。在发电用的反应堆中冷却器通常派不 上用场,但其有时会用于高热量的增殖用反应堆,或是用作备用冷却系统。" + "en_US": "The cooler is an optional component that can be used to cool an [[RBMK]], however unlike the [[steam channel|RBMK Steam Channel]], the cooler does not allow the heat to be extracted and used. The RBMK cooler uses up cold perfluoromethyl and outputs regular PFM at a constant rate of 50mB/t, and rapidly cools down all RBMK components in a 5x5 area." } } diff --git a/src/main/resources/assets/hbm/models/projectiles/deb_element.obj b/src/main/resources/assets/hbm/models/projectiles/deb_element.obj index 5d48e52d4..0fdbf9b57 100644 --- a/src/main/resources/assets/hbm/models/projectiles/deb_element.obj +++ b/src/main/resources/assets/hbm/models/projectiles/deb_element.obj @@ -157,442 +157,441 @@ v -0.500000 -0.500000 0.260492 v -0.275475 -0.500000 0.500000 v -0.328909 -0.500000 0.443000 v -0.441036 -0.500000 0.323391 -vt 0.000000 0.500000 -vt 0.500000 0.000000 -vt 0.500000 0.500000 -vt 0.500000 0.968750 -vt 0.562500 0.500000 -vt 0.562500 0.968750 -vt 0.500000 0.968750 -vt 0.562500 0.500000 -vt 0.562500 0.968750 -vt 0.500000 0.968750 -vt 0.562500 0.500000 -vt 0.562500 0.968750 -vt 0.500000 0.968750 -vt 0.562500 0.500000 -vt 0.562500 0.968750 -vt 0.500000 0.500000 -vt 0.562500 0.968750 -vt 0.500000 0.968750 -vt 0.500000 0.500000 -vt 0.562500 0.968750 -vt 0.500000 0.968750 -vt 0.500000 0.500000 -vt 0.562500 0.968750 -vt 0.500000 0.968750 -vt 0.500000 0.500000 -vt 0.562500 0.968750 -vt 0.500000 0.968750 -vt 0.500000 0.500000 -vt 0.562500 0.968750 -vt 0.500000 0.968750 -vt 0.500000 0.500000 -vt 0.562500 0.968750 -vt 0.500000 0.968750 -vt 0.500000 0.500000 -vt 0.562500 0.968750 -vt 0.500000 0.968750 -vt 0.500000 0.968750 -vt 0.562500 0.500000 -vt 0.562500 0.968750 -vt 0.500000 0.968750 -vt 0.562500 0.500000 -vt 0.562500 0.968750 -vt 0.500000 0.968750 -vt 0.562500 0.500000 -vt 0.562500 0.968750 -vt 0.500000 0.968750 -vt 0.562500 0.500000 -vt 0.562500 0.968750 -vt 0.500000 0.500000 -vt 0.562500 0.968750 -vt 0.500000 0.968750 -vt 0.500000 0.500000 -vt 0.562500 0.968750 -vt 0.500000 0.968750 -vt 0.500000 0.500000 -vt 0.562500 0.968750 -vt 0.500000 0.968750 -vt 0.500000 0.500000 -vt 0.562500 0.968750 -vt 0.500000 0.968750 -vt 0.500000 0.968750 -vt 0.562500 0.500000 -vt 0.562500 0.968750 -vt 0.500000 0.968750 -vt 0.562500 0.500000 -vt 0.562500 0.968750 -vt 0.500000 0.968750 -vt 0.562500 0.500000 -vt 0.562500 0.968750 -vt 0.500000 0.968750 -vt 0.562500 0.500000 -vt 0.562500 0.968750 -vt 0.500000 0.500000 -vt 0.562500 0.968750 -vt 0.500000 0.968750 -vt 0.500000 0.500000 -vt 0.562500 0.968750 -vt 0.500000 0.968750 -vt 0.500000 0.500000 -vt 0.562500 0.968750 -vt 0.500000 0.968750 -vt 0.500000 0.500000 -vt 0.562500 0.968750 -vt 0.500000 0.968750 -vt 0.500000 1.000000 -vt 0.562500 0.968750 -vt 0.562500 1.000000 -vt 0.031250 0.843750 -vt 0.093750 0.781250 -vt 0.031250 0.843750 -vt 0.500000 0.968750 -vt 0.562500 1.000000 -vt 0.500000 1.000000 -vt 0.500000 1.000000 -vt 0.562500 0.968750 -vt 0.562500 1.000000 -vt 0.562500 1.000000 -vt 0.500000 0.968750 -vt 0.562500 0.968750 -vt 0.500000 1.000000 -vt 0.562500 0.968750 -vt 0.562500 1.000000 -vt 0.093750 0.531250 -vt 0.031250 0.593750 -vt 0.031250 0.593750 -vt 0.500000 1.000000 -vt 0.562500 0.968750 -vt 0.562500 1.000000 -vt 0.562500 0.968750 -vt 0.500000 1.000000 -vt 0.500000 0.968750 -vt 0.500000 1.000000 -vt 0.562500 0.968750 -vt 0.562500 1.000000 -vt 0.500000 1.000000 -vt 0.562500 0.968750 -vt 0.562500 1.000000 -vt 0.562500 1.000000 -vt 0.500000 0.968750 -vt 0.562500 0.968750 -vt 0.500000 1.000000 -vt 0.562500 0.968750 -vt 0.562500 1.000000 -vt 0.156250 0.718750 -vt 0.093750 0.781250 -vt 0.093750 0.718750 -vt 0.218750 0.656250 -vt 0.281250 0.593750 -vt 0.281250 0.656250 -vt 0.218750 0.906250 -vt 0.281250 0.843750 -vt 0.281250 0.906250 -vt 0.406250 0.718750 -vt 0.343750 0.781250 -vt 0.343750 0.718750 -vt 0.156250 0.781250 -vt 0.000000 0.500000 -vt 0.031250 0.656250 -vt 0.031250 0.843750 -vt 0.062012 0.934940 -vt 0.119323 0.561307 -vt 0.228307 0.597032 -vt 0.280243 0.614057 -vt 0.093750 0.531250 -vt 0.031250 0.593750 -vt 0.093750 0.968750 -vt 0.000000 1.000000 -vt 0.031250 0.906250 -vt 0.500000 0.500000 -vt 0.519465 0.500000 -vt 0.562500 0.566797 -vt 0.500000 1.000000 -vt 0.562500 0.619660 -vt 0.562500 1.000000 -vt 0.500000 0.968750 -vt 0.562500 0.628378 -vt 0.562500 0.968750 -vt 0.562500 0.968750 -vt 0.500000 0.628378 -vt 0.562500 0.584233 -vt 0.500000 0.584233 -vt 0.554269 0.500000 -vt 0.562500 0.500000 -vt 0.187022 1.000000 -vt 0.156250 0.968750 -vt 0.062012 0.542521 -vt 0.000000 0.500000 -vt 0.187022 0.000000 -vt 0.500000 0.221063 -vt 0.460675 0.646947 -vt 0.318505 0.810367 -vt 0.362590 0.737553 -vt 0.360025 0.643622 -vt 0.276321 0.951439 -vt 0.178800 0.755979 -vt 0.226610 0.819580 -vt 0.175565 0.637529 -vt 0.036905 0.632949 -vt 0.218750 0.656250 -vt 0.281250 0.593750 -vt 0.281250 0.656250 -vt 0.218750 0.843750 -vt 0.281250 0.906250 -vt 0.218750 0.906250 -vt 0.406250 0.781250 -vt 0.343750 0.718750 -vt 0.406250 0.718750 -vt 0.156250 0.781250 -vt 0.093750 0.718750 -vt 0.156250 0.718750 -vt 0.343750 0.781250 -vt 0.156250 0.968750 -vt 0.343750 0.968750 -vt 0.000000 0.500000 -vt 0.031250 0.656250 -vt 0.343750 0.531250 -vt 0.218750 0.593750 -vt 0.156250 0.531250 -vt 0.468750 0.843750 -vt 0.468750 0.656250 -vt 0.500000 0.500000 -vt 0.406250 0.531250 -vt 0.468750 0.593750 -vt 0.406250 0.968750 -vt 0.468750 0.906250 -vt 0.500000 1.000000 -vt 0.031250 0.906250 -vt 0.093750 0.968750 -vt 0.000000 1.000000 -vt 0.500000 1.000000 -vt 0.562500 0.968750 -vt 0.562500 1.000000 -vt 0.281250 0.593750 -vt 0.500000 1.000000 -vt 0.562500 0.968750 -vt 0.562500 1.000000 -vt 0.562500 1.000000 -vt 0.500000 0.968750 -vt 0.562500 0.968750 -vt 0.562500 1.000000 -vt 0.500000 0.968750 -vt 0.562500 0.968750 -vt 0.562500 1.000000 -vt 0.500000 0.968750 -vt 0.562500 0.968750 -vt 0.281250 0.843750 -vt 0.281250 0.843750 -vt 0.500000 1.000000 -vt 0.562500 0.968750 -vt 0.562500 1.000000 -vt 0.500000 1.000000 -vt 0.562500 0.968750 -vt 0.562500 1.000000 -vt 0.500000 1.000000 -vt 0.562500 0.968750 -vt 0.562500 1.000000 -vt 0.562500 1.000000 -vt 0.500000 0.968750 -vt 0.562500 0.968750 -vt 0.500000 1.000000 -vt 0.562500 0.968750 -vt 0.562500 1.000000 -vt 0.500000 1.000000 -vt 0.562500 0.968750 -vt 0.562500 1.000000 -vt 0.500000 1.000000 -vt 0.562500 0.968750 -vt 0.562500 1.000000 -vt 0.562500 0.968750 -vt 0.500000 1.000000 -vt 0.500000 0.968750 -vt 0.500000 0.968750 -vt 0.562500 1.000000 -vt 0.500000 1.000000 -vt 0.562500 1.000000 -vt 0.500000 0.968750 -vt 0.562500 0.968750 -vt 0.562500 1.000000 -vt 0.500000 0.968750 -vt 0.562500 0.968750 -vt 0.562500 0.968750 -vt 0.500000 1.000000 -vt 0.500000 0.968750 -vt 0.343750 0.531250 -vt 0.218750 0.593750 -vt 0.156250 0.531250 -vt 0.281250 0.593750 -vt 0.218750 0.656250 -vt 0.093750 0.718750 -vt 0.031250 0.843750 -vt 0.031250 0.656250 -vt 0.156250 0.781250 -vt 0.156250 0.718750 -vt 0.218750 0.906250 -vt 0.343750 0.968750 -vt 0.156250 0.968750 -vt 0.218750 0.843750 -vt 0.281250 0.906250 -vt 0.468750 0.843750 -vt 0.406250 0.718750 -vt 0.468750 0.656250 -vt 0.343750 0.781250 -vt 0.406250 0.781250 -vt 0.093750 0.968750 -vt 0.031250 0.968750 -vt 0.031250 0.906250 -vt 0.468750 0.968750 -vt 0.406250 0.968750 -vt 0.468750 0.906250 -vt 0.406250 0.531250 -vt 0.468750 0.531250 -vt 0.468750 0.593750 -vt 0.031250 0.531250 -vt 0.093750 0.531250 -vt 0.031250 0.593750 -vt 0.000000 0.500000 -vt 0.000000 1.000000 -vt 0.500000 0.500000 -vt 0.218750 0.593750 -vt 0.281250 0.656250 -vt 0.218750 0.656250 -vt 0.343750 0.531250 -vt 0.156250 0.531250 -vt 0.406250 0.781250 -vt 0.343750 0.718750 -vt 0.406250 0.718750 -vt 0.468750 0.843750 -vt 0.468750 0.656250 -vt 0.156250 0.781250 -vt 0.093750 0.718750 -vt 0.156250 0.718750 -vt 0.093750 0.781250 -vt 0.031250 0.656250 -vt 0.218750 0.843750 -vt 0.281250 0.906250 -vt 0.218750 0.906250 -vt 0.343750 0.968750 -vt 0.156250 0.968750 -vt 0.343750 0.781250 -vt 0.406250 0.531250 -vt 0.468750 0.531250 -vt 0.468750 0.593750 -vt 0.031250 0.593750 -vt 0.031250 0.531250 -vt 0.093750 0.531250 -vt 0.468750 0.968750 -vt 0.406250 0.968750 -vt 0.468750 0.906250 -vt 0.093750 0.968750 -vt 0.031250 0.968750 -vt 0.031250 0.906250 -vt -0.000000 0.500000 -vt -0.000000 1.000000 -vt 0.500000 0.500000 -vt 0.406250 0.531250 -vt 0.470565 0.588305 -vt 0.468750 0.593750 -vt 0.387737 0.500000 -vt 0.343750 0.531250 -vt 0.156250 0.531250 -vt 0.500000 0.619754 -vt 0.000000 0.253630 -vt 0.112263 0.000000 -vt 0.500000 0.000000 -vt 0.261361 0.000000 -vt 0.380246 0.000000 -vt 0.500000 0.253630 -vt 0.000000 0.000000 -vt 0.500000 0.500000 -vt 0.500000 0.500000 -vt 0.500000 0.500000 -vt 0.500000 0.500000 -vt 0.562500 0.500000 -vt 0.562500 0.500000 -vt 0.562500 0.500000 -vt 0.562500 0.500000 -vt 0.562500 0.500000 -vt 0.562500 0.500000 -vt 0.562500 0.500000 -vt 0.500000 0.500000 -vt 0.500000 0.500000 -vt 0.500000 0.500000 -vt 0.500000 0.500000 -vt 0.562500 0.500000 -vt 0.562500 0.500000 -vt 0.562500 0.500000 -vt 0.562500 0.500000 -vt 0.500000 0.500000 -vt 0.500000 0.500000 -vt 0.500000 0.500000 -vt 0.500000 0.500000 -vt 0.562500 0.500000 -vt 0.562500 0.500000 -vt 0.562500 0.500000 -vt 0.562500 0.500000 -vt 0.500000 0.968750 -vt 0.093750 0.781250 -vt 0.562500 0.968750 -vt 0.500000 0.968750 -vt 0.500000 1.000000 -vt 0.500000 0.968750 -vt 0.093750 0.531250 -vt 0.500000 0.968750 -vt 0.562500 1.000000 -vt 0.500000 0.968750 -vt 0.500000 0.968750 -vt 0.500000 1.000000 -vt 0.500000 0.968750 -vt 0.218750 0.593750 -vt 0.218750 0.843750 -vt 0.406250 0.781250 -vt 0.562500 0.968750 -vt 0.500000 0.968750 -vt 0.500000 0.566797 -vt 0.500000 0.619660 -vt 0.500000 0.968750 -vt 0.562500 0.968750 -vt 0.500000 0.968750 -vt 0.289481 0.914481 -vt 0.500000 0.500000 -vt 0.000000 0.000000 -vt 0.500000 0.968750 -vt 0.343750 0.531250 -vt 0.500000 0.968750 -vt 0.500000 1.000000 -vt 0.500000 1.000000 -vt 0.500000 1.000000 -vt 0.343750 0.781250 -vt 0.500000 0.968750 -vt 0.500000 0.968750 -vt 0.500000 0.968750 -vt 0.500000 1.000000 -vt 0.500000 0.968750 -vt 0.500000 0.968750 -vt 0.500000 0.968750 -vt 0.562500 1.000000 -vt 0.562500 0.968750 -vt 0.500000 1.000000 -vt 0.500000 1.000000 -vt 0.562500 1.000000 -vt 0.281250 0.656250 -vt 0.093750 0.781250 -vt 0.281250 0.843750 -vt 0.343750 0.718750 -vt 0.500000 1.000000 -vt 0.281250 0.593750 -vt 0.031250 0.843750 -vt 0.281250 0.843750 -vt 0.500000 1.000000 -vt 0.414500 0.528500 -vt 0.500000 0.738639 -vt 0.468750 0.656250 -vt 0.425715 0.800715 -vt 0.500000 0.500000 -vt 0.000000 0.500000 -vt 0.000000 0.221063 +vt 0.000000 1.000977 +vt 1.000000 0.000977 +vt 1.000000 1.000977 +vt 0.000000 0.938323 +vt 0.125000 0.000823 +vt 0.125000 0.938323 +vt 0.000000 0.938323 +vt 0.125000 0.000823 +vt 0.125000 0.938323 +vt 0.000000 0.938323 +vt 0.125000 0.000823 +vt 0.125000 0.938323 +vt 0.000000 0.938323 +vt 0.125000 0.000823 +vt 0.125000 0.938323 +vt 0.000000 0.000823 +vt 0.125000 0.938323 +vt 0.000000 0.938323 +vt 0.000000 0.000823 +vt 0.125000 0.938323 +vt 0.000000 0.938323 +vt 0.000000 0.000823 +vt 0.125000 0.938323 +vt 0.000000 0.938323 +vt 0.000000 0.000823 +vt 0.125000 0.938323 +vt 0.000000 0.938323 +vt 0.000000 0.000823 +vt 0.125000 0.938323 +vt 0.000000 0.938323 +vt 0.000000 0.000823 +vt 0.125000 0.938323 +vt 0.000000 0.938323 +vt 0.000000 0.000823 +vt 0.125000 0.938323 +vt 0.000000 0.938323 +vt 0.000000 0.938323 +vt 0.125000 0.000823 +vt 0.125000 0.938323 +vt 0.000000 0.938323 +vt 0.125000 0.000823 +vt 0.125000 0.938323 +vt 0.000000 0.938323 +vt 0.125000 0.000823 +vt 0.125000 0.938323 +vt 0.000000 0.938323 +vt 0.125000 0.000823 +vt 0.125000 0.938323 +vt 0.000000 0.000823 +vt 0.125000 0.938323 +vt 0.000000 0.938323 +vt 0.000000 0.000823 +vt 0.125000 0.938323 +vt 0.000000 0.938323 +vt 0.000000 0.000823 +vt 0.125000 0.938323 +vt 0.000000 0.938323 +vt 0.000000 0.000823 +vt 0.125000 0.938323 +vt 0.000000 0.938323 +vt 0.000000 0.938323 +vt 0.125000 0.000823 +vt 0.125000 0.938323 +vt 0.000000 0.938323 +vt 0.125000 0.000823 +vt 0.125000 0.938323 +vt 0.000000 0.938323 +vt 0.125000 0.000823 +vt 0.125000 0.938323 +vt 0.000000 0.938323 +vt 0.125000 0.000823 +vt 0.125000 0.938323 +vt 0.000000 0.000823 +vt 0.125000 0.938323 +vt 0.000000 0.938323 +vt 0.000000 0.000823 +vt 0.125000 0.938323 +vt 0.000000 0.938323 +vt 0.000000 0.000823 +vt 0.125000 0.938323 +vt 0.000000 0.938323 +vt 0.000000 0.000823 +vt 0.125000 0.938323 +vt 0.000000 0.938323 +vt 0.000000 1.000977 +vt 0.125000 0.938477 +vt 0.125000 1.000977 +vt 0.062500 0.688477 +vt 0.187500 0.563477 +vt 0.062500 0.688477 +vt 0.000000 0.938477 +vt 0.125000 1.000977 +vt 0.000000 1.000977 +vt 0.000000 1.000977 +vt 0.125000 0.938477 +vt 0.125000 1.000977 +vt 0.125000 1.000977 +vt 0.000000 0.938477 +vt 0.125000 0.938477 +vt 0.000000 1.000977 +vt 0.125000 0.938477 +vt 0.125000 1.000977 +vt 0.187500 0.063477 +vt 0.062500 0.188477 +vt 0.062500 0.188477 +vt 0.000000 1.000977 +vt 0.125000 0.938477 +vt 0.125000 1.000977 +vt 0.125000 0.938477 +vt 0.000000 1.000977 +vt 0.000000 0.938477 +vt 0.000000 1.000977 +vt 0.125000 0.938477 +vt 0.125000 1.000977 +vt 0.000000 1.000977 +vt 0.125000 0.938477 +vt 0.125000 1.000977 +vt 0.125000 1.000977 +vt 0.000000 0.938477 +vt 0.125000 0.938477 +vt 0.000000 1.000977 +vt 0.125000 0.938477 +vt 0.125000 1.000977 +vt 0.312500 0.438477 +vt 0.187500 0.563477 +vt 0.187500 0.438477 +vt 0.437500 0.313477 +vt 0.562500 0.188477 +vt 0.562500 0.313477 +vt 0.437500 0.813477 +vt 0.562500 0.688477 +vt 0.562500 0.813477 +vt 0.812500 0.438477 +vt 0.687500 0.563477 +vt 0.687500 0.438477 +vt 0.312500 0.563477 +vt 0.000000 0.000977 +vt 0.062500 0.313477 +vt 0.062500 0.688477 +vt 0.124025 0.870856 +vt 0.238646 0.123591 +vt 0.456613 0.195040 +vt 0.560486 0.229090 +vt 0.187500 0.063477 +vt 0.062500 0.188477 +vt 0.187500 0.938477 +vt 0.000000 1.000977 +vt 0.062500 0.813477 +vt 0.000000 0.000823 +vt 0.038929 0.000823 +vt 0.125000 0.134416 +vt 0.000000 1.000823 +vt 0.125000 0.240143 +vt 0.125000 1.000823 +vt 0.000000 0.938323 +vt 0.125000 0.257580 +vt 0.125000 0.938323 +vt 0.125000 0.938323 +vt 0.000000 0.257580 +vt 0.125000 0.169289 +vt 0.000000 0.169289 +vt 0.108539 0.000823 +vt 0.125000 0.000823 +vt 0.374044 1.000977 +vt 0.312500 0.938477 +vt 0.124024 0.086018 +vt 0.000000 1.000977 +vt 0.374044 0.000977 +vt 1.000000 0.443103 +vt 0.921349 0.294871 +vt 0.637010 0.621710 +vt 0.725180 0.476082 +vt 0.720050 0.288221 +vt 0.552641 0.903854 +vt 0.357599 0.512934 +vt 0.453220 0.640136 +vt 0.351130 0.276035 +vt 0.073810 0.266874 +vt 0.437500 0.313477 +vt 0.562500 0.188477 +vt 0.562500 0.313477 +vt 0.437500 0.688477 +vt 0.562500 0.813477 +vt 0.437500 0.813477 +vt 0.812500 0.563477 +vt 0.687500 0.438477 +vt 0.812500 0.438477 +vt 0.312500 0.563477 +vt 0.187500 0.438477 +vt 0.312500 0.438477 +vt 0.687500 0.563477 +vt 0.312500 0.938477 +vt 0.687500 0.938477 +vt 0.000000 0.000977 +vt 0.062500 0.313477 +vt 0.687500 0.063477 +vt 0.437500 0.188477 +vt 0.312500 0.063477 +vt 0.937500 0.688477 +vt 0.937500 0.313477 +vt 1.000000 0.000977 +vt 0.812500 0.063477 +vt 0.937500 0.188477 +vt 0.812500 0.938477 +vt 0.937500 0.813477 +vt 1.000000 1.000977 +vt 0.062500 0.813477 +vt 0.187500 0.938477 +vt 0.000000 1.000977 +vt 0.000000 1.000977 +vt 0.125000 0.938477 +vt 0.125000 1.000977 +vt 0.562500 0.188477 +vt 0.000000 1.000977 +vt 0.125000 0.938477 +vt 0.125000 1.000977 +vt 0.125000 1.000977 +vt 0.000000 0.938477 +vt 0.125000 0.938477 +vt 0.125000 1.000977 +vt 0.000000 0.938477 +vt 0.125000 0.938477 +vt 0.125000 1.000977 +vt 0.000000 0.938477 +vt 0.125000 0.938477 +vt 0.562500 0.688477 +vt 0.562500 0.688477 +vt 0.000000 1.000977 +vt 0.125000 0.938477 +vt 0.125000 1.000977 +vt 0.000000 1.000977 +vt 0.125000 0.938477 +vt 0.125000 1.000977 +vt 0.000000 1.000977 +vt 0.125000 0.938477 +vt 0.125000 1.000977 +vt 0.125000 1.000977 +vt 0.000000 0.938477 +vt 0.125000 0.938477 +vt 0.000000 1.000977 +vt 0.125000 0.938477 +vt 0.125000 1.000977 +vt 0.000000 1.000977 +vt 0.125000 0.938477 +vt 0.125000 1.000977 +vt 0.000000 1.000977 +vt 0.125000 0.938477 +vt 0.125000 1.000977 +vt 0.125000 0.938477 +vt 0.000000 1.000977 +vt 0.000000 0.938477 +vt 0.000000 0.938477 +vt 0.125000 1.000977 +vt 0.000000 1.000977 +vt 0.125000 1.000977 +vt 0.000000 0.938477 +vt 0.125000 0.938477 +vt 0.125000 1.000977 +vt 0.000000 0.938477 +vt 0.125000 0.938477 +vt 0.125000 0.938477 +vt 0.000000 1.000977 +vt 0.000000 0.938477 +vt 0.687500 0.063477 +vt 0.437500 0.188477 +vt 0.312500 0.063477 +vt 0.562500 0.188477 +vt 0.437500 0.313477 +vt 0.187500 0.438477 +vt 0.062500 0.688477 +vt 0.062500 0.313477 +vt 0.312500 0.563477 +vt 0.312500 0.438477 +vt 0.437500 0.813477 +vt 0.687500 0.938477 +vt 0.312500 0.938477 +vt 0.437500 0.688477 +vt 0.562500 0.813477 +vt 0.937500 0.688477 +vt 0.812500 0.438477 +vt 0.937500 0.313477 +vt 0.687500 0.563477 +vt 0.812500 0.563477 +vt 0.187500 0.938477 +vt 0.062500 0.938477 +vt 0.062500 0.813477 +vt 0.937500 0.938477 +vt 0.812500 0.938477 +vt 0.937500 0.813477 +vt 0.812500 0.063477 +vt 0.937500 0.063477 +vt 0.937500 0.188477 +vt 0.062500 0.063477 +vt 0.187500 0.063477 +vt 0.062500 0.188477 +vt 0.000000 0.000977 +vt 0.000000 1.000977 +vt 1.000000 0.000977 +vt 0.437500 0.188477 +vt 0.562500 0.313477 +vt 0.437500 0.313477 +vt 0.687500 0.063477 +vt 0.312500 0.063477 +vt 0.812500 0.563477 +vt 0.687500 0.438477 +vt 0.812500 0.438477 +vt 0.937500 0.688477 +vt 0.937500 0.313477 +vt 0.312500 0.563477 +vt 0.187500 0.438477 +vt 0.312500 0.438477 +vt 0.187500 0.563477 +vt 0.062500 0.313477 +vt 0.437500 0.688477 +vt 0.562500 0.813477 +vt 0.437500 0.813477 +vt 0.687500 0.938477 +vt 0.312500 0.938477 +vt 0.687500 0.563477 +vt 0.812500 0.063477 +vt 0.937500 0.063477 +vt 0.937500 0.188477 +vt 0.062500 0.188477 +vt 0.062500 0.063477 +vt 0.187500 0.063477 +vt 0.937500 0.938477 +vt 0.812500 0.938477 +vt 0.937500 0.813477 +vt 0.187500 0.938477 +vt 0.062500 0.938477 +vt 0.062500 0.813477 +vt 0.000000 0.000977 +vt 0.000000 1.000977 +vt 1.000000 0.000977 +vt 0.812500 0.063477 +vt 0.941130 0.177586 +vt 0.937500 0.188477 +vt 0.775475 0.000977 +vt 0.687500 0.063477 +vt 0.312500 0.063477 +vt 1.000000 0.240485 +vt 0.000000 0.508237 +vt 0.224525 0.000977 +vt 1.000000 0.000977 +vt 0.522722 0.000977 +vt 0.760492 0.000977 +vt 1.000000 0.508237 +vt 0.000000 0.000823 +vt 0.000000 0.000823 +vt 0.000000 0.000823 +vt 0.000000 0.000823 +vt 0.125000 0.000823 +vt 0.125000 0.000823 +vt 0.125000 0.000823 +vt 0.125000 0.000823 +vt 0.125000 0.000823 +vt 0.125000 0.000823 +vt 0.125000 0.000823 +vt 0.000000 0.000823 +vt 0.000000 0.000823 +vt 0.000000 0.000823 +vt 0.000000 0.000823 +vt 0.125000 0.000823 +vt 0.125000 0.000823 +vt 0.125000 0.000823 +vt 0.125000 0.000823 +vt 0.000000 0.000823 +vt 0.000000 0.000823 +vt 0.000000 0.000823 +vt 0.000000 0.000823 +vt 0.125000 0.000823 +vt 0.125000 0.000823 +vt 0.125000 0.000823 +vt 0.125000 0.000823 +vt 0.000000 0.938477 +vt 0.187500 0.563477 +vt 0.125000 0.938477 +vt 0.000000 0.938477 +vt 0.000000 1.000977 +vt 0.000000 0.938477 +vt 0.187500 0.063477 +vt 0.000000 0.938477 +vt 0.125000 1.000977 +vt 0.000000 0.938477 +vt 0.000000 0.938477 +vt 0.000000 1.000977 +vt 0.000000 0.938477 +vt 0.437500 0.188477 +vt 0.437500 0.688477 +vt 0.812500 0.563477 +vt 0.125000 0.938323 +vt 0.000000 0.938323 +vt 0.000000 0.134416 +vt 0.000000 0.240143 +vt 0.000000 0.938323 +vt 0.125000 0.938323 +vt 0.000000 0.938323 +vt 0.578961 0.829938 +vt 1.000000 1.000977 +vt 0.000000 0.000977 +vt 0.000000 0.938477 +vt 0.687500 0.063477 +vt 0.000000 0.938477 +vt 0.000000 1.000977 +vt 0.000000 1.000977 +vt 0.000000 1.000977 +vt 0.687500 0.563477 +vt 0.000000 0.938477 +vt 0.000000 0.938477 +vt 0.000000 0.938477 +vt 0.000000 1.000977 +vt 0.000000 0.938477 +vt 0.000000 0.938477 +vt 0.000000 0.938477 +vt 0.125000 1.000977 +vt 0.125000 0.938477 +vt 0.000000 1.000977 +vt 0.000000 1.000977 +vt 0.125000 1.000977 +vt 0.562500 0.313477 +vt 0.187500 0.563477 +vt 0.562500 0.688477 +vt 0.687500 0.438477 +vt 1.000000 1.000977 +vt 0.562500 0.188477 +vt 0.062500 0.688477 +vt 0.562500 0.688477 +vt 0.829000 0.057976 +vt 1.000000 0.478254 +vt 0.937500 0.313477 +vt 0.851429 0.602406 +vt 1.000000 1.000977 +vt 0.000000 1.000977 +vt 1.000000 1.000977 +vt 0.000000 0.443103 vn 1.0000 0.0000 0.0000 vn 0.7071 0.0000 0.7071 vn 0.0000 0.0000 1.0000 @@ -759,54 +758,54 @@ f 154/338/17 30/339/17 64/340/17 f 34/337/17 156/336/17 153/341/17 f 152/342/3 154/343/3 3/344/3 f 68/345/5 153/346/5 152/347/5 -f 4/1/1 3/348/1 5/2/1 -f 8/4/2 33/349/2 31/5/2 -f 7/7/1 34/350/1 33/8/1 -f 10/10/3 31/351/3 29/11/3 -f 12/13/4 29/352/4 27/14/4 -f 27/16/5 28/353/5 13/17/5 -f 28/19/6 30/354/6 11/20/6 -f 30/22/7 32/355/7 9/23/7 -f 32/25/8 34/356/8 7/26/8 -f 18/28/5 17/357/5 20/29/5 -f 17/31/6 16/358/6 22/32/6 -f 16/34/7 15/359/7 24/35/7 -f 36/37/2 65/360/2 63/38/2 -f 35/40/1 66/361/1 65/41/1 -f 38/43/3 63/362/3 61/44/3 -f 40/46/4 61/363/4 59/47/4 -f 59/49/5 60/364/5 41/50/5 -f 60/52/6 62/365/6 39/53/6 -f 62/55/7 64/366/7 37/56/7 -f 64/58/8 66/367/8 35/59/8 -f 57/61/2 44/368/2 46/62/2 -f 58/64/1 43/369/1 44/65/1 -f 55/67/3 46/370/3 48/68/3 -f 53/70/4 48/371/4 50/71/4 -f 50/73/5 49/372/5 52/74/5 -f 49/76/6 47/373/6 54/77/6 -f 47/79/7 45/374/7 56/80/7 -f 45/82/8 43/375/8 58/83/8 -f 81/85/9 113/376/9 115/86/9 -f 95/88/10 93/377/10 125/89/10 -f 109/91/11 107/378/11 139/92/11 -f 80/94/12 112/379/12 113/95/12 -f 94/97/12 95/380/12 127/98/12 -f 108/100/13 140/381/13 138/101/13 -f 82/103/10 114/382/10 112/104/10 -f 94/106/9 126/383/9 124/107/9 -f 104/109/14 136/384/14 137/110/14 -f 91/112/11 123/385/11 125/113/11 -f 105/115/15 137/386/15 139/116/15 -f 90/118/13 92/387/13 124/119/13 -f 106/121/16 138/388/16 136/122/16 +f 4/1/1 3/137/1 5/2/1 +f 8/4/2 33/348/2 31/5/2 +f 7/7/1 34/349/1 33/8/1 +f 10/10/3 31/350/3 29/11/3 +f 12/13/4 29/351/4 27/14/4 +f 27/16/5 28/352/5 13/17/5 +f 28/19/6 30/353/6 11/20/6 +f 30/22/7 32/354/7 9/23/7 +f 32/25/8 34/355/8 7/26/8 +f 18/28/5 17/356/5 20/29/5 +f 17/31/6 16/357/6 22/32/6 +f 16/34/7 15/358/7 24/35/7 +f 36/37/2 65/359/2 63/38/2 +f 35/40/1 66/360/1 65/41/1 +f 38/43/3 63/361/3 61/44/3 +f 40/46/4 61/362/4 59/47/4 +f 59/49/5 60/363/5 41/50/5 +f 60/52/6 62/364/6 39/53/6 +f 62/55/7 64/365/7 37/56/7 +f 64/58/8 66/366/8 35/59/8 +f 57/61/2 44/367/2 46/62/2 +f 58/64/1 43/368/1 44/65/1 +f 55/67/3 46/369/3 48/68/3 +f 53/70/4 48/370/4 50/71/4 +f 50/73/5 49/371/5 52/74/5 +f 49/76/6 47/372/6 54/77/6 +f 47/79/7 45/373/7 56/80/7 +f 45/82/8 43/374/8 58/83/8 +f 81/85/9 113/375/9 115/86/9 +f 95/88/10 93/376/10 125/89/10 +f 109/91/11 107/377/11 139/92/11 +f 80/94/12 112/378/12 113/95/12 +f 94/97/12 95/379/12 127/98/12 +f 108/100/13 140/380/13 138/101/13 +f 82/103/10 114/381/10 112/104/10 +f 94/106/9 126/382/9 124/107/9 +f 104/109/14 136/383/14 137/110/14 +f 91/112/11 123/384/11 125/113/11 +f 105/115/15 137/385/15 139/116/15 +f 90/118/13 92/386/13 124/119/13 +f 106/121/16 138/387/16 136/122/16 f 63/124/17 45/136/17 47/125/17 -f 65/127/17 66/389/17 28/128/17 -f 44/130/17 43/390/17 17/131/17 -f 31/133/17 15/391/17 16/134/17 +f 65/127/17 66/388/17 28/128/17 +f 44/130/17 43/389/17 17/131/17 +f 31/133/17 15/390/17 16/134/17 f 65/127/17 27/129/17 29/135/17 f 29/135/17 16/134/17 17/131/17 -f 17/131/17 43/390/17 45/136/17 +f 17/131/17 43/389/17 45/136/17 f 45/136/17 63/124/17 65/127/17 f 65/127/17 29/135/17 17/131/17 f 50/148/17 5/147/17 49/139/17 @@ -814,25 +813,25 @@ f 5/147/17 3/137/17 49/139/17 f 3/137/17 60/145/17 59/138/17 f 59/138/17 61/126/17 47/125/17 f 59/138/17 47/125/17 49/139/17 -f 26/392/8 24/393/8 73/151/8 -f 24/393/8 15/149/8 73/151/8 -f 26/152/1 73/394/1 72/153/1 -f 25/155/2 72/395/2 71/156/2 -f 21/158/3 23/396/3 71/159/3 -f 18/163/4 19/397/4 70/161/4 -f 19/397/4 21/398/4 70/161/4 +f 26/391/8 24/392/8 73/151/8 +f 24/392/8 15/149/8 73/151/8 +f 26/152/1 73/393/1 72/153/1 +f 25/155/2 72/394/2 71/156/2 +f 21/158/3 23/395/3 71/159/3 +f 18/163/4 19/396/4 70/161/4 +f 19/396/4 21/397/4 70/161/4 f 69/164/17 5/147/17 48/146/17 f 46/165/17 44/130/17 69/164/17 -f 44/130/17 18/132/17 74/399/17 -f 69/164/17 44/130/17 74/399/17 -f 67/169/7 2/400/7 6/167/7 -f 6/167/7 5/401/7 69/168/7 +f 44/130/17 18/132/17 74/398/17 +f 69/164/17 44/130/17 74/398/17 +f 67/169/7 2/399/7 6/167/7 +f 6/167/7 5/400/7 69/168/7 f 68/170/19 67/174/19 72/171/19 f 67/174/19 69/178/19 70/175/19 f 87/179/20 86/197/20 96/180/20 f 89/182/20 111/227/20 110/183/20 f 107/185/20 109/191/20 99/186/20 -f 91/188/20 93/377/20 83/189/20 +f 91/188/20 93/376/20 83/189/20 f 85/190/20 87/179/20 109/191/20 f 87/179/20 97/181/20 109/191/20 f 97/181/20 99/186/20 109/191/20 @@ -847,7 +846,7 @@ f 94/207/20 77/209/20 95/88/20 f 77/209/20 76/194/20 95/88/20 f 76/194/20 80/105/20 81/195/20 f 81/195/20 83/189/20 95/88/20 -f 83/189/20 93/377/20 95/88/20 +f 83/189/20 93/376/20 95/88/20 f 76/194/20 78/201/20 84/198/20 f 78/201/20 100/202/20 98/196/20 f 98/196/20 96/180/20 86/197/20 @@ -858,37 +857,37 @@ f 79/206/20 104/205/20 105/199/20 f 105/199/20 107/185/20 101/187/20 f 103/200/20 102/203/20 78/201/20 f 105/199/20 101/187/20 103/200/20 -f 110/210/9 142/402/9 140/211/9 -f 98/196/10 130/403/10 128/213/10 -f 84/214/11 116/404/11 114/215/11 -f 110/217/12 111/405/12 143/218/12 -f 97/220/12 96/406/12 128/221/12 -f 85/223/13 83/407/13 115/224/13 -f 109/191/10 141/408/10 143/226/10 -f 97/228/9 129/409/9 131/229/9 -f 87/231/14 119/410/14 118/232/14 -f 100/234/11 132/411/11 130/235/11 -f 84/237/15 86/412/15 118/238/15 -f 99/240/13 131/413/13 133/241/13 -f 85/243/16 117/414/16 119/244/16 -f 103/246/14 135/415/14 134/247/14 -f 90/249/16 122/416/16 120/250/16 -f 100/252/15 102/417/15 134/253/15 -f 91/255/15 89/418/15 121/256/15 -f 103/258/16 101/419/16 133/259/16 -f 88/261/14 120/420/14 121/262/14 +f 110/210/9 142/401/9 140/211/9 +f 98/196/10 130/402/10 128/213/10 +f 84/214/11 116/403/11 114/215/11 +f 110/217/12 111/404/12 143/218/12 +f 97/220/12 96/405/12 128/221/12 +f 85/223/13 83/406/13 115/224/13 +f 109/191/10 141/407/10 143/226/10 +f 97/228/9 129/408/9 131/229/9 +f 87/231/14 119/409/14 118/232/14 +f 100/234/11 132/410/11 130/235/11 +f 84/237/15 86/411/15 118/238/15 +f 99/240/13 131/412/13 133/241/13 +f 85/243/16 117/413/16 119/244/16 +f 103/246/14 135/414/14 134/247/14 +f 90/249/16 122/415/16 120/250/16 +f 100/252/15 102/416/15 134/253/15 +f 91/255/15 89/417/15 121/256/15 +f 103/258/16 101/418/16 133/259/16 +f 88/261/14 120/419/14 121/262/14 f 140/264/21 142/267/21 120/265/21 -f 142/267/21 143/421/21 121/268/21 -f 125/269/21 115/422/21 113/270/21 -f 117/272/21 115/422/21 125/269/21 +f 142/267/21 143/420/21 121/268/21 +f 125/269/21 115/421/21 113/270/21 +f 117/272/21 115/421/21 125/269/21 f 118/274/21 128/278/21 130/275/21 -f 119/277/21 129/423/21 128/278/21 +f 119/277/21 129/422/21 128/278/21 f 135/279/21 133/283/21 139/280/21 -f 131/282/21 141/424/21 139/280/21 -f 123/273/21 121/268/21 143/421/21 -f 143/421/21 141/424/21 123/273/21 -f 141/424/21 131/282/21 123/273/21 -f 131/282/21 129/423/21 119/277/21 +f 131/282/21 141/423/21 139/280/21 +f 123/273/21 121/268/21 143/420/21 +f 143/420/21 141/423/21 123/273/21 +f 141/423/21 131/282/21 123/273/21 +f 131/282/21 129/422/21 119/277/21 f 119/277/21 117/272/21 123/273/21 f 126/295/22 127/271/22 77/296/22 f 127/271/22 113/270/22 77/296/22 @@ -896,67 +895,67 @@ f 112/286/22 146/285/22 76/297/22 f 113/270/22 112/286/22 76/297/22 f 77/296/22 113/270/22 76/297/22 f 114/284/23 116/276/23 76/297/23 -f 116/276/23 130/275/23 78/425/23 -f 76/297/23 116/276/23 78/425/23 -f 132/288/23 147/287/23 78/425/23 -f 130/275/23 132/288/23 78/425/23 +f 116/276/23 130/275/23 78/424/23 +f 76/297/23 116/276/23 78/424/23 +f 132/288/23 147/287/23 78/424/23 +f 130/275/23 132/288/23 78/424/23 f 145/291/24 79/298/24 136/292/24 -f 79/298/24 78/425/24 137/281/24 -f 78/425/24 147/287/24 134/289/24 -f 134/289/24 135/279/24 78/425/24 -f 135/279/24 137/281/24 78/425/24 +f 79/298/24 78/424/24 137/281/24 +f 78/424/24 147/287/24 134/289/24 +f 134/289/24 135/279/24 78/424/24 +f 135/279/24 137/281/24 78/424/24 f 140/264/25 122/266/25 79/298/25 f 122/266/25 124/294/25 77/296/25 f 124/294/25 144/293/25 77/296/25 f 77/296/25 79/298/25 122/266/25 f 79/298/25 145/291/25 138/290/25 -f 13/299/26 35/426/26 36/300/26 -f 37/302/26 35/426/26 13/299/26 +f 13/299/26 35/425/26 36/300/26 +f 37/302/26 35/425/26 13/299/26 f 54/304/26 56/319/26 38/305/26 f 52/307/26 54/304/26 40/306/26 f 22/309/26 24/312/26 10/310/26 -f 24/312/26 26/427/26 8/313/26 -f 20/314/26 58/428/26 57/315/26 +f 24/312/26 26/426/26 8/313/26 +f 20/314/26 58/427/26 57/315/26 f 19/316/26 57/315/26 55/317/26 f 12/311/26 14/301/26 36/300/26 f 36/300/26 38/305/26 56/319/26 -f 56/319/26 58/428/26 20/314/26 +f 56/319/26 58/427/26 20/314/26 f 20/314/26 22/309/26 12/311/26 f 12/311/26 36/300/26 56/319/26 f 148/330/27 2/333/27 25/331/27 -f 2/333/27 1/332/27 26/427/27 -f 25/331/27 2/333/27 26/427/27 +f 2/333/27 1/332/27 26/426/27 +f 25/331/27 2/333/27 26/426/27 f 1/332/27 150/324/27 7/323/27 -f 8/313/27 26/427/27 1/332/27 +f 8/313/27 26/426/27 1/332/27 f 1/332/28 4/334/28 11/303/28 f 4/334/28 151/321/28 39/320/28 f 39/320/28 37/302/28 4/334/28 f 37/302/28 11/303/28 4/334/28 f 9/325/28 150/324/28 1/332/28 -f 149/326/29 6/429/29 53/327/29 -f 6/429/29 2/333/29 21/318/29 -f 53/327/29 6/429/29 55/317/29 +f 149/326/29 6/3/29 53/327/29 +f 6/3/29 2/333/29 21/318/29 +f 53/327/29 6/3/29 55/317/29 f 2/333/29 148/330/29 23/329/29 -f 21/318/29 55/317/29 6/429/29 -f 4/334/30 6/429/30 52/307/30 -f 6/429/30 149/326/30 51/328/30 -f 51/328/30 52/307/30 6/429/30 +f 21/318/29 55/317/29 6/3/29 +f 4/334/30 6/3/30 52/307/30 +f 6/3/30 149/326/30 51/328/30 +f 51/328/30 52/307/30 6/3/30 f 52/307/30 42/308/30 4/334/30 f 41/322/30 151/321/30 4/334/30 -f 32/335/17 155/430/17 156/336/17 +f 32/335/17 155/428/17 156/336/17 f 62/144/17 3/137/17 64/340/17 f 3/137/17 154/338/17 64/340/17 -f 154/338/17 155/430/17 32/335/17 -f 30/339/17 28/128/17 66/389/17 +f 154/338/17 155/428/17 32/335/17 +f 30/339/17 28/128/17 66/388/17 f 154/338/17 32/335/17 30/339/17 -f 30/339/17 66/389/17 64/340/17 -f 153/341/17 68/431/17 33/432/17 -f 68/431/17 75/433/17 15/391/17 -f 33/432/17 68/431/17 31/133/17 -f 15/391/17 31/133/17 68/431/17 -f 33/432/17 34/337/17 153/341/17 -f 3/344/3 4/334/3 152/342/3 -f 4/334/3 1/332/3 152/342/3 -f 152/347/5 1/434/5 2/435/5 -f 2/435/5 67/436/5 152/347/5 -f 67/436/5 68/345/5 152/347/5 +f 30/339/17 66/388/17 64/340/17 +f 153/341/17 68/429/17 33/430/17 +f 68/429/17 75/431/17 15/390/17 +f 33/430/17 68/429/17 31/133/17 +f 15/390/17 31/133/17 68/429/17 +f 33/430/17 34/337/17 153/341/17 +f 3/344/3 4/432/3 152/342/3 +f 4/432/3 1/433/3 152/342/3 +f 152/347/5 1/434/5 2/333/5 +f 2/333/5 67/435/5 152/347/5 +f 67/435/5 68/345/5 152/347/5 diff --git a/src/main/resources/assets/hbm/models/projectiles/deb_lid.obj b/src/main/resources/assets/hbm/models/projectiles/deb_lid.obj index 81034fd03..017497035 100644 --- a/src/main/resources/assets/hbm/models/projectiles/deb_lid.obj +++ b/src/main/resources/assets/hbm/models/projectiles/deb_lid.obj @@ -1,100 +1,54 @@ # Blender v2.79 (sub 0) OBJ File: 'deb_lid.blend' # www.blender.org o Lid -v -0.500000 0.000000 0.500000 +v -0.500000 -0.125000 0.500000 v -0.500000 0.125000 0.500000 -v -0.500000 0.000000 -0.500000 +v -0.500000 -0.125000 -0.500000 v -0.500000 0.125000 -0.500000 -v 0.500000 0.000000 0.500000 +v 0.500000 -0.125000 0.500000 v 0.500000 0.125000 0.500000 -v 0.500000 0.000000 -0.500000 +v 0.500000 -0.125000 -0.500000 v 0.500000 0.125000 -0.500000 -v -0.375000 0.000000 -0.375000 -v -0.375000 0.000000 0.375000 -v 0.375000 0.000000 -0.375000 -v 0.375000 0.000000 0.375000 -v -0.375000 -0.125000 -0.375000 -v -0.375000 -0.125000 0.375000 -v 0.375000 -0.125000 -0.375000 -v 0.375000 -0.125000 0.375000 -vt 0.500000 1.000000 -vt 0.562500 0.500000 -vt 0.562500 1.000000 -vt 0.500000 1.000000 -vt 0.562500 0.500000 -vt 0.562500 1.000000 -vt 0.500000 1.000000 -vt 0.562500 0.500000 -vt 0.562500 1.000000 -vt 0.500000 1.000000 -vt 0.562500 0.500000 -vt 0.562500 1.000000 -vt 0.000000 1.000000 -vt 0.437500 0.937500 -vt 0.500000 1.000000 +vt 1.000000 0.625000 +vt 0.000000 0.375000 +vt 1.000000 0.375000 +vt 1.000000 0.625000 +vt 0.000000 0.375000 +vt 1.000000 0.375000 +vt 1.000000 0.625000 +vt 0.000000 0.375000 +vt 1.000000 0.375000 +vt 1.000000 0.625000 +vt 0.000000 0.375000 +vt 1.000000 0.375000 vt 0.000100 0.999900 -vt 0.500000 0.500000 -vt 0.500000 0.500000 -vt 0.562500 1.000000 -vt 0.500000 1.000000 -vt 0.437500 0.562500 -vt 0.500000 0.500000 -vt 0.000000 0.500000 -vt 0.062500 0.937500 -vt 0.062500 0.562500 -vt 0.437500 0.562500 -vt 0.062500 0.937500 -vt 0.062500 0.562500 -vt 0.500000 0.500000 -vt 0.562500 1.000000 -vt 0.500000 1.000000 -vt 0.500000 0.500000 -vt 0.562500 1.000000 -vt 0.500000 1.000000 -vt 0.500000 0.500000 -vt 0.562500 1.000000 -vt 0.500000 1.000000 -vt 0.500000 0.500000 -vt 0.500000 0.500000 -vt 0.500000 0.500000 -vt 0.000000 0.500000 -vt 0.562500 0.500000 -vt 0.437500 0.937500 -vt 0.562500 0.500000 -vt 0.562500 0.500000 -vt 0.562500 0.500000 +vt 0.999900 0.000100 +vt 0.999900 0.999900 +vt 0.999900 0.000100 +vt 0.000100 0.999900 +vt 0.000100 0.000100 +vt 0.000000 0.625000 +vt 0.000000 0.625000 +vt 0.000000 0.625000 +vt 0.000000 0.625000 +vt 0.000100 0.000100 +vt 0.999900 0.999900 vn -1.0000 0.0000 0.0000 vn 0.0000 0.0000 -1.0000 vn 1.0000 0.0000 0.0000 vn 0.0000 0.0000 1.0000 -vn 0.0000 -1.0000 0.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 9/14/5 3/15/5 -f 4/16/6 6/17/6 8/7/6 -f 10/18/4 16/19/4 12/20/4 -f 3/15/5 10/21/5 1/22/5 -f 5/23/5 11/24/5 7/13/5 -f 1/22/5 12/25/5 5/23/5 -f 15/26/5 14/27/5 13/28/5 -f 11/29/2 13/30/2 9/31/2 -f 12/32/3 15/33/3 11/34/3 -f 9/35/1 14/36/1 10/37/1 -f 2/1/1 4/38/1 3/2/1 -f 4/4/2 8/39/2 7/5/2 -f 8/7/3 6/17/3 5/8/3 -f 6/10/4 2/40/4 1/11/4 -f 7/13/5 11/24/5 9/14/5 -f 4/16/6 2/41/6 6/17/6 -f 10/18/4 14/42/4 16/19/4 -f 3/15/5 9/14/5 10/21/5 -f 5/23/5 12/25/5 11/24/5 -f 1/22/5 10/21/5 12/25/5 -f 15/26/5 16/43/5 14/27/5 -f 11/29/2 15/44/2 13/30/2 -f 12/32/3 16/45/3 15/33/3 -f 9/35/1 13/46/1 14/36/1 +f 4/13/5 6/14/5 8/15/5 +f 7/16/6 1/17/6 3/18/6 +f 2/1/1 4/19/1 3/2/1 +f 4/4/2 8/20/2 7/5/2 +f 8/7/3 6/21/3 5/8/3 +f 6/10/4 2/22/4 1/11/4 +f 4/13/5 2/23/5 6/14/5 +f 7/16/6 5/24/6 1/17/6 diff --git a/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_fuel.png b/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_fuel.png new file mode 100644 index 0000000000000000000000000000000000000000..9b4f58188863d626dee9e8ce9a1d9d0e27f3130f GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmSQK*5Dp-y;YjHK@;7?AIEF;D zzMZ;}m&uUF^}ph)6W$k$*=8HFO|sUQ@K?M+OECP7rlsYgkE<7XOpAYG5h-xwYuV2U zEDTeEZtdIsxUgO~x^TG$BZI-_ZDFAkT6Vub*22}{F^0m~CwE{LsoRS@$-shs49Z*g#)E&n0N3FvqRPgg&ebxsLQ05}d`{{R30 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_heater_top.png b/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_heater_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=}c8G=Kj|L_t(Ijh&M{Ps1<}h99admaJ?^hWwChh=CuB#Kg}iQb85s zbF*)YEP13ud*;#*B6`y~m*>4N`|9<1{~aZ8iA4!iQ39V|9{{8@;(d*C4uG6<@%5b2 zNYiux?4BOkXz;&q&Kck+a0#5!_#?0c=bRT|Jy*aYtXY18wSR@mmTBR)_ZI-#rb8s) zeO+KNTiaMzBup~j-9ND1?P;2>%t>MI>uC!%iw1{bpznLyQ^_i9XI23-ScA7W*R-ep zEv!rtu#j`EWJ_tBW!8TtYt$AjtiU;((l{TYNGPjWgVmo1tif8c{XSdcU$7nWxm8g@ jxioNmqHDgINEYM(At3}u2X9@m00000NkvXXu0mjfd#r`j delta 241 zcmV2%`l*Bfn}zt8NpJ7SE?>->FY7zP}GF{Xkd zLQ09t)!k5o;{~BEojFrIZ4IRZxYdX#&7GSG!qjAAj(a(p^B+^j%7+u38cA zeZ{q@1;{y9k}(Dmsg|`Civ`A*%I!v&cWOt`2I{QEfZGz4tlQ2x6GG_7A%rTt`MIeM zU2ErXICO482&~s@#&PWM*ZphVg=;_Ff4_G`y@QwC%Y4#%Dgevn5`fRYpTI57>-9=X z3GY4QI8sW%Id_M1j;9|_RmiooiwMp+M1&Y)&04c>)9H4g^Q=~@2di+45bnnVvlx|N zt;JeP&bcFNwGOoD!yQc1ROg>BtdvsYRR>*+F~*vCdq^P!M1)dG74BkG@PBtO3`2+S cpZB%FKN6+am5Ro*p#T5?07*qoM6N<$g8jL?asU7T delta 425 zcmV;a0apI01JeVLG=GXoL_t(Ijct?7s)H~TgundQkZpy6P{clEUso(BU0B?SMw7d^ zQMp8=b`~C~$y(gt42r))!J`Nm);a?C9 zux*>rPARc%8(r5CLLf7&s*2pZuB+U!nVz+ll#;C5?Iula+XDaFYXPQdVwxt|JbK+U z4O(k?v$YmLEPu8DWmyV?Y+H1F){^mte;XWQX)T&x8=@x=v6tg7;o> z4~WID*GmT2e4#8$mSw>hBR^7BI}4jqB80&8dOhdh{UUy!s2=?u$MNeaN1J~D5rqcV T6=lEE00000NkvXXu0mjf6>7(N diff --git a/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_top.png b/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_top.png index bf352125ef61b29866d2f59157a62d8d0d2f95e1..498a1c7135393b3041b8639b42ba1384d73b9b4d 100644 GIT binary patch delta 374 zcmV-+0g3*N1EB+uG=Er0L_t(IjeU~MZsRZvgg;8M4dl28dRX-RA7GK^3KAS20%)wzZ62)<;QXC_2d8mt$#Jl3^PMSc637sOw)vj zU}oR>pG_h{jImSp7={56q1M`aI)KyLf^2iO*3JxIUDy7d093Uj`hcqb`gh=3>-SBr z*DL4q`Ke5*%HePz=ltJ#djI>*+wtvbgZtoBJ>`$wb*{AnAR?^mN-2eDn#eh0W~7w5 ze5%Urc6;2w_iv9el2RhZ$g(VyQXYGL4Q>3=S&7>hSnOSwFY<33;_n<0vPN>;y4bJQeb9K)sz&0;g70ft(6`~&=V23 zdwyn?Oo%8Y#(n{CcZ@NhswpMti%2pfqLh%5;!!Zz=@L=)1~ccon+LU4JRXnKAAx3u zQc40c^W}V=CtD=iGw4Oxq8d^AeeIRHm>87+fHB6cC-xqgbAIIpK$K_Cu%Bq1mXmcGk*dZNkl1u@k_PNjp@`B&Y?LLo5xfd-K=wjB z+)ENq7w^K8AXtb9>YjLFyJ>zpd`XkpgW8m$>>LgAee=G&Ki2K-zfIESF0Fnx?@RLtWR@bxoe<3oKLY$CAOFb5b3ObcpMJmJ z0^i@?V~klz0)G$@!Z2*zF3XZj-(~SSVe$S(I-7E1#vC6XqqSx@9HO;e0nF!fX0zF+ zh!(FCx<7vbaCdb92VK4WHY&3QdJeh;jo=M^ZA@C%gD0qQz>%07*qo IM6N<$f?>c3ivR!s delta 539 zcmV+$0_6ST1j7W7Gk*d4Nkl{i^YPnEHTEQl%nr@LJ0JIPhHn&0Do&O-g}CoNT0P9Yb^lA z7_7C32qMDE%S&RZ0kqca@9)$1ePW=s#u!7>G^x5$iagIbI5>UZ*OyQa>DufIRG(^HO~OLt|QNL zwAP3SJ3Bl44u3Nyt2q-jW%@DYnp1|iec#h{-G6|#ZOO7Mp*!c8tmgds^A~{I%QL+9 zhzO65k3ShKmrIt*Wjb`uF;UZ$zrC*T(PNCkIR}tNoB@<&nHbFHbDVQbKc?JXp7Hj& z+5o(J_V)JDXh#gJwG>5>ly%N=%_-h{eDwHtPhHnkRey!nI(egMnhgMeQi?3wq*qs0 z$tcDcs;Z)@s#J9t`wtQGJm>iM7=X{uPwwvSI6OS0D2maKAq3jC-T0ts8rrty{{B8W zad;>q$@hZ?x~}8l;UNJeCzfT&dcDRNlNM=EduS!bNZYn-ZEcNx@bvUFQugaQFBS{F d$Jdqq2Nc)#2nk1*BBcNT002ovPDHLkV1jiR2Z#Uw diff --git a/src/main/resources/assets/hbm/textures/blocks/rbmk_steam_inlet.png b/src/main/resources/assets/hbm/textures/blocks/rbmk_steam_inlet.png index 78264501b470f3139f54cbcadcaedef70b504b8c..d386a9ca58e28e7c17cd89f39f9871bad58bb77e 100644 GIT binary patch delta 537 zcmV+!0_OdR1;GT6Gk*d2Nkl zId|0F=RF%m5&u)8$%sl6MI4Wg@jMTu6aZUSR;V@0!_yA5+JBpf2%hI*tz|G6paDG3 z13*L&5mpYin0CtGdtYB7A|y$IF@`vf0Wtz>Eyft9z*~PXS_?oFMci&wxv36W>bJRc_>o?(=RDb7T6HGtyjg2z zN}O>&e{kl`Q_ekpPVoDe>+dYDl@ijNQq!XXG(9;vZLA=ecHr)p7w%#d^!fhe2K(!m z3HpKS-`{^#inx-4AAEaFOqT6vGUB~mg!7BpR1=Ib*?)^#vvRP-Hmd-r-4DCAKj^z$ zt+mYi^M92)Gc&_caD<4ErYYm`xYz^F^QcyJVZpCsjc=VN-0DHt+m@o=Yfb2 z$1!0TIu*IwdBk}?U!W2}&Yq?zVHooE+M`lbwPu!mnx+_Im`o<_FQ|=;4I2c7%l}fw b82$j(G7MhxT5FV2 zXsz))4->$)ZKRasayfFj9JN-H{y`eN^y33U2!s%vot-5tO#st0nVp?QYn^~7DnGQX+(4>)u+* zA?tr$yRJ*YaFYJdc@G)M#OBMDFz6pZ_1jx~-^X=boPRNgU#}jq`|?3NKuQ2sb~aKL zTO;t(osTG6B@A|1L`sQ_B=WDs^E@UeCoxTvTC2%A%lN*J(P%Ux*LAUN8-V@&eIOm@ z%kiyLDrl`434%u8-1)%n`30&kwDMb(ju?D{H69fTA zM@LB#wOZEke<(t}25Ub{7hX8 z0MGLPu-0O&MF>H|_i4Z^Ga+j&T5FV2q-hE;6L8L4xwS(5dcBafT8-M38n-t$ zky2uenG0BJX@72Prqj`F-9$y-PHR3Rnny+T8`R zDI`h4w}S&%U!RdDBVM^xxVAcD+ytdmPVNK&QfmOj;eYExHy94`xjN@qt}b6_cWG&f ze$>ZWi!p}rcs$<&&+{mk%V@2+@#N7TO$~vs`}_Gi>&!tu#xzZd;~27w;R3l61UTpN z1u6&#A#z)B9AmBJd_yC^Dl`CmgR#cw)``Ecee SgbV-x00{s|MNUMnLSTXuhxO_J delta 588 zcmV-S0<-gha z3oUL%3<_B!bj((y|3S%?$&jT}`v=&~LZL2dLg-Kzh5Hr}Obd_q$`2 zZ#?&o*!=k!V@xKeT&oes@ua|${rxG;T5IMPifn%P!h`pp7~T#s#$=Kzz_UhUGR9eG zt(h0aEdF&n#H40w%u^DMTP;rSnWeR+xKQNByVsn&eSa}3FqQyt3Vd(3Ck&*NoE;v* z*hH;0C%nQKgGmkMx54u~mY0_~1^V4CP8j0*KH}iuAk|tUr37Fw7{I?qIEL%GBuPRL z1YBHPj2J{wL_VLVP$=NK?q7>^NBg|f!CH&8mMDrw9{9db6h&NKUS^wk-sxnX+&%7h zyQFDK97V@mU0qEIz-SYfmX-*DfG`XRf`G5B7H7a2aMErQh9Pkr6Gah=i;Gz^@xR}B a){{Rqj{0CQ{)d+U0000 Date: Sun, 8 Mar 2026 13:07:07 +0100 Subject: [PATCH 2/2] the sloppiest toppy --- README.md | 8 +- changelog | 17 +- src/main/java/com/hbm/blocks/ModBlocks.java | 7 +- .../hbm/blocks/machine/rbmk/RBMKControl.java | 2 + .../hbm/blocks/machine/rbmk/RBMKDisplay.java | 96 ++++++++++++ .../com/hbm/blocks/machine/rbmk/RBMKRod.java | 15 ++ .../hbm/entity/projectile/EntityChemical.java | 27 ++-- .../inventory/container/ContainerRBMKRod.java | 23 ++- .../hbm/inventory/gui/GUIMachineShredder.java | 7 +- .../com/hbm/inventory/gui/GUIRBMKRod.java | 16 +- .../java/com/hbm/items/tool/ItemRBMKTool.java | 17 ++ .../weapon/sedna/factory/XFactoryRocket.java | 2 +- src/main/java/com/hbm/main/ClientProxy.java | 1 + .../java/com/hbm/main/CraftingManager.java | 1 + .../com/hbm/particle/ParticleRBMKSteam.java | 10 +- .../com/hbm/render/block/ISBRHUniversal.java | 2 +- .../render/tileentity/RenderRBMKConsole.java | 16 +- .../render/tileentity/RenderRBMKDisplay.java | 127 +++++++++++++++ .../java/com/hbm/tileentity/TileMappings.java | 1 + .../machine/TileEntityHeatBoiler.java | 5 +- .../TileEntityHeatBoilerIndustrial.java | 5 +- .../rbmk/TileEntityRBMKAutoloader.java | 6 +- .../machine/rbmk/TileEntityRBMKBoiler.java | 5 +- .../rbmk/TileEntityRBMKControlManual.java | 23 ++- .../machine/rbmk/TileEntityRBMKDisplay.java | 147 ++++++++++++++++++ .../machine/rbmk/TileEntityRBMKRod.java | 53 ++++++- .../machine/rbmk/TileEntityRBMKRodReaSim.java | 2 +- src/main/resources/assets/hbm/lang/de_DE.lang | 3 + src/main/resources/assets/hbm/lang/en_US.lang | 11 ++ .../hbm/textures/blocks/rbmk/rbmk_display.png | Bin 0 -> 151 bytes .../blocks/rbmk/rbmk_element_cover_top.png | Bin 355 -> 380 bytes .../rbmk/rbmk_element_mod_cover_top.png | Bin 434 -> 445 bytes .../rbmk/rbmk_element_reasim_cover_top.png | Bin 357 -> 383 bytes .../rbmk_element_reasim_mod_cover_top.png | Bin 432 -> 443 bytes 34 files changed, 604 insertions(+), 51 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/machine/rbmk/RBMKDisplay.java create mode 100644 src/main/java/com/hbm/render/tileentity/RenderRBMKDisplay.java create mode 100644 src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKDisplay.java create mode 100644 src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_display.png diff --git a/README.md b/README.md index 354948d41..0c17e73dc 100644 --- a/README.md +++ b/README.md @@ -10,11 +10,15 @@ **This is for 1.7.10!** For 1.12, check out these projects: -* NTM Community Edition (WarFactory): https://github.com/MisterNorwood/Hbm-s-Nuclear-Tech-CE +* NTM Community Edition (WarFactory): https://github.com/MisterNorwood/Hbm-s-Nuclear-Tech-CE/releases * NTM Extended Edition (Alcater): https://github.com/Alcatergit/Hbm-s-Nuclear-Tech-GIT/releases * NTM Reloaded: https://github.com/TheOriginalGolem/Hbm-s-Nuclear-Tech-GIT/releases -For 1.18, try Martin's remake: https://codeberg.org/MartinTheDragon/Nuclear-Tech-Mod-Remake/releases +For further ports, try: + +* NTM Remake on 1.18.2: https://codeberg.org/MartinTheDragon/Nuclear-Tech-Mod-Remake/releases +* HBM Modernized on 1.20.1: https://github.com/Raptor324/HBM-Modernized/releases +* NTM Neo on 1.21.1: https://github.com/ohiomannnn/HBMsNTM-NEO-EDITION/releases ## Downloading pre-compiled versions from GitHub diff --git a/changelog b/changelog index 0bda761d0..86f9c9ddb 100644 --- a/changelog +++ b/changelog @@ -10,6 +10,10 @@ * More efficient than MEU but with less durability * Has a new thermal coefficient mechanic, once the core heat exceeds 1000°C, reactivity drops down * Very high diffusion, meaning the core is considerably colder than on most fuels +* RBMK Display panel + * Single block that shows a 7x7 view of a linked RBMK + * Doesn't have a GUI or tooltips or anything, only acts as a monitor + * Ideal for >15x15 reactor monitoring, since the displays are tileable ## Changed * Updated RBMK visuals @@ -44,13 +48,22 @@ * Cold PFM is used up at a steady rate, even if the reactor is already cold * The RBMK structural column recipe now uses only half as many metal plates, and rubber instead of insulator * Changed the way reasim RBMK fuel channels work - * Instead of six randomized neutron streams, reasim rods now use eight half strength streams in an even star pattern + * Instead of six randomized neutron streams, reasim rods now use eight 75% strength streams in an even star pattern * The pattern is rotated in a random multiple of 9° (i.e. four possible angle variations) * RBMK steam channels now spawn steam particles if water is voided due to the steam buffer not being emptied in time * Rebalanced 528 mode * Increased the chance for most precision assembler recipes to succeed * Increased the chance for items to be salvaged by recycling * In expensive mode, the chances have been increased drastically compared to the old values +* Added RoR functionality to some RBMK columns + * Manual control rods can have their target height set, allowing them to be remote controlled without a console + * All fuel channels can now provide values such as column heat, fuel skin heat, depletion and xenon poison +* RBMK consoles and displays no longer show the temperature value of control rods as a red gradient, instead they show the control rods' color grouping +* RBMK fuel rods can no longer be removed by hand if the skin temp exceeds 200°C +* RBMK fuel rods can no longer be cycled via autoloader if the skin temp exceeds 1,000°C + * For fully automated high powered reactors, it may now be necessary to read the depletion via RoR and then throttle the reactor with control rods + * RBMK cranes can still remove any fuel, no matter how hot it is +* RBMK fuel channels will now undergo meltdown if it is broken when a fuel rod is still loaded with a heat temperature of at least 1,500°C ## Fixed * Fixed NBTStack serialization omitting the stack size most of the time, preventing deserialization (mainly in the precision assembler config) @@ -63,3 +76,5 @@ * Fixed fluid output direction being incorrect on boilers, causing them to break with pipe anchors * Fixed an issue where the industrial turbine's tendency to round up the possible operation counter would cause it to use up steam it doesn't actually have * Fixed yet another issue with the settings tool when copying automatic control rod settings +* Fixed quad rocket launcher steering not working right +* Fixed standard and industrial boilers not respecting the heating efficiency value of the fluid trait diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index abeb51912..38559a227 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1096,6 +1096,7 @@ public class ModBlocks { public static Block rbmk_heater; public static Block rbmk_console; public static Block rbmk_crane_console; + public static Block rbmk_display; public static Block rbmk_autoloader; public static Block rbmk_loader; public static Block rbmk_steam_inlet; @@ -1433,8 +1434,8 @@ public class ModBlocks { deco_lead = new BlockDecoCT(Material.iron).noFortune().setBlockName("deco_lead").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":deco_lead"); deco_beryllium = new BlockDecoCT(Material.iron).noFortune().setBlockName("deco_beryllium").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":deco_beryllium"); deco_asbestos = new BlockOutgas(Material.cloth, true, 5, true).noFortune().setBlockName("deco_asbestos").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":deco_asbestos"); - deco_rbmk = new BlockGeneric(Material.iron).setBlockName("deco_rbmk").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(100.0F).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_side"); - deco_rbmk_smooth = new BlockGeneric(Material.iron).setBlockName("deco_rbmk_smooth").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(100.0F).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_top"); + deco_rbmk = new BlockGeneric(Material.iron).setBlockName("deco_rbmk").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(100.0F).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_top"); + deco_rbmk_smooth = new BlockGeneric(Material.iron).setBlockName("deco_rbmk_smooth").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(100.0F).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_blank_top"); deco_emitter = new BlockEmitter().setBlockName("deco_emitter").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(20.0F).setBlockTextureName(RefStrings.MODID + ":emitter"); part_emitter = new PartEmitter().setBlockName("part_emitter").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(20.0F).setBlockTextureName(RefStrings.MODID + ":part_top"); @@ -2115,6 +2116,7 @@ public class ModBlocks { rbmk_heater = new RBMKHeater().setBlockName("rbmk_heater").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_heater"); rbmk_console = new RBMKConsole().setBlockName("rbmk_console").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_console"); rbmk_crane_console = new RBMKCraneConsole().setBlockName("rbmk_crane_console").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_crane_console"); + rbmk_display = new RBMKDisplay().setBlockName("rbmk_display").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_display"); rbmk_autoloader = new RBMKAutoloader().setBlockName("rbmk_autoloader").setCreativeTab(MainRegistry.machineTab).setHardness(50.0F).setResistance(60.0F).setBlockTextureName(RefStrings.MODID + ":rbmk_autoloader"); rbmk_loader = new RBMKLoader(Material.iron).setBlockName("rbmk_loader").setCreativeTab(MainRegistry.machineTab).setHardness(50.0F).setResistance(60.0F).setBlockTextureName(RefStrings.MODID + ":rbmk_loader"); rbmk_steam_inlet = new RBMKInlet(Material.iron).setBlockName("rbmk_steam_inlet").setCreativeTab(MainRegistry.machineTab).setHardness(50.0F).setResistance(60.0F).setBlockTextureName(RefStrings.MODID + ":rbmk_steam_inlet"); @@ -3106,6 +3108,7 @@ public class ModBlocks { GameRegistry.registerBlock(rbmk_heater, rbmk_heater.getUnlocalizedName()); GameRegistry.registerBlock(rbmk_console, rbmk_console.getUnlocalizedName()); GameRegistry.registerBlock(rbmk_crane_console, rbmk_crane_console.getUnlocalizedName()); + register(rbmk_display); register(rbmk_autoloader); register(rbmk_loader); register(rbmk_steam_inlet); diff --git a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKControl.java b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKControl.java index 8f26b37d8..754b95599 100644 --- a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKControl.java +++ b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKControl.java @@ -1,6 +1,7 @@ package com.hbm.blocks.machine.rbmk; import com.hbm.blocks.ModBlocks; +import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKControlManual; import cpw.mods.fml.relauncher.Side; @@ -40,6 +41,7 @@ public class RBMKControl extends RBMKPipedBase { @Override public TileEntity createNewTileEntity(World world, int meta) { if(meta >= this.offset) return new TileEntityRBMKControlManual(); + if(meta >= this.extra) return new TileEntityProxyCombo(); return null; } diff --git a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKDisplay.java b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKDisplay.java new file mode 100644 index 000000000..fae8a9e8c --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKDisplay.java @@ -0,0 +1,96 @@ +package com.hbm.blocks.machine.rbmk; + +import org.lwjgl.opengl.GL11; + +import com.hbm.render.block.ISBRHUniversal; +import com.hbm.render.util.RenderBlocksNT; +import com.hbm.tileentity.machine.rbmk.TileEntityRBMKDisplay; + +import api.hbm.block.IToolable; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class RBMKDisplay extends BlockContainer implements ISBRHUniversal, IToolable { + + public RBMKDisplay() { + super(Material.iron); + } + + @Override public int getRenderType() { return renderID; } + @Override public boolean isOpaqueCube() { return false; } + @Override public boolean renderAsNormalBlock() { return false; } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockAccess world, int x, int y, int z, int side) { + return true; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileEntityRBMKDisplay(); + } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack itemStack) { + int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + if(i == 0) world.setBlockMetadataWithNotify(x, y, z, 2, 2); + if(i == 1) world.setBlockMetadataWithNotify(x, y, z, 5, 2); + if(i == 2) world.setBlockMetadataWithNotify(x, y, z, 3, 2); + if(i == 3) world.setBlockMetadataWithNotify(x, y, z, 4, 2); + } + + @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) { + TileEntity tile = world.getTileEntity(x, y, z); + if (tile instanceof TileEntityRBMKDisplay) { + ((TileEntityRBMKDisplay) tile).rotate(); + } + } + return true; + } + + @Override + public void renderInventoryBlock(Block block, int meta, int modelId, Object renderBlocks) { + + GL11.glPushMatrix(); + RenderBlocks renderer = (RenderBlocks) renderBlocks; + GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + + renderer.setRenderBounds(0.25D, 0D, 0D, 1D, 1D, 1D); + RenderBlocksNT.renderStandardInventoryBlock(block, meta, renderer); + GL11.glPopMatrix(); + } + + @Override + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, Object renderBlocks) { + RenderBlocksNT renderer = RenderBlocksNT.INSTANCE.setWorld(world); + + Tessellator tessellator = Tessellator.instance; + tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z)); + tessellator.setColorOpaque_F(1, 1, 1); + + int meta = world.getBlockMetadata(x, y, z); + + renderer.setRenderBounds(meta == 4 ? 0.25D : 0D, 0D, meta == 2 ? 0.25D : 0D, meta == 5 ? 0.75D : 1D, 1D, meta == 3 ? 0.75D : 1D); + renderer.renderStandardBlock(block, x, y, z); + + return true; + } +} diff --git a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKRod.java b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKRod.java index 2d574562e..184b571fa 100644 --- a/src/main/java/com/hbm/blocks/machine/rbmk/RBMKRod.java +++ b/src/main/java/com/hbm/blocks/machine/rbmk/RBMKRod.java @@ -10,6 +10,7 @@ import com.hbm.tileentity.machine.rbmk.TileEntityRBMKRod; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; @@ -38,6 +39,20 @@ public class RBMKRod extends RBMKBase { return null; } + @Override + public void breakBlock(World world, int x, int y, int z, Block block, int meta) { + if(meta >= this.offset) { + TileEntityRBMKRod tile = (TileEntityRBMKRod) world.getTileEntity(x, y, z); + if(tile != null) { + if(tile.slots[0] != null && tile.slots[0].getItem() instanceof ItemRBMKRod && ItemRBMKRod.getHullHeat(tile.slots[0]) >= 1500) { + tile.meltdown(); + } + } + } + super.breakBlock(world, x, y, z, block, meta); + world.removeTileEntity(x, y, z); + } + @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister reg) { diff --git a/src/main/java/com/hbm/entity/projectile/EntityChemical.java b/src/main/java/com/hbm/entity/projectile/EntityChemical.java index 7c4470d7a..b9ebc5e72 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityChemical.java +++ b/src/main/java/com/hbm/entity/projectile/EntityChemical.java @@ -454,21 +454,24 @@ public class EntityChemical extends EntityThrowableNT { } } - Block block = worldObj.getBlock(x, y, z); if(type == Fluids.SEEDSLURRY) { - if(block == Blocks.dirt || block == ModBlocks.waste_earth || block == ModBlocks.dirt_dead || block == ModBlocks.dirt_oily) { - - if(worldObj.getBlockLightValue(x, y + 1, z) >= 9 && worldObj.getBlockLightOpacity(x, y + 1, z) <= 2) { - worldObj.setBlock(x, y, z, Blocks.grass); + + for(int i = -1; i <= 1; i++) for(int j = -1; j <= 1; j++) for(int k = -1; k <= 1; k++) { + Block block = worldObj.getBlock(x + i, y + j, z + k); + if(block == Blocks.dirt || block == ModBlocks.waste_earth || block == ModBlocks.dirt_dead || block == ModBlocks.dirt_oily) { + + if(worldObj.getBlockLightValue(x + i, y + j + 1, z + k) >= 9 && worldObj.getBlockLightOpacity(x + i, y + j + 1, z + k) <= 2) { + worldObj.setBlock(x + i, y + j, z + k, Blocks.grass); + } } + int meta = worldObj.getBlockMetadata(x + i, y + j, z + k); + if(block == Blocks.cobblestone) worldObj.setBlock(x + i, y + j, z + k, Blocks.mossy_cobblestone); + if(block == Blocks.stonebrick && meta == 0) worldObj.setBlock(x + i, y + j, z + k, Blocks.stonebrick, 1, 3); + if(block == ModBlocks.waste_earth) worldObj.setBlock(x + i, y + j, z + k, Blocks.grass); + if(block == ModBlocks.brick_concrete) worldObj.setBlock(x + i, y + j, z + k, ModBlocks.brick_concrete_mossy); + if(block == ModBlocks.concrete_brick_slab && meta % 8 == 0) worldObj.setBlock(x + i, y + j, z + k, ModBlocks.concrete_brick_slab, meta + 1, 3); + if(block == ModBlocks.brick_concrete_stairs) worldObj.setBlock(x + i, y + j, z + k, ModBlocks.brick_concrete_mossy_stairs, meta, 3); } - int meta = worldObj.getBlockMetadata(x, y, z); - if(block == Blocks.cobblestone) worldObj.setBlock(x, y, z, Blocks.mossy_cobblestone); - if(block == Blocks.stonebrick && meta == 0) worldObj.setBlock(x, y, z, Blocks.stonebrick, 1, 3); - if(block == ModBlocks.waste_earth) worldObj.setBlock(x, y, z, Blocks.grass); - if(block == ModBlocks.brick_concrete) worldObj.setBlock(x, y, z, ModBlocks.brick_concrete_mossy); - if(block == ModBlocks.concrete_brick_slab && meta % 8 == 0) worldObj.setBlock(x, y, z, ModBlocks.concrete_brick_slab, meta + 1, 3); - if(block == ModBlocks.brick_concrete_stairs) worldObj.setBlock(x, y, z, ModBlocks.brick_concrete_mossy_stairs, meta, 3); } this.setDead(); diff --git a/src/main/java/com/hbm/inventory/container/ContainerRBMKRod.java b/src/main/java/com/hbm/inventory/container/ContainerRBMKRod.java index 48724764c..73a8bc7b6 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerRBMKRod.java +++ b/src/main/java/com/hbm/inventory/container/ContainerRBMKRod.java @@ -29,7 +29,27 @@ public class ContainerRBMKRod extends Container { } @Override - public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) { + public ItemStack slotClick(int index, int button, int mode, EntityPlayer player) { + + if(index == 0) { + + if(rbmk.coldEnoughForManual()) { + return super.slotClick(index, button, mode, player); + } else { + + Slot slot = this.getSlot(index); + ItemStack ret = null; + + if(slot.getHasStack()) ret = slot.getStack().copy(); + return ret; + } + } + + return super.slotClick(index, button, mode, player); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int par2) { ItemStack var3 = null; Slot var4 = (Slot) this.inventorySlots.get(par2); @@ -38,6 +58,7 @@ public class ContainerRBMKRod extends Container { var3 = var5.copy(); if(par2 <= rbmk.getSizeInventory() - 1) { + if(!rbmk.coldEnoughForManual()) return null; if(!this.mergeItemStack(var5, rbmk.getSizeInventory(), this.inventorySlots.size(), true)) { return null; } diff --git a/src/main/java/com/hbm/inventory/gui/GUIMachineShredder.java b/src/main/java/com/hbm/inventory/gui/GUIMachineShredder.java index ef433374e..d7df00134 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIMachineShredder.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineShredder.java @@ -32,11 +32,8 @@ public class GUIMachineShredder extends GuiInfoContainer { boolean flag = false; - if(diFurnace.getGearLeft() == 0 || diFurnace.getGearLeft() == 3) - flag = true; - - if(diFurnace.getGearRight() == 0 || diFurnace.getGearRight() == 3) - flag = true; + if(diFurnace.getGearLeft() == 0 || diFurnace.getGearLeft() == 3) flag = true; + if(diFurnace.getGearRight() == 0 || diFurnace.getGearRight() == 3) flag = true; if(flag) { String[] text = new String[] { "Error: Shredder blades are broken or missing!" }; diff --git a/src/main/java/com/hbm/inventory/gui/GUIRBMKRod.java b/src/main/java/com/hbm/inventory/gui/GUIRBMKRod.java index da68f7b76..0b56a13ff 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIRBMKRod.java +++ b/src/main/java/com/hbm/inventory/gui/GUIRBMKRod.java @@ -8,12 +8,11 @@ import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKRod; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.util.ResourceLocation; -public class GUIRBMKRod extends GuiContainer { +public class GUIRBMKRod extends GuiInfoContainer { private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/reactors/gui_rbmk_element.png"); private TileEntityRBMKRod rod; @@ -26,6 +25,16 @@ public class GUIRBMKRod extends GuiContainer { this.ySize = 186; } + @Override + public void drawScreen(int mouseX, int mouseY, float f) { + super.drawScreen(mouseX, mouseY, f); + + if(!rod.coldEnoughForAutoloader()) + this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 20, 16, 16, guiLeft - 8, guiTop + 20 + 16, "Fuel skin temperature has exceeded 1,000°C,", "autoloaders can no longer cycle fuel!"); + if(!rod.coldEnoughForManual()) + this.drawCustomInfoStat(mouseX, mouseY, guiLeft - 16, guiTop + 36, 16, 16, guiLeft - 8, guiTop + 36 + 16, "Fuel skin temperature has exceeded 200°C,", "fuel can no longer be removed by hand!"); + } + @Override protected void drawGuiContainerForegroundLayer(int i, int j) { String name = this.rod.hasCustomInventoryName() ? this.rod.getInventoryName() : I18n.format(this.rod.getInventoryName()); @@ -51,5 +60,8 @@ public class GUIRBMKRod extends GuiContainer { int x = (int)(xenon * 58); drawTexturedModalRect(guiLeft + 126, guiTop + 82 - x, 212, 58 - x, 14, x); } + + if(!rod.coldEnoughForAutoloader()) this.drawInfoPanel(guiLeft - 16, guiTop + 20, 16, 16, 6); + if(!rod.coldEnoughForManual()) this.drawInfoPanel(guiLeft - 16, guiTop + 36, 16, 16, 7); } } diff --git a/src/main/java/com/hbm/items/tool/ItemRBMKTool.java b/src/main/java/com/hbm/items/tool/ItemRBMKTool.java index def28215e..48b03ac97 100644 --- a/src/main/java/com/hbm/items/tool/ItemRBMKTool.java +++ b/src/main/java/com/hbm/items/tool/ItemRBMKTool.java @@ -8,6 +8,7 @@ import com.hbm.blocks.ModBlocks; import com.hbm.blocks.machine.rbmk.RBMKBase; import com.hbm.tileentity.machine.rbmk.TileEntityCraneConsole; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole; +import com.hbm.tileentity.machine.rbmk.TileEntityRBMKDisplay; import com.hbm.util.i18n.I18nUtil; import net.minecraft.block.Block; @@ -48,6 +49,7 @@ public class ItemRBMKTool extends Item { return true; } + //TODO: at this point just add a fucking interface if(b == ModBlocks.rbmk_console && stack.hasTagCompound()) { if(!world.isRemote) { @@ -82,6 +84,21 @@ public class ItemRBMKTool extends Item { return true; } + if(b == ModBlocks.rbmk_display && stack.hasTagCompound()) { + + if(!world.isRemote) { + + TileEntityRBMKDisplay console = (TileEntityRBMKDisplay) world.getTileEntity(x, y, z); + int tx = stack.stackTagCompound.getInteger("posX"); + int ty = stack.stackTagCompound.getInteger("posY"); + int tz = stack.stackTagCompound.getInteger("posZ"); + console.setTarget(tx, ty, tz); + player.addChatComponentMessage(new ChatComponentTranslation(this.getUnlocalizedName() + ".set").setChatStyle(new ChatStyle().setColor(EnumChatFormatting.YELLOW))); + } + + return true; + } + return false; } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryRocket.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryRocket.java index c490f4836..014e97148 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryRocket.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryRocket.java @@ -60,7 +60,7 @@ public class XFactoryRocket { }; public static Consumer LAMBDA_STEERING_ACCELERATE = (entity) -> { EntityBulletBaseMK4 bullet = (EntityBulletBaseMK4) entity; - if(!(entity instanceof EntityPlayer)) { + if(!(bullet.getThrower() instanceof EntityPlayer)) { if(bullet.accel < 7) bullet.accel += 0.4D; return; } diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 40e158e17..e97bca89e 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -410,6 +410,7 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKControlAuto.class, new RenderRBMKControlRod()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCraneConsole.class, new RenderCraneConsole()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKConsole.class, new RenderRBMKConsole()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKDisplay.class, new RenderRBMKDisplay()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKRod.class, new RenderRBMKFuelChannel()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKRodReaSim.class, new RenderRBMKFuelChannel()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKAutoloader.class, new RenderRBMKAutoloader()); diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index ea38c37bc..1353e2891 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -791,6 +791,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.rbmk_loader, 1), new Object[] { "SCS", "CBC", "SCS", 'S', STEEL.plate(), 'C', CU.ingot(), 'B', ModItems.tank_steel }); addRecipeAuto(new ItemStack(ModBlocks.rbmk_steam_inlet, 1), new Object[] { "SCS", "CBC", "SCS", 'S', STEEL.ingot(), 'C', IRON.plate(), 'B', ModItems.tank_steel }); addRecipeAuto(new ItemStack(ModBlocks.rbmk_steam_outlet, 1), new Object[] { "SCS", "CBC", "SCS", 'S', STEEL.ingot(), 'C', CU.plate(), 'B', ModItems.tank_steel }); + addRecipeAuto(new ItemStack(ModBlocks.rbmk_display, 1), new Object[] { "B", "C", "D", 'B', B.ingot(), 'D', ModBlocks.deco_rbmk, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.VACUUM_TUBE) }); //addRecipeAuto(new ItemStack(ModBlocks.rbmk_heatex, 1), new Object[] { "SCS", "CBC", "SCS", 'S', STEEL.ingot(), 'C', CU.plate(), 'B', ModItems.pipes_steel }); addRecipeAuto(new ItemStack(ModBlocks.deco_rbmk, 8), new Object[] { "R", 'R', ModBlocks.rbmk_blank }); diff --git a/src/main/java/com/hbm/particle/ParticleRBMKSteam.java b/src/main/java/com/hbm/particle/ParticleRBMKSteam.java index d98e27163..3ea7d0cb1 100644 --- a/src/main/java/com/hbm/particle/ParticleRBMKSteam.java +++ b/src/main/java/com/hbm/particle/ParticleRBMKSteam.java @@ -25,7 +25,7 @@ public class ParticleRBMKSteam extends EntityFX { public ParticleRBMKSteam(TextureManager texman, World world, double x, double y, double z) { super(world, x, y, z); this.theRenderEngine = texman; - this.particleMaxAge = 30; + this.particleMaxAge = 10; this.particleAlpha = 0.25F; this.particleScale = 4F; } @@ -80,10 +80,10 @@ public class ParticleRBMKSteam extends EntityFX { GL11.glTranslatef(pX + x, pY + y, pZ + z); GL11.glRotatef(-RenderManager.instance.playerViewY, 0.0F, 1.0F, 0.0F); - tess.addVertexWithUV(this.particleScale * -0.25 - 1, -0.25, 0, uMax, vMax); - tess.addVertexWithUV(this.particleScale * -0.25 - 1, this.particleScale - 0.25, 0, uMax, vMin); - tess.addVertexWithUV(this.particleScale * 0.25 - 1, this.particleScale - 0.25, 0, uMin, vMin); - tess.addVertexWithUV(this.particleScale * 0.25 - 1, -0.25, 0, uMin, vMax); + tess.addVertexWithUV(this.particleScale * -0.25 - 0.9375, -0.25, 0, uMax, vMax); + tess.addVertexWithUV(this.particleScale * -0.25 - 0.9375, this.particleScale - 0.25, 0, uMax, vMin); + tess.addVertexWithUV(this.particleScale * 0.25 - 0.9375, this.particleScale - 0.25, 0, uMin, vMin); + tess.addVertexWithUV(this.particleScale * 0.25 - 0.9375, -0.25, 0, uMin, vMax); tess.draw(); diff --git a/src/main/java/com/hbm/render/block/ISBRHUniversal.java b/src/main/java/com/hbm/render/block/ISBRHUniversal.java index a401083b3..592f93970 100644 --- a/src/main/java/com/hbm/render/block/ISBRHUniversal.java +++ b/src/main/java/com/hbm/render/block/ISBRHUniversal.java @@ -8,6 +8,6 @@ public interface ISBRHUniversal { public static int renderID = RenderingRegistry.getNextAvailableRenderId(); - public void renderInventoryBlock(Block block, int metadata, int modelId, Object renderBlocks); + public void renderInventoryBlock(Block block, int meta, int modelId, Object renderBlocks); public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, Object renderBlocks); } diff --git a/src/main/java/com/hbm/render/tileentity/RenderRBMKConsole.java b/src/main/java/com/hbm/render/tileentity/RenderRBMKConsole.java index 2e0933a12..8360fc6ec 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderRBMKConsole.java +++ b/src/main/java/com/hbm/render/tileentity/RenderRBMKConsole.java @@ -60,8 +60,21 @@ public class RenderRBMKConsole extends TileEntitySpecialRenderer { double kx = -0.3725D; double ky = -(i / 15) * 0.125 + 3.625; double kz = -(i % 15) * 0.125 + 0.125D * 7; + + if(col.data.hasKey("color") && col.data.getByte("color") >= 0) { + byte color = col.data.getByte("color"); + if(color == 0) tess.setColorOpaque_I(0xFF0000); + if(color == 1) tess.setColorOpaque_I(0xFFFF00); + if(color == 2) tess.setColorOpaque_I(0x008000); + if(color == 3) tess.setColorOpaque_I(0x0000FF); + if(color == 4) tess.setColorOpaque_I(0x8000FF); + } else { + double heat = col.data.getDouble("heat") / col.data.getDouble("maxHeat"); + double color = 0.65D + (i % 2) * 0.05D; + tess.setColorOpaque_F((float) (color + ((1 - color) * heat)), (float) color, (float) color); + } - drawColumn(tess, kx, ky, kz, (float)(0.65D + (i % 2) * 0.05D), col.data.getDouble("heat") / col.data.getDouble("maxHeat")); + drawColumn(tess, kx, ky, kz, 0, 0); switch(col.type) { case FUEL: @@ -123,7 +136,6 @@ public class RenderRBMKConsole extends TileEntitySpecialRenderer { double width = 0.0625D * 0.75; - tess.setColorOpaque_F((float) (color + ((1 - color) * heat)), color, color); tess.addVertex(x, y + width, z - width); tess.addVertex(x, y + width, z + width); tess.addVertex(x, y - width, z + width); diff --git a/src/main/java/com/hbm/render/tileentity/RenderRBMKDisplay.java b/src/main/java/com/hbm/render/tileentity/RenderRBMKDisplay.java new file mode 100644 index 000000000..676e106f8 --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderRBMKDisplay.java @@ -0,0 +1,127 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.tileentity.machine.rbmk.TileEntityRBMKDisplay; +import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.RBMKColumn; + +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; + +public class RenderRBMKDisplay extends TileEntitySpecialRenderer { + + @Override + public void renderTileEntityAt(TileEntity te, double x, double y, double z, float interp) { + + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y, z + 0.5); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_LIGHTING); + + switch(te.getBlockMetadata()) { + case 2: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(0, 0F, 1F, 0F); break; + } + + TileEntityRBMKDisplay display = (TileEntityRBMKDisplay) te; + + GL11.glTranslated(0, 0.5, 0); + GL11.glScaled(1, 8D / 7D, 8D / 7D); + GL11.glTranslated(0, -0.5, 0); + + Tessellator tess = Tessellator.instance; + GL11.glDisable(GL11.GL_TEXTURE_2D); + tess.startDrawingQuads(); + tess.setBrightness(240); + tess.setNormal(1, 0, 0); + + for(int i = 0; i < display.columns.length; i++) { + + RBMKColumn col = display.columns[i]; + + if(col == null) continue; + + double kx = 0.28125D; + double ky = -(i / 7) * 0.125 + 0.875; + double kz = -(i % 7) * 0.125 + 0.125D * 3; + + if(col.data.hasKey("color") && col.data.getByte("color") >= 0) { + byte color = col.data.getByte("color"); + if(color == 0) tess.setColorOpaque_I(0xFF0000); + if(color == 1) tess.setColorOpaque_I(0xFFFF00); + if(color == 2) tess.setColorOpaque_I(0x008000); + if(color == 3) tess.setColorOpaque_I(0x0000FF); + if(color == 4) tess.setColorOpaque_I(0x8000FF); + } else { + double heat = col.data.getDouble("heat") / col.data.getDouble("maxHeat"); + double color = 0.65D + (i % 2) * 0.05D; + tess.setColorOpaque_F((float) (color + ((1 - color) * heat)), (float) color, (float) color); + } + + drawColumn(tess, kx, ky, kz); + + switch(col.type) { + case FUEL: + case FUEL_SIM: drawFuel(tess, kx + 0.01, ky, kz, col.data.getDouble("enrichment")); break; + case CONTROL: drawControl(tess, kx + 0.01, ky, kz, col.data.getDouble("level")); break; + case CONTROL_AUTO: drawControlAuto(tess, kx + 0.01, ky, kz, col.data.getDouble("level")); break; + default: + } + } + + tess.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + + GL11.glPopMatrix(); + } + + private void drawColumn(Tessellator tess, double x, double y, double z) { + + double width = 0.0625D * 0.75; + + tess.addVertex(x, y + width, z - width); + tess.addVertex(x, y + width, z + width); + tess.addVertex(x, y - width, z + width); + tess.addVertex(x, y - width, z - width); + } + + private void drawFuel(Tessellator tess, double x, double y, double z, double enrichment) { + this.drawDot(tess, x, y, z, 0F, 0.25F + (float) (enrichment * 0.75D), 0F); + } + + private void drawControl(Tessellator tess, double x, double y, double z, double level) { + this.drawDot(tess, x, y, z, (float) level, (float) level, 0F); + } + + private void drawControlAuto(Tessellator tess, double x, double y, double z, double level) { + this.drawDot(tess, x, y, z, (float) level, 0F, (float) level); + } + + private void drawDot(Tessellator tess, double x, double y, double z, float r, float g, float b) { + + double width = 0.03125D; + double edge = 0.022097D; + + tess.setColorOpaque_F(r, g, b); + + tess.addVertex(x, y + width, z); + tess.addVertex(x, y + edge, z + edge); + tess.addVertex(x, y, z + width); + tess.addVertex(x, y - edge, z + edge); + + tess.addVertex(x, y + edge, z - edge); + tess.addVertex(x, y + width, z); + tess.addVertex(x, y - edge, z - edge); + tess.addVertex(x, y, z - width); + + tess.addVertex(x, y + width, z); + tess.addVertex(x, y - edge, z + edge); + tess.addVertex(x, y - width, z); + tess.addVertex(x, y - edge, z - edge); + + tess.setColorOpaque_F(1F, 1F, 1F); + } +} diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 1f5aa5bda..ea00242cb 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -402,6 +402,7 @@ public class TileMappings { put(TileEntityRBMKStorage.class, "tileentity_rbmk_storage"); put(TileEntityCraneConsole.class, "tileentity_rbmk_crane_console"); put(TileEntityRBMKConsole.class, "tileentity_rbmk_console"); + put(TileEntityRBMKDisplay.class, "tileentity_rbmk_display"); put(TileEntityRBMKInlet.class, "tileentity_rbmk_inlet"); put(TileEntityRBMKOutlet.class, "tileentity_rbmk_outlet"); put(TileEntityRBMKAutoloader.class, "tileentity_rbmk_autoloader"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoiler.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoiler.java index b1602f53e..28e150fea 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoiler.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoiler.java @@ -215,15 +215,16 @@ public class TileEntityHeatBoiler extends TileEntityLoadedBase implements IBufPa if(trait.getEfficiency(HeatingType.BOILER) > 0) { HeatingStep entry = trait.getFirstStep(); + int heatReq = (int) Math.max(entry.heatReq / trait.getEfficiency(HeatingType.BOILER), 1); int inputOps = this.tanks[0].getFill() / entry.amountReq; int outputOps = (this.tanks[1].getMaxFill() - this.tanks[1].getFill()) / entry.amountProduced; - int heatOps = this.heat / entry.heatReq; + int heatOps = this.heat / heatReq; int ops = Math.min(inputOps, Math.min(outputOps, heatOps)); this.tanks[0].setFill(this.tanks[0].getFill() - entry.amountReq * ops); this.tanks[1].setFill(this.tanks[1].getFill() + entry.amountProduced * ops); - this.heat -= entry.heatReq * ops; + this.heat -= heatReq * ops; if(ops > 0 && worldObj.rand.nextInt(400) == 0) { worldObj.playSoundEffect(xCoord + 0.5, yCoord + 2, zCoord + 0.5, "hbm:block.boilerGroan", 0.5F, 1.0F); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoilerIndustrial.java b/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoilerIndustrial.java index e7bd7bace..fcb675dea 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoilerIndustrial.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityHeatBoilerIndustrial.java @@ -201,15 +201,16 @@ public class TileEntityHeatBoilerIndustrial extends TileEntityLoadedBase impleme if(trait.getEfficiency(HeatingType.BOILER) > 0) { HeatingStep entry = trait.getFirstStep(); + int heatReq = (int) Math.max(entry.heatReq / trait.getEfficiency(HeatingType.BOILER), 1); int inputOps = this.tanks[0].getFill() / entry.amountReq; int outputOps = (this.tanks[1].getMaxFill() - this.tanks[1].getFill()) / entry.amountProduced; - int heatOps = this.heat / entry.heatReq; + int heatOps = this.heat / heatReq; int ops = Math.min(inputOps, Math.min(outputOps, heatOps)); this.tanks[0].setFill(this.tanks[0].getFill() - entry.amountReq * ops); this.tanks[1].setFill(this.tanks[1].getFill() + entry.amountProduced * ops); - this.heat -= entry.heatReq * ops; + this.heat -= heatReq * ops; if(ops > 0 && worldObj.rand.nextInt(400) == 0) { worldObj.playSoundEffect(xCoord + 0.5, yCoord + 2, zCoord + 0.5, "hbm:block.boilerGroan", 0.5F, 1.0F); diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKAutoloader.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKAutoloader.java index 8ba45ef55..f564eb3db 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKAutoloader.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKAutoloader.java @@ -72,8 +72,10 @@ public class TileEntityRBMKAutoloader extends TileEntityMachineBase implements I TileEntity tile = worldObj.getTileEntity(pos[0], pos[1], pos[2]); if(tile instanceof TileEntityRBMKRod) { TileEntityRBMKRod rod = (TileEntityRBMKRod) tile; - if(rod.slots[0] == null || (rod.slots[0] != null && rod.slots[0].getItem() instanceof ItemRBMKRod && ItemRBMKRod.getEnrichment(rod.slots[0]) * 100 < cycle)) { - this.isRetracting = false; + if(rod.coldEnoughForAutoloader()) { + if(rod.slots[0] == null || (rod.slots[0] != null && rod.slots[0].getItem() instanceof ItemRBMKRod && ItemRBMKRod.getEnrichment(rod.slots[0]) * 100 < cycle)) { + this.isRetracting = false; + } } } } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java index c638a75b9..a32131591 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKBoiler.java @@ -103,7 +103,8 @@ public class TileEntityRBMKBoiler extends TileEntityRBMKSlottedBase implements I data.setString("type", "rbmksteam"); PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(data, xCoord + 0.25 + worldObj.rand.nextInt(2) * 0.5, yCoord + RBMKDials.getColumnHeight(worldObj), zCoord + 0.25 + worldObj.rand.nextInt(2) * 0.5), new TargetPoint(worldObj.provider.dimensionId, xCoord + 0.5, yCoord + 1, zCoord + 0.5, 100)); MainRegistry.proxy.effectNT(data); - this.ventDelay = 20; + this.ventDelay = 20 + worldObj.rand.nextInt(10); + this.worldObj.playSoundEffect(xCoord, yCoord + RBMKDials.getColumnHeight(worldObj), zCoord, "hbm:block.steamEngineOperate", 2F, 1F + worldObj.rand.nextFloat() * 0.25F); } } @@ -112,7 +113,7 @@ public class TileEntityRBMKBoiler extends TileEntityRBMKSlottedBase implements I this.trySubscribe(feed.getTankType(), worldObj, xCoord, yCoord - 1, zCoord, Library.NEG_Y); for(DirPos pos : getOutputPos()) { - if(this.steam.getFill() > 0) this.sendFluid(steam, worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + if(this.steam.getFill() > 0) this.tryProvide(steam, worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); } } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlManual.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlManual.java index 6788dce16..0792215f3 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlManual.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKControlManual.java @@ -8,6 +8,7 @@ import com.hbm.inventory.gui.GUIRBMKControl; import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; import com.hbm.util.EnumUtil; +import api.hbm.redstoneoverradio.IRORInteractive; import cpw.mods.fml.common.Optional; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -22,7 +23,7 @@ import net.minecraft.util.MathHelper; import net.minecraft.util.Vec3; import net.minecraft.world.World; -public class TileEntityRBMKControlManual extends TileEntityRBMKControl implements IControlReceiver, ICopiable { +public class TileEntityRBMKControlManual extends TileEntityRBMKControl implements IControlReceiver, ICopiable, IRORInteractive { public RBMKColor color; public double startingLevel; @@ -193,4 +194,24 @@ public class TileEntityRBMKControlManual extends TileEntityRBMKControl implement public void pasteSettings(NBTTagCompound nbt, int index, World world, EntityPlayer player, int x, int y, int z) { if(nbt.hasKey("color")) color = EnumUtil.grabEnumSafely(RBMKColor.class, nbt.getInteger("color")); } + + @Override + public String[] getFunctionInfo() { + return new String[] { + PREFIX_FUNCTION + "setrods" + NAME_SEPARATOR + "percent" + }; + } + + @Override + public String runRORFunction(String name, String[] params) { + + if((PREFIX_FUNCTION + "setrods").equals(name) && params.length > 0) { + int percent = IRORInteractive.parseInt(params[0], 0, 100); + this.targetLevel = percent / 100D; + this.markDirty(); + return null; + } + + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKDisplay.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKDisplay.java new file mode 100644 index 000000000..6349419d0 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKDisplay.java @@ -0,0 +1,147 @@ +package com.hbm.tileentity.machine.rbmk; + +import com.hbm.tileentity.TileEntityLoadedBase; +import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.ColumnType; +import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.RBMKColumn; +import com.hbm.util.BufferUtil; +import com.hbm.util.Compat; + +import io.netty.buffer.ByteBuf; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; + +public class TileEntityRBMKDisplay extends TileEntityLoadedBase { + + private int targetX; + private int targetY; + private int targetZ; + + private byte rotation; + + public RBMKColumn[] columns = new RBMKColumn[7 * 7]; + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + if(this.worldObj.getTotalWorldTime() % 10 == 0) { + rescan(); + this.networkPackNT(50); + } + } + } + + public void setTarget(int x, int y, int z) { + this.targetX = x; + this.targetY = y; + this.targetZ = z; + this.markDirty(); + } + + @Override + public void serialize(ByteBuf buf) { + super.serialize(buf); + + for(RBMKColumn column : this.columns) { + if(column == null || column.type == null) + buf.writeByte(-1); + else { + buf.writeByte((byte) column.type.ordinal()); + BufferUtil.writeNBT(buf, column.data); + } + } + } + + @Override + public void deserialize(ByteBuf buf) { + super.deserialize(buf); + + for(int i = 0; i < this.columns.length; i++) { + byte ordinal = buf.readByte(); + if(ordinal == -1) + this.columns[i] = null; + else + this.columns[i] = new RBMKColumn(ColumnType.values()[ordinal], BufferUtil.readNBT(buf)); + } + } + + private void rescan() { + + for(int index = 0; index < columns.length; index++) { + int rx = getXFromIndex(index); + int rz = getZFromIndex(index); + + TileEntity te = Compat.getTileStandard(worldObj, targetX + rx, targetY, targetZ + rz); + + if(te instanceof TileEntityRBMKBase) { + + TileEntityRBMKBase rbmk = (TileEntityRBMKBase)te; + + columns[index] = new RBMKColumn(rbmk.getConsoleType(), rbmk.getNBTForConsole()); + columns[index].data.setDouble("heat", rbmk.heat); + columns[index].data.setDouble("maxHeat", rbmk.maxHeat()); + + if(te instanceof TileEntityRBMKControlManual) { + TileEntityRBMKControlManual control = (TileEntityRBMKControlManual) te; + if(control.color != null) { + columns[index].data.setByte("color", (byte) control.color.ordinal()); + } else { + columns[index].data.setByte("color", (byte) -1); + } + } + + } else { + columns[index] = null; + } + } + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + + this.targetX = nbt.getInteger("tX"); + this.targetY = nbt.getInteger("tY"); + this.targetZ = nbt.getInteger("tZ"); + this.rotation = nbt.getByte("rotation"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + nbt.setInteger("tX", this.targetX); + nbt.setInteger("tY", this.targetY); + nbt.setInteger("tZ", this.targetZ); + nbt.setByte("rotation", this.rotation); + } + + public void rotate() { + rotation = (byte)((rotation + 1) % 4); + } + + public int getXFromIndex(int col) { + int i = col % 7 - 3; + int j = col / 7 - 3; + switch (rotation) { + case 0: return i; + case 1: return -j; + case 2: return -i; + case 3: return j; + } + return i; + } + + public int getZFromIndex(int col) { + int i = col % 7 - 3; + int j = col / 7 - 3; + switch (rotation) { + case 0: return j; + case 1: return i; + case 2: return -j; + case 3: return -i; + } + return j; + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java index ca7814eda..45612c190 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRod.java @@ -20,6 +20,7 @@ import com.hbm.util.BufferUtil; import com.hbm.util.CompatEnergyControl; import com.hbm.util.ParticleUtil; +import api.hbm.redstoneoverradio.IRORValueProvider; import api.hbm.tile.IInfoProviderEC; import com.hbm.util.fauxpointtwelve.BlockPos; import cpw.mods.fml.common.Optional; @@ -43,7 +44,7 @@ import java.util.ArrayList; import java.util.List; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")}) -public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBMKFluxReceiver, IRBMKLoadable, IInfoProviderEC, SimpleComponent, CompatHandler.OCComponent { +public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBMKFluxReceiver, IRBMKLoadable, IInfoProviderEC, SimpleComponent, CompatHandler.OCComponent, IRORValueProvider { // New system!! // Used for receiving flux (calculating outbound flux/burning rods) @@ -88,6 +89,28 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM fluxFastRatio = (fastFlux + fastFluxIn) / fluxQuantity; } + public boolean coldEnoughForAutoloader() { + if(slots[0] != null && slots[0].getItem() instanceof ItemRBMKRod) { + return ItemRBMKRod.getHullHeat(slots[0]) <= 1_000; + } + return true; + } + public boolean coldEnoughForManual() { + if(slots[0] != null && slots[0].getItem() instanceof ItemRBMKRod) { + return ItemRBMKRod.getHullHeat(slots[0]) <= 200; + } + return true; + } + + @Override + public void invalidate() { + super.invalidate(); + + if(slots[0] != null && slots[0].getItem() instanceof ItemRBMKRod && ItemRBMKRod.getHullHeat(slots[0]) >= 150) { + this.meltdown(); + } + } + @Override public void updateEntity() { @@ -104,13 +127,8 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM // Experimental flux ratio curve rods! // Again, nothing really uses this so its just idle code at the moment. if(rod.specialFluxCurve) { - fluxRatioOut = rod.fluxRatioOut(this.fluxFastRatio, ItemRBMKRod.getEnrichment(slots[0])); - - double fluxIn; - - fluxIn = rod.fluxFromRatio(this.fluxQuantity, this.fluxFastRatio); - + double fluxIn = rod.fluxFromRatio(this.fluxQuantity, this.fluxFastRatio); fluxQuantityOut = rod.burn(worldObj, slots[0], fluxIn); } else { NType rType = rod.rType; @@ -527,4 +545,25 @@ public class TileEntityRBMKRod extends TileEntityRBMKSlottedBase implements IRBM data.setDouble(CompatEnergyControl.D_MELT_C, ((ItemRBMKRod) slots[0].getItem()).meltingPoint); } } + + @Override + public String[] getFunctionInfo() { + return new String[] { + PREFIX_VALUE + "columnheat", + PREFIX_VALUE + "rodheat", + PREFIX_VALUE + "depletion", + PREFIX_VALUE + "xenon" + }; + } + + @Override + public String provideRORValue(String name) { + if((PREFIX_VALUE + "columnheat").equals(name)) return "" + this.heat; + if(slots[0] != null && slots[0].getItem() instanceof ItemRBMKRod) { + if((PREFIX_VALUE + "rodheat").equals(name)) return "" + ItemRBMKRod.getHullHeat(slots[0]); + if((PREFIX_VALUE + "depletion").equals(name)) return "" + (100 - ItemRBMKRod.getEnrichment(slots[0]) * 100); + if((PREFIX_VALUE + "xenon").equals(name)) return "" + (ItemRBMKRod.getPoison(slots[0]) * 100); + } + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRodReaSim.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRodReaSim.java index 9ef055227..47652db81 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRodReaSim.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKRodReaSim.java @@ -44,7 +44,7 @@ public class TileEntityRBMKRodReaSim extends TileEntityRBMKRod { Vec3NT vec = new Vec3NT(1, 0, 0); vec.rotateAroundYDeg(worldObj.rand.nextInt(4) * 9D); for(int i = 0; i < 8; i++) { - new RBMKNeutronHandler.RBMKNeutronStream(node, vec, flux * 0.5, ratio); + new RBMKNeutronHandler.RBMKNeutronStream(node, new Vec3NT(vec), flux * 0.75, ratio); vec.rotateAroundYDeg(45D); } } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index ffd4abecc..16739e94d 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -4884,7 +4884,10 @@ tile.rbmk_console.name=RBMK Konsole tile.rbmk_control.name=RBMK Steuerstäbe tile.rbmk_control_auto.name=RBMK Automatische Steuerstäbe tile.rbmk_control_mod.name=RBMK Moderierte Steuerstäbe +tile.rbmk_control_reasim.name=RBMK Steuerstäbe (ReaSim) +tile.rbmk_control_reasim_auto.name=RBMK Automatische Steuerstäbe (ReaSim) tile.rbmk_crane_console.name=RBMK Kransteuerung +tile.rbmk_display.name=RBMK Anzeigepanel tile.rbmk_heater.name=RBMK-Heizer tile.rbmk_loader.name=RBMK-Dampfadapter tile.rbmk_moderator.name=RBMK Graphitmoderator diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index e19b29926..9c2c889f3 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -6163,7 +6163,10 @@ tile.rbmk_cooler.name=RBMK Cooler tile.rbmk_control.name=RBMK Control Rods tile.rbmk_control_auto.name=RBMK Automatic Control Rods tile.rbmk_control_mod.name=RBMK Moderated Control Rods +tile.rbmk_control_reasim.name=RBMK Control Rods (ReaSim) +tile.rbmk_control_reasim_auto.name=RBMK Automatic Control Rods (ReaSim) tile.rbmk_crane_console.name=RBMK Crane Console +tile.rbmk_display.name=RBMK Display Panel tile.rbmk_heater.name=RBMK Fluid Heater tile.rbmk_loader.name=RBMK Steam Connector tile.rbmk_loader.desc=Allows RBMKs to have both water and steam connections at the bottom$Place one water pipe below the RBMK column, then the connector,$then connect the steam duct to the connector. @@ -6226,6 +6229,14 @@ tile.rbmk.dodd.steam_amt=Steam Amount tile.rbmk.dodd.cryo_amt=Cryo Amount tile.rbmk.dodd.gas_amt=Gas Amount tile.rbmk.dodd.fuel_amt=Fuel Amount +tile.rbmk.dodd.t0=Cold PFM Amount +tile.rbmk.dodd.t0_max=Cold PFM Capacity +tile.rbmk.dodd.t0_type=Cold PFM Type +tile.rbmk.dodd.t0_p=Cold PFM Pressure +tile.rbmk.dodd.t1=PFM Amount +tile.rbmk.dodd.t1_max=PFM Capacity +tile.rbmk.dodd.t1_type=PFM Type +tile.rbmk.dodd.t1_p=PFM Pressure tile.reactor_computer.name=Reactor Control tile.reactor_conductor.name=Reactor Boiler tile.reactor_control.name=Control Rods diff --git a/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_display.png b/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_display.png new file mode 100644 index 0000000000000000000000000000000000000000..3d7b115b4a769b249b2c7d885cec46377ac58ca3 GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf1%>FVdQ&MBb@0JT3fX#fBK literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_element_cover_top.png b/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_element_cover_top.png index 227abb0d12a714a5befe8807607ceb01748841d0..99662cef4efbc6d12927404d3ec63052b41b16ae 100644 GIT binary patch delta 337 zcmV-X0j~bz0{jAyG=DQmL_t(IjjfWwY63A3hJTm61j637zC$T}3=bYWi3g$d(07v} zOTmNq9)gx4)wZ`JwD5CXcc0};XdHa6g9T$ck%d0;dgK%lg;a^9ll9)e_<(hm@)1$u1L+Sw6Mc|_r4Mp&qJs26 z2mufGck!nk-%5If7t0kw2$)XB=RN>_bY_5q2mI;-zS3woh(J!xoDT|yd4pkj1D?qH jXFk{;c8N6ny~GD!{}CUGkFV_N00000NkvXXu0mjfYo4Lx delta 312 zcmV-80muIQ0^ofleU|6n-OSihxCMGi?l-zj8F1?x|9EZ^tOBba?(-?CoNZ(*PQ!aIceE! z*8o^sV~jzh#oC&~anD6F;p6ii?>m}iLI?o>V+@<^nz5dyaDNCP<{Bkf^D2e!A07d? zyS<48K!l&3UjSGw7qP*(e*mea(1OQMr+yC0PqdXrU;h*s`V0U7002ovPDHLkV1hxKxiSC% delta 392 zcmV;30eAkr1F{2-s0~fb6?@&r#z(Im!kPLy+p>O3N zf`d3^aF9ZW(%mJyprwT7-==p9!X4A0IhSkFrX6}fyn4>@9KY{peZ0LNTG`;cXk~-j zn>$>}U$wG9RhIw&A#4y4q--FBjn#UI>){C7-3DE^$8b1;Qhy2nKt!nO5(EC)Jj+2u zP)g}DN7wB!&vM-yC#gPLi=sGecN-89viu1E@c3{Kr4&}{CC2Uqt!$u_!t={30AM!t z`y23N4y6>jZr^)0!>k{0L7b%UTnDqMk2p!s1dEdtv#Afybr6J+9$+ns;!xG47Ra33 z%0~Z!JUStSt$%B@3w)i1lr2n`xXH|0|H1+L%p9;TCI==TT%%oJpE(hPQI7*6LJ&r} zIS8ZQIgm$P#_j}FT|x-^G6#L}zEIU`iHl&}B*002ovPDHLkU;%>O47Roa diff --git a/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_element_reasim_cover_top.png b/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_element_reasim_cover_top.png index 6f0e6da20e7338f991de15e8c7e4c350fcaa80dd..77d3398ab05bd9187ea73c300e72c3b9031349bc 100644 GIT binary patch delta 340 zcmV-a0jvJy0{;S#G=DZpL_t(IjjfWwY63A3hJTm61j637zC$T}7$3l!h-dLudM}F? z@d>0?Uq;YUL~VP^=C))R;-x*%T&w4` zHCS&}006BED5YSnfz}1~hb?Z(F5W-h;9P^U?1G2@07@yWH-9T++>K!(3OPp#<~)<| z^HYUIHH{7c2=HGmTKrRpTMgwSFL@6l}khI3JML)_~V}SX)D?#L~%n=U;rlI!pP8DDr{y2cHQ(NWszvDL7I= z`k?h5!^em4(@joqJ;BS_9If~0PsW!%0Dg34fP)A8>I1$~Z!`!%O3suIGKP7BVR-|d m$om&Q*dMl$H2nRG5554o79YOkVH&vr0000ELqt?-vJ?BqYuy(b?97mLp%dw zLp%a2FH@TH<||HK@`%YF>in zM~Qxe%1Mhp{Sa}aDgjxYh-36GK2V)g`9cVp4^n?xRPV1lm#e2R=9)_n9>M{)-R30cz|12A;RE_5c6? M07*qoM6N<$f>vOX@c;k- diff --git a/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_element_reasim_mod_cover_top.png b/src/main/resources/assets/hbm/textures/blocks/rbmk/rbmk_element_reasim_mod_cover_top.png index 074a9ed31d06e2c39b8a143b5528f83d98edc224..c7fb9a602ea05cdd343339a0a1ee253ea1846335 100644 GIT binary patch delta 401 zcmV;C0dD@V1G@u|G=FkQL_t(IjjfWuN&`U<#=nF#3(Iw9-a*7y5DVYH!XlLzNDzw< z(uuuT9C#k22&qz}h%b@GK9Gn66Sdph?$|I~npngc?<6r64jeZye|NrL;r01t6n;eG#015yANkvXXu0mjf2adED delta 389 zcmV;00eb$s1F!>-G=FDFL_t(IjjfWuO2beThrgCC7ecq#cM$Ov#6j`^-7^G-g0;{= zd4rHwv9IU(5jTye3L1w9fIoCad+5J-@}v>oaA!!GHH#7-IlXN-$P)ZRG z65AXPlHWPdm4D5D=b$Ry`>GP|+EQQPK-LbTkRS@l#*>PjlK++i5mBazpsV%Lav+TC j