From ebfa6912a07db5a90bba747d2da029debb1b470b Mon Sep 17 00:00:00 2001 From: Boblet Date: Mon, 11 Oct 2021 16:59:59 +0200 Subject: [PATCH] finally the RBMK display, launch pad mercy, fixes --- .../com/hbm/blocks/gas/BlockGasRadon.java | 11 ++- .../hbm/blocks/generic/BlockStorageCrate.java | 7 +- .../java/com/hbm/main/CraftingManager.java | 6 +- .../render/tileentity/RenderRBMKConsole.java | 86 ++++++++++++++++++ .../textures/models/machines/rbmk_control.png | Bin 4449 -> 4371 bytes 5 files changed, 104 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/hbm/blocks/gas/BlockGasRadon.java b/src/main/java/com/hbm/blocks/gas/BlockGasRadon.java index df166aa03..fdf44479f 100644 --- a/src/main/java/com/hbm/blocks/gas/BlockGasRadon.java +++ b/src/main/java/com/hbm/blocks/gas/BlockGasRadon.java @@ -3,8 +3,10 @@ package com.hbm.blocks.gas; import java.util.Random; import com.hbm.extprop.HbmLivingProps; +import com.hbm.util.ArmorRegistry; import com.hbm.util.ArmorUtil; import com.hbm.util.ContaminationUtil; +import com.hbm.util.ArmorRegistry.HazardClass; import com.hbm.util.ContaminationUtil.ContaminationType; import com.hbm.util.ContaminationUtil.HazardType; @@ -23,7 +25,14 @@ public class BlockGasRadon extends BlockGasBase { @Override public void onEntityCollidedWithBlock(World world, int p_149670_2_, int p_149670_3_, int p_149670_4_, Entity entity) { - if(entity instanceof EntityLivingBase) { + if(!(entity instanceof EntityLivingBase)) + return; + + EntityLivingBase entityLiving = (EntityLivingBase) entity; + + if(ArmorRegistry.hasAllProtection(entityLiving, 3, HazardClass.PARTICLE_FINE)) { + ArmorUtil.damageGasMaskFilter(entityLiving, 1); + } else { ContaminationUtil.contaminate((EntityLivingBase)entity, HazardType.RADIATION, ContaminationType.RAD_BYPASS, 0.05F); HbmLivingProps.incrementFibrosis((EntityLivingBase)entity, 1); } diff --git a/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java b/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java index 16ab8ac96..d86689853 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java +++ b/src/main/java/com/hbm/blocks/generic/BlockStorageCrate.java @@ -113,8 +113,11 @@ public class BlockStorageCrate extends BlockContainer { if(inv instanceof TileEntityLockableBase) { TileEntityLockableBase lockable = (TileEntityLockableBase) inv; - nbt.setInteger("lock", lockable.getPins()); - nbt.setDouble("lockMod", lockable.getMod()); + + if(lockable.isLocked()) { + nbt.setInteger("lock", lockable.getPins()); + nbt.setDouble("lockMod", lockable.getMod()); + } } if(!nbt.hasNoTags()) { diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index ad96f8919..f0ffd1140 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -640,9 +640,9 @@ public class CraftingManager { GameRegistry.addRecipe(new ItemStack(Blocks.torch, 8), new Object[] { "L", "S", 'L', ModItems.coke, 'S', Items.stick }); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.machine_missile_assembly, 1), new Object[] { "PWP", "SSS", "CCC", 'P', ModItems.pedestal_steel, 'W', ModItems.wrench, 'S', "plateSteel", 'C', ModBlocks.steel_scaffold })); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.struct_launcher, 1), new Object[] { "PPP", "SDS", "CCC", 'P', "plateSteel", 'S', ModBlocks.steel_scaffold, 'D', ModBlocks.deco_pipe_quad, 'C', ModBlocks.concrete_smooth })); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.struct_launcher, 1), new Object[] { "PPP", "SDS", "CCC", 'P', "plateSteel", 'S', ModBlocks.steel_scaffold, 'D', ModBlocks.deco_pipe_quad, 'C', ModBlocks.concrete })); - GameRegistry.addRecipe(new ItemStack(ModBlocks.struct_scaffold, 1), new Object[] { "SSS", "DCD", "SSS", 'S', ModBlocks.steel_scaffold, 'D', ModBlocks.fluid_duct, 'C', ModBlocks.red_cable }); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.struct_launcher, 4), new Object[] { "PPP", "SDS", "CCC", 'P', "plateSteel", 'S', ModBlocks.steel_scaffold, 'D', ModBlocks.deco_pipe_quad, 'C', ModBlocks.concrete_smooth })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.struct_launcher, 4), new Object[] { "PPP", "SDS", "CCC", 'P', "plateSteel", 'S', ModBlocks.steel_scaffold, 'D', ModBlocks.deco_pipe_quad, 'C', ModBlocks.concrete })); + GameRegistry.addRecipe(new ItemStack(ModBlocks.struct_scaffold, 4), new Object[] { "SSS", "DCD", "SSS", 'S', ModBlocks.steel_scaffold, 'D', ModBlocks.fluid_duct, 'C', ModBlocks.red_cable }); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.seg_10, 1), new Object[] { "P", "S", "B", 'P', "plateAluminum", 'S', ModBlocks.steel_scaffold, 'B', ModBlocks.steel_beam })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.seg_15, 1), new Object[] { "PP", "SS", "BB", 'P', "plateTitanium", 'S', ModBlocks.steel_scaffold, 'B', ModBlocks.steel_beam })); diff --git a/src/main/java/com/hbm/render/tileentity/RenderRBMKConsole.java b/src/main/java/com/hbm/render/tileentity/RenderRBMKConsole.java index 51b0a92f8..ab52f2ac4 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderRBMKConsole.java +++ b/src/main/java/com/hbm/render/tileentity/RenderRBMKConsole.java @@ -5,8 +5,11 @@ import org.lwjgl.opengl.GL11; import com.hbm.blocks.BlockDummyable; import com.hbm.main.ResourceManager; import com.hbm.tileentity.machine.TileEntityMachineFENSU; +import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole; +import com.hbm.tileentity.machine.rbmk.TileEntityRBMKConsole.RBMKColumn; import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.tileentity.TileEntity; @@ -35,7 +38,90 @@ public class RenderRBMKConsole extends TileEntitySpecialRenderer { bindTexture(ResourceManager.rbmk_console_tex); ResourceManager.rbmk_console.renderAll(); GL11.glShadeModel(GL11.GL_FLAT); + + TileEntityRBMKConsole console = (TileEntityRBMKConsole) te; + + Tessellator tess = Tessellator.instance; + tess.startDrawingQuads(); + + for(int i = 0; i < console.columns.length; i++) { + + RBMKColumn col = console.columns[i]; + + if(col == null) + continue; + + double kx = i % 15 - 0.125D * 7; + double ky = i / 15 + 2.5; + double kz = 0.5D; + + drawColumn(tess, kx, ky, kz, (float)(0.6D + ((kx + ky) % 2) * 0.1D), col.data.getDouble("heat") / col.data.getDouble("maxHeat")); + + switch(col.type) { + case FUEL: + case FUEL_SIM: drawFuel(tess, kx, ky, kz, col.data.getDouble("enrichment")); break; + case CONTROL: drawControl(tess, kx, ky, kz, col.data.getDouble("level")); break; + case CONTROL_AUTO: drawControlAuto(tess, kx, ky, kz, col.data.getDouble("level")); break; + } + } GL11.glPopMatrix(); } + + private void drawColumn(Tessellator tess, double x, double y, double z, float color, double heat) { + + double width = 0.0625D; + + tess.setColorOpaque_F((float) (color + ((1 - color) * heat)), color, color); + tess.addVertex(x - width, y + width, z); + tess.addVertex(x + width, y + width, z); + tess.addVertex(x + width, y - width, z); + tess.addVertex(x - width, y - width, z); + } + + 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 drawSquare(Tessellator tess, double x, double y, double z, float r, float g, float b) { + + double width = 0.0625D; + + tess.setColorOpaque_F(r, g, b); + tess.addVertex(x - width, y + width, z); + tess.addVertex(x + width, y + width, z); + tess.addVertex(x + width, y - width, z); + tess.addVertex(x - width, y - width, z); + } + + 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 + edge, y + edge, z); + tess.addVertex(x + width, y, z); + tess.addVertex(x + edge, y - edge, z); + + tess.addVertex(x, y + width, z); + tess.addVertex(x - edge, y + edge, z); + tess.addVertex(x - width, y, z); + tess.addVertex(x - edge, y - edge, z); + + tess.addVertex(x, y + width, z); + tess.addVertex(x + edge, y - edge, z); + tess.addVertex(x, y - width, z); + tess.addVertex(x - edge, y - edge, z); + } } diff --git a/src/main/resources/assets/hbm/textures/models/machines/rbmk_control.png b/src/main/resources/assets/hbm/textures/models/machines/rbmk_control.png index ea2ca336faf19e7a4674adfe7fd24bde88c53e08..ad6377034c15c86da674b9e780903e58a5a6ad9f 100644 GIT binary patch literal 4371 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 literal 4449 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