diff --git a/src/main/java/com/hbm/blocks/BlockEnums.java b/src/main/java/com/hbm/blocks/BlockEnums.java index 6bb64b079..d78b45671 100644 --- a/src/main/java/com/hbm/blocks/BlockEnums.java +++ b/src/main/java/com/hbm/blocks/BlockEnums.java @@ -58,4 +58,10 @@ public class BlockEnums { GREEN, STEEL } + + public static enum LightType { + INCANDESCENT, + FLUORESCENT, + HALOGEN + } } diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index b2d396730..b4d5d29e6 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -335,7 +335,9 @@ public class ModBlocks { public static Block lantern; public static Block lantern_behemoth; - public static Block spotlight; + public static Block spotlight_incandescent; + public static Block spotlight_fluoro; + public static Block spotlight_halogen; public static Block spotlight_beam; public static Block reinforced_stone; @@ -1563,7 +1565,9 @@ public class ModBlocks { lantern = new BlockLantern().setBlockName("lantern").setStepSound(Block.soundTypeMetal).setCreativeTab(MainRegistry.blockTab).setLightLevel(1F).setHardness(3.0F).setBlockTextureName(RefStrings.MODID + ":block_steel"); lantern_behemoth = new BlockLanternBehemoth().setBlockName("lantern_behemoth").setStepSound(Block.soundTypeMetal).setCreativeTab(null).setHardness(3.0F).setBlockTextureName(RefStrings.MODID + ":block_rust"); - spotlight = new Spotlight(Material.iron, 8).setBlockName("spotlight").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":reinforced_light"); + spotlight_incandescent = new Spotlight(Material.iron, 2, LightType.INCANDESCENT).setBlockName("spotlight_incandescent").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":cage_lamp"); + spotlight_fluoro = new SpotlightModular(Material.iron, 8, LightType.FLUORESCENT).setBlockName("spotlight_fluoro").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":fluorescent_lamp"); + spotlight_halogen = new Spotlight(Material.iron, 32, LightType.HALOGEN).setBlockName("spotlight_halogen").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":flood_lamp"); spotlight_beam = new SpotlightBeam().setBlockName("spotlight_beam"); reinforced_stone = new BlockGeneric(Material.rock).setBlockName("reinforced_stone").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(100.0F).setBlockTextureName(RefStrings.MODID + ":reinforced_stone"); @@ -2744,7 +2748,9 @@ public class ModBlocks { GameRegistry.registerBlock(lamp_demon, lamp_demon.getUnlocalizedName()); GameRegistry.registerBlock(lantern, lantern.getUnlocalizedName()); GameRegistry.registerBlock(lantern_behemoth, lantern_behemoth.getUnlocalizedName()); - GameRegistry.registerBlock(spotlight, spotlight.getUnlocalizedName()); + GameRegistry.registerBlock(spotlight_incandescent, spotlight_incandescent.getUnlocalizedName()); + GameRegistry.registerBlock(spotlight_fluoro, spotlight_fluoro.getUnlocalizedName()); + GameRegistry.registerBlock(spotlight_halogen, spotlight_halogen.getUnlocalizedName()); GameRegistry.registerBlock(spotlight_beam, spotlight_beam.getUnlocalizedName()); //Reinforced Blocks diff --git a/src/main/java/com/hbm/blocks/machine/Spotlight.java b/src/main/java/com/hbm/blocks/machine/Spotlight.java index 12f12a57e..f722c7ff4 100644 --- a/src/main/java/com/hbm/blocks/machine/Spotlight.java +++ b/src/main/java/com/hbm/blocks/machine/Spotlight.java @@ -1,23 +1,101 @@ package com.hbm.blocks.machine; import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.BlockEnums.LightType; +import com.hbm.main.ResourceManager; +import cpw.mods.fml.client.registry.RenderingRegistry; import net.minecraft.block.Block; +import net.minecraft.block.BlockSlab; import net.minecraft.block.material.Material; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import net.minecraftforge.client.model.obj.WavefrontObject; import net.minecraftforge.common.util.ForgeDirection; public class Spotlight extends Block { public int beamLength; + public LightType type; - public Spotlight(Material mat, int beamLength) { + public Spotlight(Material mat, int beamLength, LightType type) { super(mat); setLightLevel(1.0F); this.beamLength = beamLength; + this.type = type; } + public static int renderID = RenderingRegistry.getNextAvailableRenderId(); + + @Override + public int getRenderType() { + return renderID; + } + + public WavefrontObject getModel() { + switch (type) { + case FLUORESCENT: return (WavefrontObject) ResourceManager.fluorescent_lamp; + case HALOGEN: return (WavefrontObject) ResourceManager.flood_lamp; + default: return (WavefrontObject) ResourceManager.cage_lamp; + } + } + + public String getPartName(int connectionCount) { + switch (type) { + case HALOGEN: return "FloodLamp"; + default: return "CageLamp"; + } + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + public AxisAlignedBB getCollisionBoundingBoxFromPool(World p_149668_1_, int p_149668_2_, int p_149668_3_, int p_149668_4_) { + return null; + } + + @Override + public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) { + ForgeDirection dir = getDirection(world, x, y, z); + float[] bounds = swizzleBounds(dir); + float[] offset = new float[] { 0.5F - dir.offsetX * (0.5F - bounds[0]), 0.5F - dir.offsetY * (0.5F - bounds[1]), 0.5F - dir.offsetZ * (0.5F - bounds[2]) }; + + setBlockBounds(offset[0] - bounds[0], offset[1] - bounds[1], offset[2] - bounds[2], offset[0] + bounds[0], offset[1] + bounds[1], offset[2] + bounds[2]); + } + + private float[] swizzleBounds(ForgeDirection dir) { + float[] bounds = getBounds(); + switch (dir) { + case EAST: + case WEST: + return new float[] { bounds[2], bounds[1], bounds[0] }; + case UP: + case DOWN: + return new float[] { bounds[1], bounds[2], bounds[0] }; + default: + return bounds; + } + } + + // Returns an xyz (half-)size for a given object type + private float[] getBounds() { + switch (type) { + case FLUORESCENT: return new float[] {0.5F, 0.5F, 0.1F}; + case HALOGEN: return new float[] {0.35F, 0.25F, 0.2F}; + default: return new float[] {0.25F, 0.2F, 0.15F}; + } + } + @Override public int onBlockPlaced(World world, int x, int y, int z, int side, float hx, float hy, float hz, int initData) { return side << 1; @@ -25,6 +103,7 @@ public class Spotlight extends Block { @Override public void onBlockAdded(World world, int x, int y, int z) { + if (world.isRemote) return; updateBeam(world, x, y, z); } @@ -43,22 +122,55 @@ public class Spotlight extends Block { public void onNeighborBlockChange(World world, int x, int y, int z, Block neighborBlock) { if (world.isRemote) return; if (neighborBlock instanceof SpotlightBeam) return; + + ForgeDirection dir = getDirection(world, x, y, z); + + if (!canPlace(world, x, y, z, dir)) { + dropBlockAsItem(world, x, y, z, 0, 0); + world.setBlockToAir(x, y, z); + return; + } + updateBeam(world, x, y, z); } + + @Override + public boolean canPlaceBlockOnSide(World world, int x, int y, int z, int side) { + if(!super.canPlaceBlockOnSide(world, x, y, z, side)) return false; + + ForgeDirection dir = ForgeDirection.getOrientation(side); + + return canPlace(world, x, y, z, dir); + } - public void updateBeam(World world, int x, int y, int z) { - if (world.isRemote) return; + // BlockSlab doesn't actually properly return isSideSolid, + // probably because MOJANK thought this would only ever be used for torches, + // which can't be placed on ceilings... + private boolean canPlace(World world, int x, int y, int z, ForgeDirection dir) { + x -= dir.offsetX; + y -= dir.offsetY; + z -= dir.offsetZ; + Block block = world.getBlock(x, y, z); + if (block instanceof BlockSlab) { + int meta = world.getBlockMetadata(x, y, z); + return dir == ((meta & 8) == 8 ? ForgeDirection.UP : ForgeDirection.DOWN) || block.func_149730_j(); + } + + return block.isSideSolid(world, x, y, z, dir); + } + + private void updateBeam(World world, int x, int y, int z) { ForgeDirection dir = getDirection(world, x, y, z); propagateBeam(world, x, y, z, dir, beamLength); } - private ForgeDirection getDirection(World world, int x, int y, int z) { + public ForgeDirection getDirection(IBlockAccess world, int x, int y, int z) { int metadata = world.getBlockMetadata(x, y, z); return getDirection(metadata); } - private ForgeDirection getDirection(int metadata) { + public ForgeDirection getDirection(int metadata) { return ForgeDirection.getOrientation(metadata >> 1); } diff --git a/src/main/java/com/hbm/blocks/machine/SpotlightModular.java b/src/main/java/com/hbm/blocks/machine/SpotlightModular.java new file mode 100644 index 000000000..c5244d242 --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/SpotlightModular.java @@ -0,0 +1,25 @@ +package com.hbm.blocks.machine; + +import com.hbm.blocks.BlockEnums.LightType; + +import net.minecraft.block.material.Material; +import net.minecraft.world.IBlockAccess; + +public class SpotlightModular extends Spotlight { + + public SpotlightModular(Material mat, int beamLength, LightType type) { + super(mat, beamLength, type); + } + + @Override + public String getPartName(int connectionCount) { + if (connectionCount == 0) return "FluoroSingle"; + if (connectionCount == 1) return "FluoroCap"; + return "FluoroMid"; + } + + public boolean canConnectTo(IBlockAccess world, int x, int y, int z) { + return world.getBlock(x, y, z) == this; + } + +} diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 728f13789..10e30be35 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -852,6 +852,7 @@ public class ClientProxy extends ServerProxy { RenderingRegistry.registerBlockHandler(new RenderSplitter()); RenderingRegistry.registerBlockHandler(new RenderCapacitor()); RenderingRegistry.registerBlockHandler(new RenderPedestal()); + RenderingRegistry.registerBlockHandler(new RenderLight()); RenderingRegistry.registerBlockHandler(new RenderFoundryBasin()); RenderingRegistry.registerBlockHandler(new RenderFoundryMold()); diff --git a/src/main/java/com/hbm/main/NEIConfig.java b/src/main/java/com/hbm/main/NEIConfig.java index 11cdcbcb9..45c3fdb6e 100644 --- a/src/main/java/com/hbm/main/NEIConfig.java +++ b/src/main/java/com/hbm/main/NEIConfig.java @@ -130,6 +130,8 @@ public class NEIConfig implements IConfigureNEI { API.hideItem(new ItemStack(ModBlocks.pink_slab)); API.hideItem(new ItemStack(ModBlocks.pink_double_slab)); API.hideItem(new ItemStack(ModBlocks.pink_stairs)); + + API.hideItem(new ItemStack(ModBlocks.spotlight_beam)); API.registerHighlightIdentifier(ModBlocks.ore_random, new IHighlightHandler() { diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 89bf64e26..0c0b51f90 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -358,8 +358,11 @@ public class ResourceManager { public static WavefrontObjDisplayList silo_hatch = new WavefrontObjDisplayList(new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/doors/silo_hatch.obj"))); - //Lantern + //Lights public static final IModelCustom lantern = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/trinkets/lantern.obj")); + public static final IModelCustom cage_lamp = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/lights/cage_lamp.obj")); + public static final IModelCustom fluorescent_lamp = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/lights/fluorescent_lamp.obj")); + public static final IModelCustom flood_lamp = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/lights/flood_lamp.obj")); //Tesla Coil public static final IModelCustom tesla = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/tesla.obj")); diff --git a/src/main/java/com/hbm/render/block/RenderLight.java b/src/main/java/com/hbm/render/block/RenderLight.java new file mode 100644 index 000000000..4c1ce369a --- /dev/null +++ b/src/main/java/com/hbm/render/block/RenderLight.java @@ -0,0 +1,97 @@ +package com.hbm.render.block; + +import com.hbm.blocks.machine.Spotlight; +import com.hbm.blocks.machine.SpotlightModular; +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.world.IBlockAccess; +import net.minecraftforge.common.util.ForgeDirection; + +public class RenderLight implements ISimpleBlockRenderingHandler { + + @Override + public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { + + } + + @Override + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { + if (!(block instanceof Spotlight)) return true; + Spotlight spot = (Spotlight) block; + + Tessellator tessellator = Tessellator.instance; + ForgeDirection dir = spot.getDirection(world, x, y, z); + + tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z)); + tessellator.setColorOpaque_F(1, 1, 1); + + float ox = 0.5F - dir.offsetX * 0.5F, oy = 0.5F - dir.offsetY * 0.5F, oz = 0.5F - dir.offsetZ * 0.5F; + float rot = ObjUtil.getYaw(dir); + float pitch = ObjUtil.getPitch(dir); + float roll = 0; + + int connectionCount = 0; + if (spot instanceof SpotlightModular) { + ForgeDirection connectionDirection = null; + SpotlightModular modular = (SpotlightModular) spot; + + // Searching through only adjacent blocks is simple, iterate through all directions ignoring the root and its opposite + // Once we have found any valid connection, we'll only connect in that one axis + for (ForgeDirection availableDir : ForgeDirection.VALID_DIRECTIONS) { + if (availableDir == dir || availableDir == dir.getOpposite()) continue; + if (modular.canConnectTo(world, x + availableDir.offsetX, y + availableDir.offsetY, z + availableDir.offsetZ)) { + connectionCount++; + connectionDirection = availableDir; + + break; + } + } + + if (connectionDirection != null) { + // Check if we're sandwiched between two lights + if (modular.canConnectTo(world, x - connectionDirection.offsetX, y - connectionDirection.offsetY, z - connectionDirection.offsetZ)) { + connectionCount++; + } + + roll = getRotation(connectionDirection, dir); + } + } + + tessellator.addTranslation(x + ox, y + oy, z + oz); + ObjUtil.renderPartWithIcon(spot.getModel(), spot.getPartName(connectionCount), block.getIcon(0, 0), tessellator, rot, pitch, roll, false); + tessellator.addTranslation(-x - ox, -y - oy, -z - oz); + + return true; + } + + @Override + public boolean shouldRender3DInInventory(int modelId) { + return false; + } + + @Override + public int getRenderId() { + return Spotlight.renderID; + } + + // This is very ad-hoc, which isn't ideal + private float getRotation(ForgeDirection dir, ForgeDirection axis) { + float flipX = axis == ForgeDirection.DOWN || axis == ForgeDirection.NORTH || axis == ForgeDirection.WEST ? -0.5F : 0.5F; + float addX = axis == ForgeDirection.NORTH || axis == ForgeDirection.SOUTH ? -0.5F : 0; + boolean flipNS = axis == ForgeDirection.WEST; + switch (dir) { + case NORTH: return flipNS ? (float)Math.PI : 0; + case SOUTH: return !flipNS ? (float)Math.PI : 0; + case EAST: return (float)Math.PI * (flipX + addX); + case WEST: return (float)Math.PI * (-flipX + addX); + case UP: return (float)Math.PI * -0.5F; + case DOWN: return (float)Math.PI * 0.5F; + default: return 0; + } + } + +} diff --git a/src/main/java/com/hbm/render/util/ObjUtil.java b/src/main/java/com/hbm/render/util/ObjUtil.java index 9385fa1e8..fd94f75bd 100644 --- a/src/main/java/com/hbm/render/util/ObjUtil.java +++ b/src/main/java/com/hbm/render/util/ObjUtil.java @@ -8,14 +8,19 @@ import net.minecraftforge.client.model.obj.GroupObject; import net.minecraftforge.client.model.obj.TextureCoordinate; import net.minecraftforge.client.model.obj.Vertex; import net.minecraftforge.client.model.obj.WavefrontObject; +import net.minecraftforge.common.util.ForgeDirection; public class ObjUtil { public static void renderWithIcon(WavefrontObject model, IIcon icon, Tessellator tes, float rot, boolean shadow) { - renderWithIcon(model, icon, tes, rot, 0, shadow); + renderWithIcon(model, icon, tes, rot, 0, 0, shadow); } public static void renderWithIcon(WavefrontObject model, IIcon icon, Tessellator tes, float rot, float pitch, boolean shadow) { + renderWithIcon(model, icon, tes, rot, pitch, 0, shadow); + } + + public static void renderWithIcon(WavefrontObject model, IIcon icon, Tessellator tes, float rot, float pitch, float roll, boolean shadow) { for(GroupObject go : model.groupObjects) { for(Face f : go.faces) { @@ -41,6 +46,7 @@ public class ObjUtil { Vertex v = f.vertices[i]; Vec3 vec = Vec3.createVectorHelper(v.x, v.y, v.z); + vec.rotateAroundX(roll); vec.rotateAroundZ(pitch); vec.rotateAroundY(rot); @@ -61,10 +67,14 @@ public class ObjUtil { } public static void renderPartWithIcon(WavefrontObject model, String name, IIcon icon, Tessellator tes, float rot, boolean shadow) { - renderPartWithIcon(model, name, icon, tes, rot, 0, shadow); + renderPartWithIcon(model, name, icon, tes, rot, 0, 0, shadow); } public static void renderPartWithIcon(WavefrontObject model, String name, IIcon icon, Tessellator tes, float rot, float pitch, boolean shadow) { + renderPartWithIcon(model, name, icon, tes, rot, pitch, 0, shadow); + } + + public static void renderPartWithIcon(WavefrontObject model, String name, IIcon icon, Tessellator tes, float rot, float pitch, float roll, boolean shadow) { GroupObject go = null; @@ -108,6 +118,7 @@ public class ObjUtil { Vertex v = f.vertices[i]; Vec3 vec = Vec3.createVectorHelper(v.x, v.y, v.z); + vec.rotateAroundX(roll); vec.rotateAroundZ(pitch); vec.rotateAroundY(rot); @@ -148,4 +159,20 @@ public class ObjUtil { public static void clearColor() { hasColor = false; } + + // Both methods assume model is facing towards +X (EAST) + // Why not +Z (NORTH)? Pitch doesn't rotate as you would expect in that case using the (current) draw methods + public static float getPitch(ForgeDirection dir) { + if (dir == ForgeDirection.UP) return (float)Math.PI * -0.5F; + if (dir == ForgeDirection.DOWN) return (float)Math.PI * 0.5F; + return 0; + } + + public static float getYaw(ForgeDirection dir) { + if (dir == ForgeDirection.NORTH) return (float)Math.PI * 0.5f;; + if (dir == ForgeDirection.SOUTH) return (float)Math.PI * -0.5f; + if (dir == ForgeDirection.WEST) return (float)Math.PI; + return 0; + } + } diff --git a/src/main/resources/assets/hbm/models/lights/cage_lamp.obj b/src/main/resources/assets/hbm/models/lights/cage_lamp.obj new file mode 100644 index 000000000..74169d283 --- /dev/null +++ b/src/main/resources/assets/hbm/models/lights/cage_lamp.obj @@ -0,0 +1,571 @@ +# Blender 4.0.1 +# www.blender.org +o CageLamp +v 0.174699 0.050284 -0.170405 +v 0.174699 0.037785 -0.170405 +v 0.187198 0.050284 -0.175448 +v 0.187198 0.037785 -0.175448 +v -0.002109 0.145255 -0.201498 +v -0.002109 0.101109 -0.243600 +v -0.002109 -0.103152 -0.243600 +v -0.002109 -0.145255 -0.201498 +v 0.056171 0.061436 -0.200955 +v 0.056171 0.094421 -0.170760 +v 0.056171 -0.093758 -0.171142 +v 0.056171 -0.063790 -0.201110 +v -0.002109 0.103152 0.243600 +v -0.002109 0.145255 0.201498 +v -0.002109 -0.145255 0.201498 +v -0.002109 -0.103152 0.243600 +v 0.056171 0.094258 0.170780 +v 0.056171 0.064290 0.200748 +v 0.056171 -0.063790 0.200748 +v 0.056171 -0.093758 0.170780 +v 0.009739 0.097808 -0.169350 +v 0.009739 0.063030 -0.204128 +v 0.174699 0.050284 0.170405 +v 0.009739 -0.063030 -0.204128 +v 0.009739 -0.097808 -0.169350 +v 0.174699 0.037785 0.170405 +v 0.125944 0.063030 -0.204128 +v 0.124890 0.095332 -0.169350 +v 0.169823 0.063030 -0.169350 +v 0.125944 -0.097808 -0.169350 +v 0.125944 -0.063030 -0.204128 +v 0.169823 -0.063030 -0.169350 +v 0.009739 0.063030 0.204128 +v 0.009739 0.097808 0.169350 +v 0.187198 0.050284 0.175448 +v 0.009739 -0.097808 0.169350 +v 0.009739 -0.063030 0.204128 +v 0.187198 0.037785 0.175448 +v 0.125944 0.063030 0.204128 +v 0.169823 0.063030 0.169350 +v 0.125944 0.097808 0.169350 +v 0.169823 -0.063030 0.169350 +v 0.125944 -0.063030 0.204128 +v 0.125944 -0.097808 0.169350 +v 0.137281 0.037785 -0.222204 +v 0.131756 0.037785 -0.209752 +v 0.131756 0.050284 -0.209752 +v 0.131756 0.050284 0.209752 +v 0.131756 0.037785 0.209752 +v 0.137281 0.037785 0.222204 +v 0.137281 0.050284 0.222204 +v 0.137281 0.050284 -0.222204 +v 0.053429 0.037785 -0.229540 +v 0.052340 0.037785 -0.217088 +v 0.052340 0.050284 -0.217088 +v 0.052340 0.050284 0.217088 +v 0.052340 0.037785 0.217088 +v 0.053429 0.037785 0.229540 +v 0.053429 0.050284 0.229540 +v 0.053429 0.050284 -0.229540 +v 0.174699 -0.037801 -0.170405 +v 0.174699 -0.050300 -0.170405 +v 0.187198 -0.037801 -0.175448 +v 0.187198 -0.050300 -0.175448 +v 0.174699 -0.037801 0.170405 +v 0.174699 -0.050300 0.170405 +v 0.187198 -0.037801 0.175448 +v 0.187198 -0.050300 0.175448 +v 0.137281 -0.050300 -0.222204 +v 0.131756 -0.050300 -0.209752 +v 0.131756 -0.037801 -0.209752 +v 0.131756 -0.037801 0.209752 +v 0.131756 -0.050300 0.209752 +v 0.137281 -0.050300 0.222204 +v 0.137281 -0.037801 0.222204 +v 0.137281 -0.037801 -0.222204 +v 0.053429 -0.050300 -0.229540 +v 0.052340 -0.050300 -0.217088 +v 0.052340 -0.037801 -0.217088 +v 0.052340 -0.037801 0.217088 +v 0.052340 -0.050300 0.217088 +v 0.053429 -0.050300 0.229540 +v 0.053429 -0.037801 0.229540 +v 0.053429 -0.037801 -0.229540 +v 0.056203 -0.116057 -0.126340 +v 0.056203 0.116108 -0.126340 +v 0.056203 0.116108 -0.113840 +v 0.055114 0.106003 -0.113840 +v 0.055114 0.106003 -0.126340 +v 0.055114 -0.105546 -0.126340 +v 0.055114 -0.105546 -0.113840 +v 0.056203 -0.116057 -0.113840 +v 0.140055 -0.109785 -0.126340 +v 0.140055 0.111267 -0.126340 +v 0.140055 0.111267 -0.113840 +v 0.136242 0.100805 -0.113840 +v 0.136242 0.100805 -0.126340 +v 0.137912 -0.099557 -0.126340 +v 0.137912 -0.099557 -0.113840 +v 0.140055 -0.109785 -0.113840 +v 0.189972 0.072795 -0.113840 +v 0.189972 0.072795 -0.126340 +v 0.177473 0.064705 -0.113840 +v 0.177473 0.064705 -0.126340 +v 0.189972 -0.069577 -0.113840 +v 0.189972 -0.069577 -0.126340 +v 0.177473 -0.063223 -0.113840 +v 0.177473 -0.063223 -0.126340 +v 0.177473 -0.063223 0.113750 +v 0.177473 -0.063223 0.126250 +v 0.189972 -0.069577 0.113750 +v 0.189972 -0.069577 0.126250 +v 0.177473 0.064705 0.113750 +v 0.177473 0.064705 0.126250 +v 0.189972 0.072795 0.113750 +v 0.189972 0.072795 0.126250 +v 0.140055 -0.109785 0.126250 +v 0.137912 -0.099557 0.126250 +v 0.137912 -0.099557 0.113750 +v 0.136242 0.100805 0.113750 +v 0.136242 0.100805 0.126250 +v 0.140055 0.111267 0.126250 +v 0.140055 0.111267 0.113750 +v 0.140055 -0.109785 0.113750 +v 0.056203 -0.116057 0.126250 +v 0.055114 -0.105546 0.126250 +v 0.055114 -0.105546 0.113750 +v 0.055114 0.106003 0.113750 +v 0.055114 0.106003 0.126250 +v 0.056203 0.116108 0.126250 +v 0.056203 0.116108 0.113750 +v 0.056203 -0.116057 0.113750 +v 0.177473 -0.063223 -0.006231 +v 0.177473 -0.063223 0.006268 +v 0.189972 -0.069577 -0.006231 +v 0.189972 -0.069577 0.006268 +v 0.177473 0.064705 -0.006231 +v 0.177473 0.064705 0.006268 +v 0.189972 0.072795 -0.006231 +v 0.189972 0.072795 0.006268 +v 0.140055 -0.109785 0.006268 +v 0.137912 -0.099557 0.006268 +v 0.137912 -0.099557 -0.006231 +v 0.136242 0.100805 -0.006231 +v 0.136242 0.100805 0.006268 +v 0.140055 0.111267 0.006268 +v 0.140055 0.111267 -0.006231 +v 0.140055 -0.109785 -0.006231 +v 0.056203 -0.116057 0.006268 +v 0.055114 -0.105546 0.006268 +v 0.055114 -0.105546 -0.006231 +v 0.055114 0.106003 -0.006231 +v 0.055114 0.106003 0.006268 +v 0.056203 0.116108 0.006268 +v 0.056203 0.116108 -0.006231 +v 0.056203 -0.116057 -0.006231 +v 0.056171 -0.145255 0.201498 +v 0.056171 -0.103152 0.243600 +v 0.056171 0.145255 -0.201498 +v 0.056171 0.099913 -0.243600 +v 0.056171 0.103152 0.243600 +v 0.056171 0.145255 0.201498 +v 0.056171 -0.103152 -0.243600 +v 0.056171 -0.145255 -0.201498 +v -0.002109 0.145255 0.000000 +v 0.056171 0.145255 0.000000 +v 0.056171 0.094339 0.000010 +v -0.002109 -0.145255 0.000000 +v 0.056171 -0.145255 0.000000 +v 0.056171 -0.093758 -0.000181 +vn -0.0000 -1.0000 -0.0000 +vn -0.0000 -0.0000 1.0000 +vn -0.0000 1.0000 -0.0000 +vn -0.0000 -0.0000 -1.0000 +vn -0.0000 -0.7071 0.7071 +vn -0.0000 0.6902 -0.7237 +vn -0.0000 0.7071 0.7071 +vn -0.0000 -0.7071 -0.7071 +vn 1.0000 -0.0000 -0.0000 +vn 0.4700 0.6538 -0.5930 +vn 0.4889 -0.6168 -0.6168 +vn -1.0000 -0.0000 -0.0000 +vn 0.4889 0.6168 0.6168 +vn 0.4889 -0.6168 0.6168 +vn 0.6212 -0.0000 0.7837 +vn 0.0152 0.7070 -0.7070 +vn 0.5837 0.8120 -0.0000 +vn 0.6212 -0.7837 -0.0000 +vn 0.6212 -0.0000 -0.7837 +vn 0.0215 0.9998 -0.0000 +vn 0.0872 -0.0000 -0.9962 +vn 0.6836 -0.0000 0.7298 +vn 0.6836 -0.0000 -0.7298 +vn -0.6756 -0.0000 0.7373 +vn -0.6756 -0.0000 -0.7373 +vn 0.0872 -0.0000 0.9962 +vn -0.0920 -0.0000 0.9958 +vn -0.0920 -0.0000 -0.9958 +vn -0.0639 -0.9980 -0.0000 +vn -0.0721 0.9974 -0.0000 +vn 0.0576 0.9983 -0.0000 +vn -0.6587 -0.7524 -0.0000 +vn -0.6764 0.7365 -0.0000 +vn 0.6273 -0.7788 -0.0000 +vn 0.6105 0.7921 -0.0000 +vn 0.0746 -0.9972 -0.0000 +vn 0.0140 0.6804 -0.7327 +vn -0.0000 0.7327 -0.6805 +vn 0.6211 0.7837 -0.0077 +vn -0.0000 1.0000 -0.0073 +vt 0.250000 0.625000 +vt 0.375000 0.562500 +vt 0.375000 0.625000 +vt 0.187500 0.562500 +vt 0.062500 0.625000 +vt 0.062500 0.562500 +vt 0.187500 0.625000 +vt 0.000286 0.562500 +vt 0.000000 0.625000 +vt 0.000000 0.562500 +vt 0.250000 0.562500 +vt 1.000000 0.250000 +vt 0.812500 0.750000 +vt 1.000000 0.750000 +vt 0.000000 0.687500 +vt 0.500000 0.750000 +vt 0.000000 0.750000 +vt 0.750000 0.812500 +vt 0.562500 1.000000 +vt 0.562500 0.812500 +vt 0.750000 0.250000 +vt 0.562500 0.750000 +vt 0.562500 0.250000 +vt 0.750000 0.000000 +vt 0.562500 0.187500 +vt 0.562500 0.000000 +vt 0.500000 0.687500 +vt 0.750000 0.937500 +vt 0.812500 0.937500 +vt 0.812500 1.000000 +vt 0.875000 0.937500 +vt 0.500000 0.625000 +vt 0.000000 0.750000 +vt 0.250000 0.687500 +vt 0.250000 0.750000 +vt 0.875000 0.812500 +vt 0.875000 0.750000 +vt 0.937500 0.812500 +vt 0.937500 1.000000 +vt 0.937500 0.937500 +vt 1.000000 0.937500 +vt 0.750000 0.750000 +vt 0.812500 0.250000 +vt 0.937500 0.750000 +vt 0.500000 0.250000 +vt 0.500000 0.812500 +vt 0.000000 0.812500 +vt 0.750000 0.187500 +vt 0.250000 0.812500 +vt 0.000000 0.687500 +vt 0.250000 0.937500 +vt 0.500000 1.000000 +vt 0.250000 1.000000 +vt 0.500000 0.875000 +vt 0.250000 0.875000 +vt 0.000000 1.000000 +vt 0.000000 0.937500 +vt 0.500000 0.937500 +vt 0.000000 0.875000 +vt 0.291985 0.089153 +vt 0.415266 0.073249 +vt 0.343988 0.001971 +vt 0.293149 0.410977 +vt 0.416463 0.420276 +vt 0.345186 0.497037 +vt 0.291985 0.407455 +vt 0.415266 0.422512 +vt 0.342719 0.356721 +vt 0.293796 0.092400 +vt 0.416463 0.076496 +vt 0.344530 0.143134 +vt 0.344267 0.355136 +vt 0.004061 0.497037 +vt 0.004044 0.410840 +vt 0.002863 0.001971 +vt 0.002557 0.089153 +vt 0.342719 0.139887 +vt 0.002863 0.493790 +vt 0.343988 0.493790 +vt 0.500000 0.562500 +vt 0.004061 0.005218 +vt 0.345186 0.005218 +vt 0.750000 1.000000 +vt 0.875000 1.000000 +vt -0.000000 0.687500 +vt 0.002880 0.407592 +vt 0.004367 0.092400 +s 0 +f 8/1/1 169/2/1 168/3/1 +f 161/4/2 16/5/2 158/6/2 +f 14/1/3 166/2/3 165/3/3 +f 7/7/4 160/6/4 163/4/4 +f 157/8/5 16/5/5 15/9/5 +f 159/10/6 6/5/6 5/9/6 +f 14/1/7 161/4/7 162/11/7 +f 8/1/8 163/4/8 164/11/8 +f 25/12/1 44/13/1 36/14/1 +f 1/15/3 35/16/3 3/17/3 +f 39/18/2 37/19/2 43/20/2 +f 29/21/9 42/22/9 32/23/9 +f 22/24/4 31/25/4 24/26/4 +f 2/17/1 38/27/1 26/16/1 +f 27/28/10 28/29/10 29/30/10 +f 30/29/11 31/31/11 32/30/11 +f 23/27/12 2/9/12 26/32/12 +f 1/33/3 52/34/3 47/35/3 +f 39/36/13 40/37/13 41/38/13 +f 42/39/14 43/40/14 44/41/14 +f 40/42/15 43/20/15 42/22/15 +f 28/29/16 22/42/16 21/13/16 +f 28/43/17 40/42/17 29/21/17 +f 44/41/5 37/44/5 36/14/5 +f 26/17/1 50/34/1 49/35/1 +f 30/45/18 42/22/18 44/16/18 +f 3/17/9 38/46/9 4/47/9 +f 34/39/7 39/36/7 41/38/7 +f 32/23/19 27/48/19 29/21/19 +f 25/13/8 31/31/8 30/29/8 +f 34/14/20 28/43/20 21/12/20 +f 45/49/21 60/17/21 52/35/21 +f 47/35/3 60/27/3 55/16/3 +f 35/17/22 50/49/22 38/47/22 +f 4/46/23 52/35/23 3/16/23 +f 1/27/24 46/1/24 2/32/24 +f 2/16/1 45/34/1 4/27/1 +f 26/9/25 48/34/25 23/15/25 +f 23/16/3 51/34/3 35/27/3 +f 51/35/26 58/46/26 50/49/26 +f 47/34/27 54/9/27 46/1/27 +f 48/35/3 59/50/3 51/34/3 +f 49/35/1 58/27/1 57/16/1 +f 49/1/28 56/27/28 48/34/28 +f 46/35/1 53/15/1 45/34/1 +f 61/15/3 67/16/3 63/17/3 +f 62/17/1 68/27/1 66/16/1 +f 65/27/12 62/9/12 66/32/12 +f 61/33/3 76/34/3 71/35/3 +f 66/27/1 74/35/1 73/34/1 +f 63/17/9 68/46/9 64/47/9 +f 69/49/21 84/17/21 76/35/21 +f 71/35/3 84/27/3 79/16/3 +f 67/17/22 74/49/22 68/47/22 +f 64/46/23 76/35/23 63/16/23 +f 61/27/24 70/1/24 62/32/24 +f 62/50/1 69/35/1 64/17/1 +f 66/9/25 72/34/25 65/15/25 +f 65/16/3 75/34/3 67/27/3 +f 75/35/26 82/46/26 74/49/26 +f 71/34/27 78/9/27 70/1/27 +f 72/35/3 83/50/3 75/34/3 +f 73/34/1 82/33/1 81/50/1 +f 73/1/28 80/27/28 72/34/28 +f 70/34/1 77/16/1 69/35/1 +f 99/51/2 92/52/2 100/53/2 +f 96/49/29 89/54/29 97/55/29 +f 96/51/2 87/56/2 88/57/2 +f 97/53/4 86/57/4 94/51/4 +f 98/49/30 91/54/30 99/55/30 +f 94/55/31 87/58/31 95/51/31 +f 102/58/4 97/53/4 94/51/4 +f 103/47/32 97/55/32 104/59/32 +f 105/56/2 99/51/2 100/53/2 +f 108/47/33 99/55/33 107/59/33 +f 105/59/34 93/51/34 106/57/34 +f 101/57/35 94/55/35 95/51/35 +f 98/53/4 85/58/4 90/52/4 +f 100/55/36 85/58/36 93/51/36 +f 106/58/9 101/59/9 105/54/9 +f 101/52/2 96/51/2 103/58/2 +f 106/57/4 98/53/4 108/56/4 +f 104/47/12 107/54/12 103/59/12 +f 103/57/2 105/52/2 101/56/2 +f 104/56/4 106/58/4 108/52/4 +f 113/56/4 111/58/4 109/52/4 +f 114/57/2 112/52/2 116/56/2 +f 113/47/12 110/54/12 114/59/12 +f 111/57/4 119/53/4 109/56/4 +f 116/52/2 121/51/2 114/58/2 +f 112/54/9 115/57/9 116/59/9 +f 117/55/36 132/58/36 124/51/36 +f 119/53/4 132/58/4 127/52/4 +f 116/57/35 123/55/35 122/51/35 +f 112/59/34 124/51/34 111/57/34 +f 109/47/33 118/55/33 110/59/33 +f 112/56/2 118/51/2 117/53/2 +f 114/47/32 120/55/32 113/59/32 +f 115/58/4 120/53/4 123/51/4 +f 123/55/31 130/58/31 122/51/31 +f 119/49/30 126/54/30 118/55/30 +f 120/53/4 131/57/4 123/51/4 +f 121/51/2 130/56/2 129/57/2 +f 120/55/29 129/46/29 128/54/29 +f 118/51/2 125/52/2 117/53/2 +f 137/56/4 135/58/4 133/52/4 +f 138/57/2 136/52/2 140/56/2 +f 137/47/12 134/54/12 138/59/12 +f 135/57/4 143/53/4 133/56/4 +f 140/52/2 145/51/2 138/58/2 +f 136/54/9 139/57/9 140/59/9 +f 141/55/36 156/58/36 148/51/36 +f 143/53/4 156/58/4 151/52/4 +f 140/57/35 147/55/35 146/51/35 +f 136/59/34 148/51/34 135/57/34 +f 133/47/33 142/55/33 134/59/33 +f 136/56/2 142/51/2 141/53/2 +f 138/47/32 144/55/32 137/59/32 +f 139/58/4 144/53/4 147/51/4 +f 147/55/31 154/58/31 146/51/31 +f 143/49/30 150/54/30 142/55/30 +f 144/53/4 155/57/4 147/51/4 +f 145/51/2 154/56/2 153/57/2 +f 144/55/29 153/46/29 152/54/29 +f 142/51/2 149/52/2 141/53/2 +f 20/60/9 158/61/9 157/62/9 +f 10/63/9 160/64/9 159/65/9 +f 17/66/9 161/67/9 18/68/9 +f 11/69/9 163/70/9 12/71/9 +f 12/71/9 160/64/9 9/72/9 +f 10/63/9 166/73/9 167/74/9 +f 20/60/9 169/75/9 170/76/9 +f 19/77/9 161/67/9 158/61/9 +f 17/66/9 166/78/9 162/79/9 +f 165/3/3 159/80/3 5/32/3 +f 11/69/9 169/81/9 164/82/9 +f 168/3/1 157/80/1 15/32/1 +f 8/1/1 164/11/1 169/2/1 +f 161/4/2 13/7/2 16/5/2 +f 14/1/3 162/11/3 166/2/3 +f 7/7/4 6/5/4 160/6/4 +f 157/8/5 158/6/5 16/5/5 +f 159/10/37 160/6/37 6/5/37 +f 14/1/7 13/7/7 161/4/7 +f 8/1/8 7/7/8 163/4/8 +f 25/12/1 30/43/1 44/13/1 +f 1/15/3 23/27/3 35/16/3 +f 39/18/2 33/83/2 37/19/2 +f 29/21/9 40/42/9 42/22/9 +f 22/24/4 27/48/4 31/25/4 +f 2/17/1 4/15/1 38/27/1 +f 23/27/12 1/15/12 2/9/12 +f 1/33/3 3/50/3 52/34/3 +f 40/42/15 39/18/15 43/20/15 +f 28/29/38 27/28/38 22/42/38 +f 28/43/39 41/13/39 40/42/39 +f 44/41/5 43/40/5 37/44/5 +f 26/17/1 38/15/1 50/34/1 +f 30/45/18 32/23/18 42/22/18 +f 3/17/9 35/16/9 38/46/9 +f 34/39/7 33/84/7 39/36/7 +f 32/23/19 31/25/19 27/48/19 +f 25/13/8 24/37/8 31/31/8 +f 34/14/40 41/13/40 28/43/40 +f 45/49/21 53/47/21 60/17/21 +f 47/35/3 52/34/3 60/27/3 +f 35/17/22 51/35/22 50/49/22 +f 4/46/23 45/49/23 52/35/23 +f 1/27/24 47/34/24 46/1/24 +f 2/16/1 46/35/1 45/34/1 +f 26/9/25 49/1/25 48/34/25 +f 23/16/3 48/35/3 51/34/3 +f 51/35/26 59/16/26 58/46/26 +f 47/34/27 55/15/27 54/9/27 +f 48/35/3 56/33/3 59/50/3 +f 49/35/1 50/34/1 58/27/1 +f 49/1/28 57/32/28 56/27/28 +f 46/35/1 54/17/1 53/15/1 +f 61/15/3 65/27/3 67/16/3 +f 62/17/1 64/15/1 68/27/1 +f 65/27/12 61/15/12 62/9/12 +f 61/33/3 63/85/3 76/34/3 +f 66/27/1 68/16/1 74/35/1 +f 63/17/9 67/16/9 68/46/9 +f 69/49/21 77/47/21 84/17/21 +f 71/35/3 76/34/3 84/27/3 +f 67/17/22 75/35/22 74/49/22 +f 64/46/23 69/49/23 76/35/23 +f 61/27/24 71/34/24 70/1/24 +f 62/50/1 70/34/1 69/35/1 +f 66/9/25 73/1/25 72/34/25 +f 65/16/3 72/35/3 75/34/3 +f 75/35/26 83/16/26 82/46/26 +f 71/34/27 79/15/27 78/9/27 +f 72/35/3 80/33/3 83/50/3 +f 73/34/1 74/35/1 82/33/1 +f 73/1/28 81/32/28 80/27/28 +f 70/34/1 78/27/1 77/16/1 +f 99/51/2 91/58/2 92/52/2 +f 96/49/29 88/46/29 89/54/29 +f 96/51/2 95/53/2 87/56/2 +f 97/53/4 89/56/4 86/57/4 +f 98/49/30 90/46/30 91/54/30 +f 94/55/31 86/54/31 87/58/31 +f 102/58/4 104/52/4 97/53/4 +f 103/47/32 96/49/32 97/55/32 +f 105/56/2 107/57/2 99/51/2 +f 108/47/33 98/49/33 99/55/33 +f 105/59/34 100/55/34 93/51/34 +f 101/57/35 102/59/35 94/55/35 +f 98/53/4 93/51/4 85/58/4 +f 100/55/36 92/54/36 85/58/36 +f 106/58/9 102/57/9 101/59/9 +f 101/52/2 95/53/2 96/51/2 +f 106/57/4 93/51/4 98/53/4 +f 104/47/12 108/46/12 107/54/12 +f 103/57/2 107/58/2 105/52/2 +f 104/56/4 102/57/4 106/58/4 +f 113/56/4 115/57/4 111/58/4 +f 114/57/2 110/58/2 112/52/2 +f 113/47/12 109/46/12 110/54/12 +f 111/57/4 124/51/4 119/53/4 +f 116/52/2 122/53/2 121/51/2 +f 112/54/9 111/58/9 115/57/9 +f 117/55/36 125/54/36 132/58/36 +f 119/53/4 124/51/4 132/58/4 +f 116/57/35 115/59/35 123/55/35 +f 112/59/34 117/55/34 124/51/34 +f 109/47/33 119/49/33 118/55/33 +f 112/56/2 110/57/2 118/51/2 +f 114/47/32 121/49/32 120/55/32 +f 115/58/4 113/52/4 120/53/4 +f 123/55/31 131/54/31 130/58/31 +f 119/49/30 127/46/30 126/54/30 +f 120/53/4 128/56/4 131/57/4 +f 121/51/2 122/53/2 130/56/2 +f 120/55/29 121/49/29 129/46/29 +f 118/51/2 126/58/2 125/52/2 +f 137/56/4 139/57/4 135/58/4 +f 138/57/2 134/58/2 136/52/2 +f 137/47/12 133/46/12 134/54/12 +f 135/57/4 148/51/4 143/53/4 +f 140/52/2 146/53/2 145/51/2 +f 136/54/9 135/58/9 139/57/9 +f 141/55/36 149/54/36 156/58/36 +f 143/53/4 148/51/4 156/58/4 +f 140/57/35 139/59/35 147/55/35 +f 136/59/34 141/55/34 148/51/34 +f 133/47/33 143/49/33 142/55/33 +f 136/56/2 134/57/2 142/51/2 +f 138/47/32 145/49/32 144/55/32 +f 139/58/4 137/52/4 144/53/4 +f 147/55/31 155/54/31 154/58/31 +f 143/49/30 151/46/30 150/54/30 +f 144/53/4 152/56/4 155/57/4 +f 145/51/2 146/53/2 154/56/2 +f 144/55/29 145/49/29 153/46/29 +f 142/51/2 150/58/2 149/52/2 +f 20/60/9 19/77/9 158/61/9 +f 10/63/9 9/72/9 160/64/9 +f 17/66/9 162/79/9 161/67/9 +f 11/69/9 164/82/9 163/70/9 +f 12/71/9 163/70/9 160/64/9 +f 10/63/9 159/65/9 166/73/9 +f 20/60/9 157/62/9 169/75/9 +f 19/77/9 18/68/9 161/67/9 +f 17/66/9 167/86/9 166/78/9 +f 165/3/3 166/2/3 159/80/3 +f 11/69/9 170/87/9 169/81/9 +f 168/3/1 169/2/1 157/80/1 diff --git a/src/main/resources/assets/hbm/models/lights/flood_lamp.obj b/src/main/resources/assets/hbm/models/lights/flood_lamp.obj new file mode 100644 index 000000000..09cddd769 --- /dev/null +++ b/src/main/resources/assets/hbm/models/lights/flood_lamp.obj @@ -0,0 +1,228 @@ +# Blender 4.0.1 +# www.blender.org +o FloodLamp +v 0.015049 -0.086498 0.155863 +v 0.015049 0.086498 0.155863 +v 0.015049 -0.086498 -0.155863 +v 0.015049 0.086498 -0.155863 +v 0.306240 -0.185247 0.273848 +v 0.306240 0.185247 0.273848 +v 0.306240 -0.185247 -0.273848 +v 0.306240 0.185247 -0.273848 +v 0.306240 0.228156 -0.325088 +v 0.306240 -0.228156 -0.325088 +v 0.306240 -0.228156 0.325088 +v 0.306240 0.228156 0.325088 +v 0.183352 0.115790 -0.171171 +v 0.183352 -0.115790 -0.171171 +v 0.183352 -0.115790 0.171171 +v 0.183352 0.115790 0.171171 +v 0.183138 0.057253 -0.202014 +v 0.183138 0.057253 0.202014 +v 0.183138 -0.057253 -0.202014 +v 0.183138 -0.057253 0.202014 +v 0.214999 -0.040484 -0.202014 +v 0.214999 -0.040484 0.202014 +v 0.228196 0.000000 -0.202014 +v 0.228196 0.000000 0.202014 +v 0.214999 0.040484 -0.202014 +v 0.214999 0.040484 0.202014 +v -0.001481 -0.036719 0.241790 +v -0.001481 0.036719 0.241790 +v -0.001481 -0.036719 -0.241790 +v -0.001481 0.036719 -0.241790 +v 0.005048 -0.036719 0.237296 +v 0.005048 0.036719 0.237296 +v 0.005048 -0.036719 -0.237296 +v 0.005048 0.036719 -0.237296 +v 0.150804 -0.036719 0.259541 +v 0.150804 0.036719 0.259541 +v 0.150804 0.036719 -0.259541 +v 0.150804 -0.036719 -0.259541 +v 0.150804 -0.036719 -0.253185 +v 0.150804 0.036719 -0.253185 +v 0.150804 0.036719 0.253185 +v 0.150804 -0.036719 0.253185 +v 0.071925 -0.135739 -0.228998 +v 0.071925 0.135739 -0.228998 +v 0.071925 -0.135739 0.228998 +v 0.071925 0.135739 0.228998 +v 0.256780 0.219497 -0.320654 +v 0.256780 -0.219497 0.320654 +v 0.256780 -0.219497 -0.320654 +v 0.256780 0.219497 0.320654 +vn -1.0000 -0.0000 -0.0000 +vn -0.0893 -0.0000 -0.9960 +vn 0.4920 -0.8706 -0.0000 +vn -0.7894 -0.0000 0.6139 +vn -0.1724 -0.9850 -0.0000 +vn -0.6545 0.7560 -0.0000 +vn 1.0000 -0.0000 -0.0000 +vn 0.6412 -0.0000 0.7674 +vn 0.6412 -0.0000 -0.7674 +vn 0.4920 0.8706 -0.0000 +vn 0.4658 -0.8849 -0.0000 +vn 0.9508 -0.3099 -0.0000 +vn 0.9508 0.3099 -0.0000 +vn 0.4658 0.8849 -0.0000 +vn -0.0000 -1.0000 -0.0000 +vn 0.1084 -0.0000 0.9941 +vn -0.0000 1.0000 -0.0000 +vn 0.1084 -0.0000 -0.9941 +vn -0.1158 -0.0000 -0.9933 +vn -0.1158 -0.0000 0.9933 +vn -0.4127 0.9109 -0.0000 +vn -0.6545 -0.7560 -0.0000 +vn -0.4442 -0.0000 0.8959 +vn -0.7894 -0.0000 -0.6139 +vn -0.0893 -0.0000 0.9960 +vn -0.1724 0.9850 -0.0000 +vn -0.4127 -0.9109 -0.0000 +vn -0.4442 -0.0000 -0.8959 +vt 0.750000 0.312500 +vt 0.937500 0.000000 +vt 0.937500 0.312500 +vt 0.433577 0.606066 +vt 0.390675 0.995211 +vt 0.433577 0.987684 +vt 0.319041 0.068172 +vt 0.433066 0.416342 +vt 0.319041 0.496674 +vt 0.592516 0.678877 +vt 0.640575 0.872068 +vt 0.592516 0.914873 +vt 0.954474 0.992052 +vt 0.393131 0.950474 +vt 0.950619 0.950474 +vt 0.536383 0.742486 +vt 0.870944 0.796340 +vt 0.472806 0.796340 +vt 0.520556 0.519306 +vt 0.125992 0.563849 +vt 0.166945 0.519306 +vt 0.520555 0.043194 +vt 0.561508 0.563849 +vt 0.125992 -0.001349 +vt 0.166945 0.043194 +vt 0.166945 0.045709 +vt 0.561508 0.001166 +vt 0.520555 0.045709 +vt 0.062500 1.000000 +vt 0.312500 0.687500 +vt 0.312500 1.000000 +vt 0.999676 0.773340 +vt 0.890949 0.511648 +vt 0.999676 0.451269 +vt 1.000000 0.773310 +vt 0.891273 0.511618 +vt 1.000000 0.451239 +vt 0.320607 0.064998 +vt 0.433145 0.419320 +vt 0.320607 0.493499 +vt 0.000000 0.437500 +vt 0.062500 0.437500 +vt 0.000000 1.000000 +vt 0.937500 0.437500 +vt 1.000000 0.000000 +vt 1.000000 0.437500 +vt 1.000000 0.125000 +vt 0.937500 0.125000 +vt 0.950619 0.956002 +vt 0.393131 0.956002 +vt 0.807367 0.757948 +vt 0.472806 0.801131 +vt 0.536383 0.757948 +vt 0.640575 0.721682 +vt 0.390675 0.598539 +vt 0.390675 0.995211 +vt 0.954474 0.995950 +vt 0.389276 0.995950 +vt 0.870944 0.801131 +vt 0.750000 0.000000 +vt 0.390675 0.598539 +vt 0.433066 0.148504 +vt 0.389276 0.992052 +vt 0.807367 0.742486 +vt 0.561508 -0.001349 +vt 0.125992 0.001166 +vt 0.062500 0.687500 +vt 0.890949 0.712961 +vt 0.891273 0.712931 +vt 0.433145 0.151481 +s 0 +f 2/1/1 3/2/1 1/3/1 +f 47/4/2 10/5/2 49/6/2 +f 6/7/3 13/8/3 8/9/3 +f 46/10/4 1/11/4 45/12/4 +f 10/13/5 48/14/5 49/15/5 +f 4/16/6 46/17/6 44/18/6 +f 7/19/7 9/20/7 8/21/7 +f 5/22/7 10/23/7 7/19/7 +f 8/21/7 12/24/7 6/25/7 +f 6/26/7 11/27/7 5/28/7 +f 13/29/7 15/30/7 14/31/7 +f 8/32/8 14/33/8 7/34/8 +f 5/35/9 16/36/9 6/37/9 +f 7/38/10 15/39/10 5/40/10 +f 21/41/11 20/29/11 19/42/11 +f 23/41/12 22/29/12 21/42/12 +f 25/29/13 24/41/13 23/43/13 +f 17/29/14 26/41/14 25/43/14 +f 28/44/1 29/45/1 27/46/1 +f 33/2/15 38/47/15 39/48/15 +f 34/44/7 31/45/7 33/46/7 +f 33/45/16 40/48/16 34/2/16 +f 33/44/15 27/45/15 29/46/15 +f 30/45/17 32/44/17 34/2/17 +f 32/2/17 36/47/17 41/48/17 +f 32/48/18 42/45/18 31/47/18 +f 34/45/17 37/48/17 30/2/17 +f 30/48/19 38/45/19 29/47/19 +f 27/45/20 36/48/20 28/2/20 +f 31/45/15 35/48/15 27/2/15 +f 44/18/21 50/49/21 47/50/21 +f 3/51/22 45/52/22 1/53/22 +f 50/4/23 45/12/23 48/6/23 +f 4/54/24 43/12/24 3/11/24 +f 12/55/25 48/6/25 11/56/25 +f 47/50/26 12/57/26 9/58/26 +f 49/15/27 45/52/27 43/59/27 +f 44/10/28 49/6/28 43/12/28 +f 2/1/1 4/60/1 3/2/1 +f 47/4/2 9/61/2 10/5/2 +f 6/7/3 16/62/3 13/8/3 +f 46/10/4 2/54/4 1/11/4 +f 10/13/5 11/63/5 48/14/5 +f 4/16/6 2/64/6 46/17/6 +f 7/19/7 10/23/7 9/20/7 +f 5/22/7 11/65/7 10/23/7 +f 8/21/7 9/20/7 12/24/7 +f 6/26/7 12/66/7 11/27/7 +f 13/29/7 16/67/7 15/30/7 +f 8/32/8 13/68/8 14/33/8 +f 5/35/9 15/69/9 16/36/9 +f 7/38/10 14/70/10 15/39/10 +f 21/41/11 22/43/11 20/29/11 +f 23/41/12 24/43/12 22/29/12 +f 25/29/13 26/42/13 24/41/13 +f 17/29/14 18/42/14 26/41/14 +f 28/44/1 30/2/1 29/45/1 +f 33/2/15 29/45/15 38/47/15 +f 34/44/7 32/2/7 31/45/7 +f 33/45/16 39/47/16 40/48/16 +f 33/44/15 31/2/15 27/45/15 +f 30/45/17 28/46/17 32/44/17 +f 32/2/17 28/45/17 36/47/17 +f 32/48/18 41/2/18 42/45/18 +f 34/45/17 40/47/17 37/48/17 +f 30/48/19 37/2/19 38/45/19 +f 27/45/20 35/47/20 36/48/20 +f 31/45/15 42/47/15 35/48/15 +f 44/18/21 46/17/21 50/49/21 +f 3/51/22 43/59/22 45/52/22 +f 50/4/23 46/10/23 45/12/23 +f 4/54/24 44/10/24 43/12/24 +f 12/55/25 50/4/25 48/6/25 +f 47/50/26 50/49/26 12/57/26 +f 49/15/27 48/14/27 45/52/27 +f 44/10/28 47/4/28 49/6/28 diff --git a/src/main/resources/assets/hbm/models/lights/fluorescent_lamp.obj b/src/main/resources/assets/hbm/models/lights/fluorescent_lamp.obj new file mode 100644 index 000000000..9343ef1bc --- /dev/null +++ b/src/main/resources/assets/hbm/models/lights/fluorescent_lamp.obj @@ -0,0 +1,306 @@ +# Blender 4.0.1 +# www.blender.org +o FluoroCap +v -0.002210 -0.289110 0.300000 +v -0.002210 0.289110 0.300000 +v -0.002210 -0.289110 -0.500000 +v -0.002210 0.289110 -0.500000 +v 0.147790 -0.315000 0.300000 +v 0.147790 0.315000 0.300000 +v 0.147790 -0.315000 -0.500000 +v 0.147790 0.315000 -0.500000 +v 0.072790 -0.315000 -0.500000 +v 0.072790 0.315000 -0.500000 +v 0.072790 -0.315000 0.300000 +v 0.072790 0.315000 0.300000 +v -0.002210 0.289110 0.350000 +v -0.002210 -0.289110 0.350000 +v 0.147790 -0.315000 0.350000 +v 0.147790 0.315000 0.350000 +v 0.072790 0.315000 0.350000 +v 0.072790 -0.315000 0.350000 +vn -0.0000 -0.0000 -1.0000 +vn 1.0000 -0.0000 -0.0000 +vn -0.0000 -1.0000 -0.0000 +vn -0.3263 0.9453 -0.0000 +vn -0.0000 1.0000 -0.0000 +vn -0.3263 -0.9453 -0.0000 +vn -0.0000 -0.0000 1.0000 +vt 0.125000 0.937500 +vt 0.625000 0.875000 +vt 0.625000 0.937500 +vt 0.125000 0.687500 +vt 0.625000 0.125000 +vt 0.625000 0.687500 +vt 0.687500 0.125000 +vt 0.687500 0.687500 +vt 0.000000 0.687500 +vt 0.062500 0.125000 +vt 0.062500 0.687500 +vt 0.125000 0.125000 +vt 0.750000 0.125000 +vt 0.750000 0.687500 +vt 0.125000 1.000000 +vt 0.625000 1.000000 +vt 0.125000 0.062500 +vt 0.625000 0.000000 +vt 0.625000 0.062500 +vt 1.000000 0.375000 +vt 0.937500 0.437500 +vt 0.937500 0.375000 +vt 1.000000 0.437500 +vt 0.937500 1.000000 +vt 1.000000 0.500000 +vt 1.000000 1.000000 +vt 0.937500 0.500000 +vt 0.125000 0.875000 +vt 0.000000 0.125000 +vt 0.125000 0.000000 +s 0 +f 10/1/1 7/2/1 9/3/1 +f 8/4/2 5/5/2 7/6/2 +f 7/6/3 11/7/3 9/8/3 +f 4/9/4 12/10/4 10/11/4 +f 10/11/5 6/12/5 8/4/5 +f 9/8/6 1/13/6 3/14/6 +f 4/15/1 9/3/1 3/16/1 +f 17/17/7 14/18/7 18/19/7 +f 13/20/4 12/21/4 2/22/4 +f 18/21/6 1/20/6 11/23/6 +f 16/12/7 18/19/7 15/5/7 +f 16/24/2 5/25/2 6/26/2 +f 17/21/5 6/25/5 12/23/5 +f 15/27/3 11/23/3 5/25/3 +f 10/1/1 8/28/1 7/2/1 +f 8/4/2 6/12/2 5/5/2 +f 7/6/3 5/5/3 11/7/3 +f 4/9/4 2/29/4 12/10/4 +f 10/11/5 12/10/5 6/12/5 +f 9/8/6 11/7/6 1/13/6 +f 4/15/1 10/1/1 9/3/1 +f 17/17/7 13/30/7 14/18/7 +f 13/20/4 17/23/4 12/21/4 +f 18/21/6 14/22/6 1/20/6 +f 16/12/7 17/17/7 18/19/7 +f 16/24/2 15/27/2 5/25/2 +f 17/21/5 16/27/5 6/25/5 +f 15/27/3 18/21/3 11/23/3 +o FluoroMid +v -0.002210 -0.289110 0.500000 +v -0.002210 0.289110 0.500000 +v -0.002210 -0.289110 -0.500000 +v -0.002210 0.289110 -0.500000 +v 0.147790 -0.315000 0.500000 +v 0.147790 0.315000 0.500000 +v 0.147790 -0.315000 -0.500000 +v 0.147790 0.315000 -0.500000 +v 0.072790 -0.315000 -0.500000 +v 0.072790 0.315000 -0.500000 +v 0.072790 -0.315000 0.500000 +v 0.072790 0.315000 0.500000 +v -0.002210 -0.289110 0.000000 +v -0.002210 0.289110 0.000000 +v 0.147790 -0.315000 0.000000 +v 0.147790 0.315000 0.000000 +v 0.072790 0.315000 0.000000 +v 0.072790 -0.315000 0.000000 +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.3263 0.9453 -0.0000 +vn -0.0000 1.0000 -0.0000 +vn -0.3263 -0.9453 -0.0000 +vt 0.125000 0.937500 +vt 0.625000 0.875000 +vt 0.625000 0.937500 +vt 0.125000 0.687500 +vt 0.625000 0.312500 +vt 0.625000 0.687500 +vt 0.125000 0.062500 +vt 0.625000 0.000000 +vt 0.625000 0.062500 +vt 0.625000 0.500000 +vt 0.687500 0.125000 +vt 0.687500 0.500000 +vt 0.000000 0.500000 +vt 0.062500 0.125000 +vt 0.062500 0.500000 +vt 0.125000 0.125000 +vt 0.125000 0.500000 +vt 0.750000 0.125000 +vt 0.750000 0.500000 +vt 0.625000 0.125000 +vt 0.125000 1.000000 +vt 0.625000 1.000000 +vt 0.687500 0.875000 +vt 0.750000 0.875000 +vt 0.062500 0.875000 +vt 0.125000 0.875000 +vt -0.000000 0.875000 +vt 0.125000 0.312500 +vt 0.125000 0.000000 +vt 0.000000 0.125000 +s 0 +f 28/31/8 25/32/8 27/33/8 +f 34/34/9 23/35/9 33/36/9 +f 30/37/10 19/38/10 29/39/10 +f 33/40/11 29/41/11 36/42/11 +f 32/43/12 30/44/12 35/45/12 +f 35/45/13 24/46/13 34/47/13 +f 36/42/14 19/48/14 31/49/14 +f 24/46/10 29/39/10 23/50/10 +f 22/51/8 27/33/8 21/52/8 +f 27/53/14 31/49/14 21/54/14 +f 28/55/13 34/47/13 26/56/13 +f 22/57/12 35/45/12 28/55/12 +f 25/32/11 36/42/11 27/53/11 +f 26/34/9 33/35/9 25/36/9 +f 28/31/8 26/56/8 25/32/8 +f 34/34/9 24/58/9 23/35/9 +f 30/37/10 20/59/10 19/38/10 +f 33/40/11 23/50/11 29/41/11 +f 32/43/12 20/60/12 30/44/12 +f 35/45/13 30/44/13 24/46/13 +f 36/42/14 29/41/14 19/48/14 +f 24/46/10 30/37/10 29/39/10 +f 22/51/8 28/31/8 27/33/8 +f 27/53/14 36/42/14 31/49/14 +f 28/55/13 35/45/13 34/47/13 +f 22/57/12 32/43/12 35/45/12 +f 25/32/11 33/40/11 36/42/11 +f 26/34/9 34/58/9 33/35/9 +o FluoroSingle +v -0.002210 -0.289110 0.300000 +v -0.002210 0.289110 0.300000 +v -0.002210 -0.289110 -0.300000 +v -0.002210 0.289110 -0.300000 +v 0.147790 -0.315000 0.300000 +v 0.147790 0.315000 0.300000 +v 0.147790 -0.315000 -0.300000 +v 0.147790 0.315000 -0.300000 +v 0.072790 -0.315000 -0.300000 +v 0.072790 0.315000 -0.300000 +v 0.072790 -0.315000 0.300000 +v 0.072790 0.315000 0.300000 +v 0.072790 -0.315000 -0.350000 +v 0.072790 0.315000 -0.350000 +v 0.147790 0.315000 -0.350000 +v 0.147790 -0.315000 -0.350000 +v 0.072790 -0.315000 0.350000 +v 0.072790 0.315000 0.350000 +v -0.002210 0.289110 0.350000 +v -0.002210 -0.289110 0.350000 +v 0.147790 -0.315000 0.350000 +v 0.147790 0.315000 0.350000 +v -0.002210 -0.289110 -0.350000 +v -0.002210 0.289110 -0.350000 +v -0.002210 -0.289110 0.000000 +v -0.002210 0.289110 0.000000 +v 0.147790 -0.315000 0.000000 +v 0.147790 0.315000 0.000000 +v 0.072790 0.315000 0.000000 +v 0.072790 -0.315000 0.000000 +vn 1.0000 -0.0000 -0.0000 +vn -0.0000 -1.0000 -0.0000 +vn -0.3263 0.9453 -0.0000 +vn -0.0000 1.0000 -0.0000 +vn -0.3263 -0.9453 -0.0000 +vn -0.0000 -0.0000 -1.0000 +vn -0.0000 -0.0000 1.0000 +vt 0.125000 0.375000 +vt 0.625000 0.125000 +vt 0.625000 0.375000 +vt 0.625000 0.625000 +vt 0.687500 0.375000 +vt 0.687500 0.625000 +vt 0.000000 0.625000 +vt 0.062500 0.375000 +vt 0.062500 0.625000 +vt 0.125000 0.375000 +vt 0.125000 0.625000 +vt 0.750000 0.375000 +vt 0.750000 0.625000 +vt 0.125000 0.937500 +vt 0.625000 0.875000 +vt 0.625000 0.937500 +vt 0.937500 0.437500 +vt 1.000000 0.500000 +vt 1.000000 0.437500 +vt 0.937500 0.562500 +vt 1.000000 1.000000 +vt 1.000000 0.562500 +vt 1.000000 0.500000 +vt 0.937500 0.500000 +vt 0.125000 0.062500 +vt 0.625000 -0.000000 +vt 0.625000 0.062500 +vt 1.000000 0.500000 +vt 0.125000 0.125000 +vt 0.625000 0.125000 +vt 0.937500 1.000000 +vt 0.937500 0.562500 +vt 0.125000 1.000000 +vt 0.625000 1.000000 +vt 1.000000 0.562500 +vt 1.000000 0.562500 +vt 0.687500 0.875000 +vt 0.750000 0.875000 +vt 0.062500 0.875000 +vt 0.125000 0.875000 +vt 0.000000 0.875000 +vt 0.125000 0.875000 +vt 0.625000 0.875000 +vt 0.125000 0.125000 +vt 0.625000 0.375000 +vt 0.000000 0.375000 +vt 0.125000 -0.000000 +s 0 +f 64/61/15 41/62/15 63/63/15 +f 63/64/16 47/65/16 66/66/16 +f 62/67/17 48/68/17 65/69/17 +f 65/69/18 42/70/18 64/71/18 +f 66/66/19 37/72/19 61/73/19 +f 50/74/20 52/75/20 49/76/20 +f 51/77/18 46/78/18 44/79/18 +f 52/80/15 44/81/15 43/82/15 +f 49/83/16 43/77/16 45/84/16 +f 54/85/21 56/86/21 53/87/21 +f 55/79/17 48/84/17 38/77/17 +f 53/88/19 37/77/19 47/84/19 +f 58/89/21 53/87/21 57/90/21 +f 58/91/15 41/82/15 42/81/15 +f 54/78/18 42/92/18 48/84/18 +f 57/82/16 47/84/16 41/92/16 +f 60/93/20 49/76/20 59/94/20 +f 50/84/17 40/95/17 46/78/17 +f 59/96/19 45/84/19 39/92/19 +f 45/97/19 61/73/19 39/98/19 +f 46/99/18 64/71/18 44/100/18 +f 40/101/17 65/69/17 46/99/17 +f 43/75/16 66/66/16 45/97/16 +f 44/102/15 63/64/15 43/103/15 +f 64/61/15 42/104/15 41/62/15 +f 63/64/16 41/105/16 47/65/16 +f 62/67/17 38/106/17 48/68/17 +f 65/69/18 48/68/18 42/70/18 +f 66/66/19 47/65/19 37/72/19 +f 50/74/20 51/100/20 52/75/20 +f 51/77/18 50/84/18 46/78/18 +f 52/80/15 51/91/15 44/81/15 +f 49/83/16 52/79/16 43/77/16 +f 54/85/21 55/107/21 56/86/21 +f 55/79/17 54/78/17 48/84/17 +f 53/88/19 56/79/19 37/77/19 +f 58/89/21 54/85/21 53/87/21 +f 58/91/15 57/80/15 41/82/15 +f 54/78/18 58/95/18 42/92/18 +f 57/82/16 53/88/16 47/84/16 +f 60/93/20 50/74/20 49/76/20 +f 50/84/17 60/92/17 40/95/17 +f 59/96/19 49/83/19 45/84/19 +f 45/97/19 66/66/19 61/73/19 +f 46/99/18 65/69/18 64/71/18 +f 40/101/17 62/67/17 65/69/17 +f 43/75/16 63/64/16 66/66/16 +f 44/102/15 64/71/15 63/64/15 diff --git a/src/main/resources/assets/hbm/textures/blocks/cage_lamp.png b/src/main/resources/assets/hbm/textures/blocks/cage_lamp.png new file mode 100644 index 000000000..8932b2ffa Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/cage_lamp.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/flood_lamp.png b/src/main/resources/assets/hbm/textures/blocks/flood_lamp.png new file mode 100644 index 000000000..1582fc963 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/flood_lamp.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/fluorescent_lamp.png b/src/main/resources/assets/hbm/textures/blocks/fluorescent_lamp.png new file mode 100644 index 000000000..f10e42271 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/fluorescent_lamp.png differ