From 0c8ee5aa196b90c6e095118f5a5a8bc9d666531c Mon Sep 17 00:00:00 2001 From: Bob Date: Wed, 28 Feb 2024 21:01:07 +0100 Subject: [PATCH] toasters, crappy screens --- src/main/java/com/hbm/blocks/ModBlocks.java | 10 +- .../com/hbm/blocks/generic/BlockDecoCRT.java | 76 +++++++ .../hbm/blocks/generic/BlockDecoToaster.java | 93 +++++++++ src/main/java/com/hbm/main/ClientProxy.java | 2 + .../com/hbm/main/ModEventHandlerClient.java | 5 + .../java/com/hbm/main/ResourceManager.java | 2 + .../render/block/RenderBlockDecoModel.java | 2 +- .../java/com/hbm/render/block/RenderCRT.java | 83 ++++++++ .../com/hbm/render/block/RenderToaster.java | 80 ++++++++ .../java/com/hbm/render/util/ObjUtil.java | 2 +- src/main/resources/assets/hbm/lang/de_DE.lang | 3 + src/main/resources/assets/hbm/lang/en_US.lang | 2 + .../assets/hbm/models/blocks/crt.obj | 126 ++++++++++++ .../assets/hbm/models/blocks/toaster.obj | 186 ++++++++++++++++++ .../hbm/textures/blocks/crt_blinking.png | Bin 0 -> 397 bytes .../textures/blocks/crt_blinking.png.mcmeta | 5 + .../assets/hbm/textures/blocks/crt_broken.png | Bin 0 -> 644 bytes .../assets/hbm/textures/blocks/crt_bsod.png | Bin 0 -> 418 bytes .../assets/hbm/textures/blocks/crt_clean.png | Bin 0 -> 397 bytes 19 files changed, 673 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/generic/BlockDecoCRT.java create mode 100644 src/main/java/com/hbm/blocks/generic/BlockDecoToaster.java create mode 100644 src/main/java/com/hbm/render/block/RenderCRT.java create mode 100644 src/main/java/com/hbm/render/block/RenderToaster.java create mode 100644 src/main/resources/assets/hbm/models/blocks/crt.obj create mode 100644 src/main/resources/assets/hbm/models/blocks/toaster.obj create mode 100644 src/main/resources/assets/hbm/textures/blocks/crt_blinking.png create mode 100755 src/main/resources/assets/hbm/textures/blocks/crt_blinking.png.mcmeta create mode 100644 src/main/resources/assets/hbm/textures/blocks/crt_broken.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/crt_bsod.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/crt_clean.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 8982db906..9cd303ffe 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -434,8 +434,10 @@ public class ModBlocks { public static Block brick_forgotten; public static Block brick_red; - + public static Block deco_computer; + public static Block deco_crt; + public static Block deco_toaster; public static Block filing_cabinet; @@ -1670,6 +1672,8 @@ public class ModBlocks { brick_red = new BlockRedBrick(Material.rock).setBlockName("brick_red").setResistance(10_000); deco_computer = new BlockDecoModel(Material.iron, DecoComputerEnum.class, true, false).setBlockBoundsTo(.160749F, 0F, 0F, .839251F, .867849F, .622184F).setBlockName("deco_computer").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":deco_computer"); + deco_crt = new BlockDecoCRT(Material.iron).setBlockName("deco_crt").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":block_steel"); + deco_toaster = new BlockDecoToaster(Material.iron).setBlockName("deco_toaster").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":block_steel"); filing_cabinet = new BlockDecoContainer(Material.iron, DecoCabinetEnum.class, true, false, TileEntityFileCabinet.class).setBlockBoundsTo(.1875F, 0F, 0F, .8125F, 1F, .75F).setBlockName("filing_cabinet").setCreativeTab(MainRegistry.blockTab).setHardness(10.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":block_steel"); tape_recorder = new DecoTapeRecorder(Material.iron).setBlockName("tape_recorder").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":deco_tape_recorder"); @@ -2884,7 +2888,9 @@ public class ModBlocks { GameRegistry.registerBlock(brick_jungle_circle, brick_jungle_circle.getUnlocalizedName()); GameRegistry.registerBlock(brick_forgotten, brick_forgotten.getUnlocalizedName()); GameRegistry.registerBlock(brick_red, brick_red.getUnlocalizedName()); - GameRegistry.registerBlock(deco_computer, ItemBlockBase.class, deco_computer.getUnlocalizedName()); + register(deco_computer); + register(deco_crt); + register(deco_toaster); GameRegistry.registerBlock(filing_cabinet, ItemBlockBase.class, filing_cabinet.getUnlocalizedName()); GameRegistry.registerBlock(tape_recorder, tape_recorder.getUnlocalizedName()); GameRegistry.registerBlock(steel_poles, steel_poles.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/generic/BlockDecoCRT.java b/src/main/java/com/hbm/blocks/generic/BlockDecoCRT.java new file mode 100644 index 000000000..724912ed3 --- /dev/null +++ b/src/main/java/com/hbm/blocks/generic/BlockDecoCRT.java @@ -0,0 +1,76 @@ +package com.hbm.blocks.generic; + +import com.hbm.blocks.BlockMulti; +import com.hbm.lib.RefStrings; + +import cpw.mods.fml.client.registry.RenderingRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; + +public class BlockDecoCRT extends BlockMulti { + + protected String[] variants = new String[] {"crt_clean", "crt_broken", "crt_blinking", "crt_bsod"}; + @SideOnly(Side.CLIENT) protected IIcon[] icons; + + public BlockDecoCRT(Material mat) { + super(mat); + } + + public static int renderID = RenderingRegistry.getNextAvailableRenderId(); + + @Override + public int getRenderType(){ + return renderID; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + super.registerBlockIcons(reg); + this.icons = new IIcon[variants.length]; + + for(int i = 0; i < variants.length; i++) { + this.icons[i] = reg.registerIcon(RefStrings.MODID + ":" + variants[i]); + } + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + return this.icons[damageDropped(meta)]; + } + + @Override + public int damageDropped(int meta) { + return (Math.abs(meta) % 16) / 4; + } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) { + int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + int meta = stack.getItemDamage(); + world.setBlockMetadataWithNotify(x, y, z, meta * 4 + i, 2); + } + + @Override + public int getSubCount() { + return 4; + } +} diff --git a/src/main/java/com/hbm/blocks/generic/BlockDecoToaster.java b/src/main/java/com/hbm/blocks/generic/BlockDecoToaster.java new file mode 100644 index 000000000..a11061fa0 --- /dev/null +++ b/src/main/java/com/hbm/blocks/generic/BlockDecoToaster.java @@ -0,0 +1,93 @@ +package com.hbm.blocks.generic; + +import com.hbm.blocks.BlockMulti; +import com.hbm.lib.RefStrings; + +import cpw.mods.fml.client.registry.RenderingRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.IIcon; +import net.minecraft.util.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class BlockDecoToaster extends BlockMulti { + + protected String[] variants = new String[] {"toaster_iron", "toaster_steel", "toaster_wood"}; + @SideOnly(Side.CLIENT) protected IIcon[] icons; + + public BlockDecoToaster(Material mat) { + super(mat); + } + + public static int renderID = RenderingRegistry.getNextAvailableRenderId(); + + @Override + public int getRenderType(){ + return renderID; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + super.registerBlockIcons(reg); + this.icons = new IIcon[variants.length]; + + for(int i = 0; i < variants.length; i++) { + this.icons[i] = reg.registerIcon(RefStrings.MODID + ":" + variants[i]); + } + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + return this.icons[damageDropped(meta)]; + } + + @Override + public int damageDropped(int meta) { + return (Math.abs(meta) % 12) / 4; + } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) { + int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; + int meta = stack.getItemDamage(); + world.setBlockMetadataWithNotify(x, y, z, meta * 4 + i, 2); + } + + @Override + public int getSubCount() { + return 3; + } + + @Override + public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) { + int meta = world.getBlockMetadata(x, y, z); + if(meta % 2 == 0) + this.setBlockBounds(0.25F, 0.0F, 0.375F, 0.75F, 0.325F, 0.625F); + else + this.setBlockBounds(0.375F, 0.0F, 0.25F, 0.625F, 0.325F, 0.75F); + } + + @Override + public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { + this.setBlockBoundsBasedOnState(world, x, y, z); + return AxisAlignedBB.getBoundingBox(x + this.minX, y + this.minY, z + this.minZ, x + this.maxX, y + this.maxY, z + this.maxZ); + } +} diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index a28dc0c35..6ec66cd6a 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -850,6 +850,8 @@ public class ClientProxy extends ServerProxy { RenderingRegistry.registerBlockHandler(new RenderCapacitor()); RenderingRegistry.registerBlockHandler(new RenderPedestal()); RenderingRegistry.registerBlockHandler(new RenderLight()); + RenderingRegistry.registerBlockHandler(new RenderCRT()); + RenderingRegistry.registerBlockHandler(new RenderToaster()); RenderingRegistry.registerBlockHandler(new RenderFoundryBasin()); RenderingRegistry.registerBlockHandler(new RenderFoundryMold()); diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index bdbcb5a77..cbe28fedb 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -215,6 +215,11 @@ public class ModEventHandlerClient { } else if(world.getBlock(mop.blockX, mop.blockY, mop.blockZ) instanceof ILookOverlay) { ((ILookOverlay) world.getBlock(mop.blockX, mop.blockY, mop.blockZ)).printHook(event, world, mop.blockX, mop.blockY, mop.blockZ); } + + List text = new ArrayList(); + text.add("Meta: " + world.getBlockMetadata(mop.blockX, mop.blockY, mop.blockZ)); + ILookOverlay.printGeneric(event, "DEBUG", 0xffff00, 0x4040000, text); + } else if(mop.typeOfHit == mop.typeOfHit.ENTITY) { Entity entity = mop.entityHit; diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 7d8bd7d01..9b53c0e47 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -1472,6 +1472,8 @@ public class ResourceManager { public static final IModelCustom pipe_quad = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/pipe_quad.obj")); public static final IModelCustom pipe_frame = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/pipe_frame.obj")); public static final IModelCustom rtty = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/rtty.obj")); + public static final IModelCustom crt = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/crt.obj")); + public static final IModelCustom toaster = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/toaster.obj")); public static final IModelCustom deco_computer = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/puter.obj")); diff --git a/src/main/java/com/hbm/render/block/RenderBlockDecoModel.java b/src/main/java/com/hbm/render/block/RenderBlockDecoModel.java index 171cba047..d0441fa3a 100644 --- a/src/main/java/com/hbm/render/block/RenderBlockDecoModel.java +++ b/src/main/java/com/hbm/render/block/RenderBlockDecoModel.java @@ -38,7 +38,7 @@ public class RenderBlockDecoModel implements ISimpleBlockRenderingHandler { GL11.glTranslated(0, 0.1D, 0); GL11.glScaled(1.2D, 1.2D, 1.2D); tessellator.startDrawingQuads(); - ObjUtil.renderWithIcon((WavefrontObject) model, iicon, tessellator, modelId, false); + ObjUtil.renderWithIcon((WavefrontObject) model, iicon, tessellator, 0, false); tessellator.draw(); diff --git a/src/main/java/com/hbm/render/block/RenderCRT.java b/src/main/java/com/hbm/render/block/RenderCRT.java new file mode 100644 index 000000000..a048efafc --- /dev/null +++ b/src/main/java/com/hbm/render/block/RenderCRT.java @@ -0,0 +1,83 @@ +package com.hbm.render.block; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.generic.BlockDecoCRT; +import com.hbm.main.ResourceManager; +import com.hbm.render.util.ObjUtil; + +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.client.model.obj.WavefrontObject; + +public class RenderCRT implements ISimpleBlockRenderingHandler { + + @Override + public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { + + GL11.glPushMatrix(); + Tessellator tessellator = Tessellator.instance; + IIcon iicon = block.getIcon(0, metadata * 4); + tessellator.setColorOpaque_F(1, 1, 1); + + if(renderer.hasOverrideBlockTexture()) { + iicon = renderer.overrideBlockTexture; + } + + GL11.glTranslated(0, -0.5, 0); + tessellator.startDrawingQuads(); + ObjUtil.renderWithIcon((WavefrontObject) ResourceManager.crt, iicon, tessellator, (float) Math.PI * -0.5F, false); + tessellator.draw(); + + GL11.glPopMatrix(); + } + + @Override + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { + + Tessellator tessellator = Tessellator.instance; + IIcon iicon = block.getIcon(0, world.getBlockMetadata(x, y, z)); + + int brightness = block.getMixedBrightnessForBlock(world, x, y, z); + tessellator.setBrightness(brightness); + tessellator.setColorOpaque_F(1, 1, 1); + + if(renderer.hasOverrideBlockTexture()) { + iicon = renderer.overrideBlockTexture; + } + + float rotation = 0; + int metaOrig = world.getBlockMetadata(x, y, z); + int meta = metaOrig % 4; + + switch(meta) { + default: rotation = 0.5F * (float) Math.PI; break; + case 1: break; + case 2: rotation = 1.5F * (float) Math.PI; break; + case 3: rotation = (float) Math.PI; break; + } + + tessellator.addTranslation(x + 0.5F, y, z + 0.5F); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.crt, "Monitor", iicon, tessellator, rotation, true); + if(metaOrig >= 8) tessellator.setBrightness(240); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.crt, "Screen", iicon, tessellator, rotation, true); + tessellator.setBrightness(brightness); + tessellator.addTranslation(-x - 0.5F, -y, -z - 0.5F); + + return true; + } + + @Override + public boolean shouldRender3DInInventory(int modelId) { + return true; + } + + @Override + public int getRenderId() { + return BlockDecoCRT.renderID; + } +} diff --git a/src/main/java/com/hbm/render/block/RenderToaster.java b/src/main/java/com/hbm/render/block/RenderToaster.java new file mode 100644 index 000000000..a5938e20c --- /dev/null +++ b/src/main/java/com/hbm/render/block/RenderToaster.java @@ -0,0 +1,80 @@ +package com.hbm.render.block; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.generic.BlockDecoToaster; +import com.hbm.main.ResourceManager; +import com.hbm.render.util.ObjUtil; + +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.client.model.obj.WavefrontObject; + +public class RenderToaster implements ISimpleBlockRenderingHandler { + + @Override + public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { + + GL11.glPushMatrix(); + Tessellator tessellator = Tessellator.instance; + IIcon iicon = block.getIcon(0, metadata * 4); + tessellator.setColorOpaque_F(1, 1, 1); + + if(renderer.hasOverrideBlockTexture()) { + iicon = renderer.overrideBlockTexture; + } + + GL11.glTranslated(0, -0.25, 0); + tessellator.startDrawingQuads(); + ObjUtil.renderWithIcon((WavefrontObject) ResourceManager.toaster, iicon, tessellator, (float) Math.PI * -0.5F, false); + tessellator.draw(); + + GL11.glPopMatrix(); + } + + @Override + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { + + Tessellator tessellator = Tessellator.instance; + IIcon iicon = block.getIcon(0, world.getBlockMetadata(x, y, z)); + + int brightness = block.getMixedBrightnessForBlock(world, x, y, z); + tessellator.setBrightness(brightness); + tessellator.setColorOpaque_F(1, 1, 1); + + if(renderer.hasOverrideBlockTexture()) { + iicon = renderer.overrideBlockTexture; + } + + float rotation = 0; + int metaOrig = world.getBlockMetadata(x, y, z); + int meta = metaOrig % 4; + + switch(meta) { + default: rotation = 0.5F * (float) Math.PI; break; + case 1: break; + case 2: rotation = 1.5F * (float) Math.PI; break; + case 3: rotation = (float) Math.PI; break; + } + + tessellator.addTranslation(x + 0.5F, y, z + 0.5F); + ObjUtil.renderWithIcon((WavefrontObject) ResourceManager.toaster, iicon, tessellator, rotation, true); + tessellator.addTranslation(-x - 0.5F, -y, -z - 0.5F); + + return true; + } + + @Override + public boolean shouldRender3DInInventory(int modelId) { + return true; + } + + @Override + public int getRenderId() { + return BlockDecoToaster.renderID; + } +} diff --git a/src/main/java/com/hbm/render/util/ObjUtil.java b/src/main/java/com/hbm/render/util/ObjUtil.java index fd94f75bd..69bb79457 100644 --- a/src/main/java/com/hbm/render/util/ObjUtil.java +++ b/src/main/java/com/hbm/render/util/ObjUtil.java @@ -131,7 +131,7 @@ public class ObjUtil { // The shoddy way of rendering a tringulated model with a quad // tessellator - if(i % 3 == 2) + if(f.vertices.length == 3 && i % 3 == 2) tes.addVertexWithUV(x, y, z, icon.getInterpolatedU(t.u * 16D), icon.getInterpolatedV(t.v * 16D)); } } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 27a5fadc8..ab40acd89 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -3851,6 +3851,8 @@ tile.crystal_virus.name=Dunkler Kristall tile.deco_aluminium.name=Aluminium-Dekoblock tile.deco_asbestos.name=Asbestdach tile.deco_beryllium.name=Beryllium-Dekoblock +tile.deco_computer.ibm_300pl.name=IBM Personal Computer 300PL +tile.deco_crt.name=Alter Röhrenbildschirm tile.deco_emitter.name=Deko-Lichtemitter tile.deco_lead.name=Blei-Dekoblock tile.deco_rbmk.name=RBMK-Dekoblock @@ -3882,6 +3884,7 @@ tile.deco_pipe_rim_red.name=Rotes Stahlrohr mit Rand tile.deco_pipe_rim_marked.name=Gasrohr mit Rand tile.deco_steel.name=Stahl-Dekoblock tile.deco_titanium.name=Titan-Dekoblock +tile.deco_toaster.name=Kaputter Toaster tile.deco_tungsten.name=Wolfram-Dekoblock tile.decon.name=Spieler-Dekontaminierer tile.depth_brick.name=Tiefenziegel diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 3038841af..a05ca79fe 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -4848,6 +4848,7 @@ tile.deco_aluminium.name=Aluminium Deco Block tile.deco_asbestos.name=Asbestos Roof tile.deco_beryllium.name=Beryllium Deco Block tile.deco_computer.ibm_300pl.name=IBM Personal Computer 300PL +tile.deco_crt.name=Old CRT Screen tile.deco_emitter.name=Deco Light Emitter tile.deco_lead.name=Lead Deco Block tile.deco_rbmk.name=RBMK Deco Block @@ -4879,6 +4880,7 @@ tile.deco_pipe_rim_red.name=Red Steel Pipe (Rimmed) tile.deco_pipe_rim_marked.name=Gas Pipe (Rimmed) tile.deco_steel.name=Steel Deco Block tile.deco_titanium.name=Titanium Deco Block +tile.deco_toaster.name=Broken Toaster tile.deco_tungsten.name=Tungsten Deco Block tile.decon.name=Player Decontaminator tile.depth_brick.name=Depth Bricks diff --git a/src/main/resources/assets/hbm/models/blocks/crt.obj b/src/main/resources/assets/hbm/models/blocks/crt.obj new file mode 100644 index 000000000..402e7d9ed --- /dev/null +++ b/src/main/resources/assets/hbm/models/blocks/crt.obj @@ -0,0 +1,126 @@ +# Blender v2.79 (sub 0) OBJ File: 'crt.blend' +# www.blender.org +o Screen +v 0.437500 0.875000 -0.375000 +v 0.437500 0.875000 0.375000 +v 0.437500 0.125000 -0.375000 +v 0.437500 0.125000 0.375000 +vt 0.437500 0.437500 +vt 0.062500 0.062500 +vt 0.437500 0.062500 +vt 0.062500 0.437500 +vn 1.0000 0.0000 0.0000 +s off +f 1/1/1 4/2/1 3/3/1 +f 1/1/1 2/4/1 4/2/1 +o Monitor +v 0.000000 1.000000 -0.500000 +v 0.000000 1.000000 0.500000 +v 0.000000 0.000000 -0.500000 +v 0.000000 0.000000 0.500000 +v 0.500000 0.000000 0.500000 +v 0.500000 0.000000 -0.500000 +v 0.500000 1.000000 0.500000 +v 0.500000 1.000000 -0.500000 +v 0.500000 0.125000 0.375000 +v 0.500000 0.125000 -0.375000 +v 0.500000 0.875000 0.375000 +v 0.500000 0.875000 -0.375000 +v 0.437500 0.125000 0.375000 +v 0.437500 0.125000 -0.375000 +v 0.437500 0.875000 0.375000 +v 0.437500 0.875000 -0.375000 +v -0.500000 0.250000 0.250000 +v -0.500000 0.250000 -0.250000 +v -0.500000 0.750000 0.250000 +v -0.500000 0.750000 -0.250000 +vt 1.000000 0.000000 +vt 0.500000 0.250000 +vt 0.500000 0.000000 +vt 0.031250 0.062500 +vt 0.062500 0.437500 +vt 0.031250 0.437500 +vt 0.500000 0.500000 +vt 0.437500 0.062500 +vt 0.500000 0.000000 +vt 0.062500 0.062500 +vt 0.000000 0.000000 +vt 0.062500 0.437500 +vt 0.000000 0.500000 +vt 0.437500 0.437500 +vt 0.062500 0.468750 +vt 0.437500 0.437500 +vt 0.437500 0.468750 +vt 0.468750 0.437500 +vt 0.437500 0.062500 +vt 0.468750 0.062500 +vt 0.437500 0.031250 +vt 0.062500 0.062500 +vt 0.062500 0.031250 +vt 1.000000 0.000000 +vt 0.500000 0.250000 +vt 1.000000 0.000000 +vt 0.500000 0.250000 +vt 0.500000 -0.000000 +vt 1.000000 -0.000000 +vt 0.500000 0.250000 +vt 0.500000 0.000000 +vt 0.625000 0.750000 +vt 0.875000 0.500000 +vt 0.875000 0.750000 +vt 1.000000 0.250000 +vt 0.625000 0.500000 +vt 1.000000 0.250000 +vt 0.625000 0.500000 +vt 1.000000 0.250000 +vt 0.625000 0.500000 +vt 1.000000 0.250000 +vt 0.625000 0.500000 +vt 0.875000 0.500000 +vt 0.875000 0.500000 +vt 0.875000 0.500000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn -0.4472 0.0000 -0.8944 +vn -0.4472 -0.8944 0.0000 +vn -0.4472 0.0000 0.8944 +vn -0.4472 0.8944 0.0000 +s off +f 10/5/2 5/6/2 12/7/2 +f 13/8/2 19/9/2 15/10/2 +f 12/11/3 14/12/3 10/13/3 +f 10/13/3 13/14/3 9/15/3 +f 9/15/3 15/16/3 11/17/3 +f 11/17/3 16/18/3 12/11/3 +f 15/19/4 20/20/4 16/21/4 +f 16/22/5 18/23/5 14/24/5 +f 14/25/6 17/26/6 13/27/6 +f 9/28/4 7/29/4 10/13/4 +f 11/30/5 8/31/5 9/32/5 +f 12/33/6 6/34/6 11/35/6 +f 21/36/7 24/37/7 22/38/7 +f 7/39/8 24/40/8 5/6/8 +f 8/41/9 22/42/9 7/29/9 +f 6/43/10 21/44/10 8/31/10 +f 5/45/11 23/46/11 6/34/11 +f 10/5/2 7/39/2 5/6/2 +f 13/8/2 17/26/2 19/9/2 +f 12/11/3 16/18/3 14/12/3 +f 10/13/3 14/12/3 13/14/3 +f 9/15/3 13/14/3 15/16/3 +f 11/17/3 15/16/3 16/18/3 +f 15/19/4 19/9/4 20/20/4 +f 16/22/5 20/20/5 18/23/5 +f 14/25/6 18/23/6 17/26/6 +f 9/28/4 8/41/4 7/29/4 +f 11/30/5 6/43/5 8/31/5 +f 12/33/6 5/45/6 6/34/6 +f 21/36/7 23/46/7 24/37/7 +f 7/39/8 22/47/8 24/40/8 +f 8/41/9 21/48/9 22/42/9 +f 6/43/10 23/49/10 21/44/10 +f 5/45/11 24/37/11 23/46/11 diff --git a/src/main/resources/assets/hbm/models/blocks/toaster.obj b/src/main/resources/assets/hbm/models/blocks/toaster.obj new file mode 100644 index 000000000..f43798c79 --- /dev/null +++ b/src/main/resources/assets/hbm/models/blocks/toaster.obj @@ -0,0 +1,186 @@ +# Blender v2.79 (sub 0) OBJ File: 'toaster.blend' +# www.blender.org +o Plane +v 0.093750 0.312500 -0.125000 +v 0.031250 0.312500 -0.125000 +v 0.093750 0.312500 0.125000 +v 0.031250 0.312500 0.125000 +v -0.125000 0.000000 0.250000 +v 0.125000 0.000000 0.250000 +v -0.125000 0.000000 -0.250000 +v 0.125000 0.000000 -0.250000 +v -0.125000 0.250000 0.250000 +v 0.125000 0.250000 0.250000 +v -0.125000 0.250000 -0.250000 +v 0.125000 0.250000 -0.250000 +v -0.125000 0.312500 0.187500 +v 0.125000 0.312500 0.187500 +v -0.125000 0.312500 -0.187500 +v 0.125000 0.312500 -0.187500 +v -0.031250 0.312500 -0.125000 +v -0.093750 0.312500 -0.125000 +v -0.031250 0.312500 0.125000 +v -0.093750 0.312500 0.125000 +v 0.093750 0.062500 -0.125000 +v 0.031250 0.062500 -0.125000 +v 0.093750 0.062500 0.125000 +v 0.031250 0.062500 0.125000 +v -0.031250 0.062500 0.125000 +v -0.031250 0.062500 -0.125000 +v -0.093750 0.062500 -0.125000 +v -0.093750 0.062500 0.125000 +v -0.093750 0.156250 -0.250000 +v 0.093750 0.156250 -0.250000 +v -0.093750 0.218750 -0.250000 +v 0.093750 0.218750 -0.250000 +v 0.093750 0.156250 -0.312500 +v -0.093750 0.156250 -0.312500 +v 0.093750 0.218750 -0.312500 +v -0.093750 0.218750 -0.312500 +vt 0.750000 0.812500 +vt 0.812500 0.562500 +vt 0.812500 0.812500 +vt 0.500000 0.000000 +vt 0.000000 0.250000 +vt 0.000000 -0.000000 +vt 0.500000 0.812500 +vt 0.437500 0.562500 +vt 0.500000 0.562500 +vt 0.750000 0.812500 +vt 0.812500 0.562500 +vt 0.812500 0.812500 +vt 0.500000 0.250000 +vt 0.062500 0.562500 +vt 0.750000 0.000000 +vt 0.500000 0.250000 +vt 0.500000 0.000000 +vt 1.000000 0.000000 +vt 0.750000 0.250000 +vt 0.750000 0.000000 +vt 0.375000 0.718750 +vt 0.125000 0.656250 +vt 0.375000 0.656250 +vt -0.000000 0.562500 +vt 0.062500 0.812500 +vt -0.000000 0.812500 +vt 0.125000 0.593750 +vt 0.375000 0.593750 +vt 0.125000 0.781250 +vt 0.437500 0.812500 +vt 0.500000 0.250000 +vt 0.062500 0.562500 +vt -0.000000 0.250000 +vt 0.375000 0.781250 +vt 0.500000 0.500000 +vt 0.750000 0.562500 +vt 0.500000 0.562500 +vt 0.500000 0.500000 +vt 0.750000 0.562500 +vt 0.500000 0.562500 +vt 0.750000 0.812500 +vt 0.812500 0.562500 +vt 0.812500 0.812500 +vt 0.500000 0.812500 +vt 0.750000 0.812500 +vt 0.500000 0.812500 +vt 0.500000 0.812500 +vt 0.750000 0.562500 +vt 0.812500 0.562500 +vt 0.812500 0.812500 +vt 0.500000 0.812500 +vt 0.750000 0.562500 +vt 0.750000 0.375000 +vt 0.562500 0.312500 +vt 0.750000 0.312500 +vt 0.812500 0.375000 +vt 0.812500 0.312500 +vt 0.750000 0.250000 +vt 0.562500 0.250000 +vt 0.500000 0.312500 +vt 0.562500 0.375000 +vt 0.500000 0.375000 +vt 0.562500 0.437500 +vt 0.750000 0.437500 +vt 0.500000 0.500000 +vt 0.000000 0.500000 +vt 0.750000 0.250000 +vt 1.000000 0.250000 +vt 0.125000 0.718750 +vt 0.500000 0.500000 +vt 0.437500 0.562500 +vt -0.000000 0.500000 +vt 0.750000 0.500000 +vt 0.750000 0.500000 +vt 0.500000 0.562500 +vt 0.500000 0.562500 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.7071 -0.7071 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.7071 0.7071 +vn -1.0000 0.0000 0.0000 +s off +f 3/1/1 24/2/1 4/3/1 +f 7/4/2 6/5/2 5/6/2 +f 11/7/3 16/8/3 12/9/3 +f 19/10/1 28/11/1 20/12/1 +f 8/13/4 14/14/4 6/5/4 +f 7/15/1 12/16/1 8/17/1 +f 6/18/5 9/19/5 5/20/5 +f 17/21/6 4/22/6 2/23/6 +f 10/24/7 13/25/7 9/26/7 +f 3/27/6 16/8/6 1/28/6 +f 20/29/6 15/30/6 13/25/6 +f 5/31/8 15/32/8 7/33/8 +f 15/30/6 18/34/6 17/21/6 +f 13/25/6 14/14/6 4/22/6 +f 23/35/6 22/36/6 24/37/6 +f 25/38/6 27/39/6 28/40/6 +f 2/41/5 21/42/5 1/43/5 +f 20/44/4 27/39/4 18/45/4 +f 4/46/4 22/36/4 2/41/4 +f 1/47/8 23/48/8 3/1/8 +f 18/45/5 26/49/5 17/50/5 +f 17/51/8 25/52/8 19/10/8 +f 36/53/1 33/54/1 34/55/1 +f 31/56/8 34/55/8 29/57/8 +f 29/58/2 33/54/2 30/59/2 +f 30/60/4 35/61/4 32/62/4 +f 32/63/6 36/53/6 31/64/6 +f 3/1/1 23/48/1 24/2/1 +f 7/4/2 8/13/2 6/5/2 +f 11/7/3 15/30/3 16/8/3 +f 19/10/1 25/52/1 28/11/1 +f 8/13/4 12/65/4 16/8/4 +f 16/8/4 14/14/4 8/13/4 +f 14/14/4 10/66/4 6/5/4 +f 7/15/1 11/67/1 12/16/1 +f 6/18/5 10/68/5 9/19/5 +f 17/21/6 19/69/6 4/22/6 +f 10/24/7 14/14/7 13/25/7 +f 3/27/6 14/14/6 16/8/6 +f 20/29/6 18/34/6 15/30/6 +f 5/31/8 9/70/8 13/71/8 +f 13/71/8 15/32/8 5/31/8 +f 15/32/8 11/72/8 7/33/8 +f 17/21/6 2/23/6 15/30/6 +f 2/23/6 1/28/6 16/8/6 +f 15/30/6 2/23/6 16/8/6 +f 3/27/6 4/22/6 14/14/6 +f 4/22/6 19/69/6 13/25/6 +f 19/69/6 20/29/6 13/25/6 +f 23/35/6 21/73/6 22/36/6 +f 25/38/6 26/74/6 27/39/6 +f 2/41/5 22/36/5 21/42/5 +f 20/44/4 28/40/4 27/39/4 +f 4/46/4 24/37/4 22/36/4 +f 1/47/8 21/75/8 23/48/8 +f 18/45/5 27/39/5 26/49/5 +f 17/51/8 26/76/8 25/52/8 +f 36/53/1 35/61/1 33/54/1 +f 31/56/8 36/53/8 34/55/8 +f 29/58/2 34/55/2 33/54/2 +f 30/60/4 33/54/4 35/61/4 +f 32/63/6 35/61/6 36/53/6 diff --git a/src/main/resources/assets/hbm/textures/blocks/crt_blinking.png b/src/main/resources/assets/hbm/textures/blocks/crt_blinking.png new file mode 100644 index 0000000000000000000000000000000000000000..15cb8c1dca4a01e761354e27eee610a58fcbb99e GIT binary patch literal 397 zcmV;80doF{P)z5EYa>%i=1qI9P$~4VG?0~;Q##_0!#lp29{m{_6Gp=2Zq7^ r0Q&>%53oNF^#^7Vkh^n${Q=+$4)WQ4EeEev00000NkvXXu0mjfg^#eB literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/crt_blinking.png.mcmeta b/src/main/resources/assets/hbm/textures/blocks/crt_blinking.png.mcmeta new file mode 100755 index 000000000..92dd223c8 --- /dev/null +++ b/src/main/resources/assets/hbm/textures/blocks/crt_blinking.png.mcmeta @@ -0,0 +1,5 @@ +{ + "animation": { + "frametime": 10 + } +} diff --git a/src/main/resources/assets/hbm/textures/blocks/crt_broken.png b/src/main/resources/assets/hbm/textures/blocks/crt_broken.png new file mode 100644 index 0000000000000000000000000000000000000000..1e66e452b28419e1ce1639655774ecfcd31515bc GIT binary patch literal 644 zcmV-~0(g zc4+|sz`uUf+Ev4>*#3$D$8l=y$%Y?CKpe-lcKu1`aRgjf;GeF5qUp7X_95Qge%jl& zhscRaef{?1?NPCcJ{kbf&-%Xo6N;vTvrX+g&NfgD6FE`sxQN_>@8fUM=r|7IIEL%G zm`o-WC&zKna-ISO0msgM`|WlWl&z77AcTMr0`vJC-ELQoi{S`^AH39n9D_W%ItT2N&><#M6cIFyWIv6Ax%>>8jX^TnJWSwf~)~%h7ba) z)e6mK6P->6%#77)1psI^n;4JBU}khW_Xo;3voHEe0fWH+ilRVORitTJ`Iwo}@Ar`; z3BoW$*L}7(u%hXuir*a(-d(W%ku!Z>wVXC!ORGP z0R0y)&q}&WsSB7H%jFWLX@ZDgnx?G&*=&a8a(VGCsGI|aVZir&Se6Cf_hA?YvMhsT zS(r|z7>!1yE_f(%3vAm)6h(-l2ms_g2!hgh`~3Wp0u)Wh&8yeAxlquP1mr|_f3-b- ewnIq&Gx-g7lQRQMt!A#;R0RC8Xp*viCVco~2SAB~rUo z8T$}r$pQu29V(|bITuU_8OkSFaA$n}efD8sU|`_C<8>YI?%`3|`g|7P{dH^1$+{K* z0OBhn{iE^Z$afY2VHlGBeIfc0kftf=53XLFK3|*!M7Pg?CZOr+)we1Ozh~fT z<|Lpie9DRs7& z_$)9^eAU+RqIfQOo?*9tb5b8o7vOnDUa?J)oSR!ft(@{xf!Z`t7TsjPmfkuWgl zsJ&M9xiQMnn*n;cc|H7_PA($}G)YpiaJ0s#7o zpW88{(qPj>|FLOM?Dnuk(eEy93EtmcCkb3#-vAwf-0a)FZ55mV5kaZEEn$qwH%%bh z7iI<#K?pJW5D}RDO*SR_Fvg|K%x;1)n7Jo#3OxZK#xKZFU{3bkSWh5_*b;= zes`HH5LQ4GMOIu4OXLe!YhmqpMcaPiKyzTz^!GqAC?aqQJ%QBVIaQi1um(;ATtV;%D*$%Sp$XL05>o00000NkvXXu0mjfXLGCX literal 0 HcmV?d00001