From 0dfcae05f41edc75c4f756831f46f874ea9d8597 Mon Sep 17 00:00:00 2001 From: Kam Date: Wed, 12 Feb 2025 21:44:14 -0500 Subject: [PATCH] Updated Tall Lamp + New Short Lamp --- .../noppes/npcs/blocks/BlockShortLamp.java | 135 ++++++++++++++++++ .../noppes/npcs/blocks/BlockTallLamp.java | 39 ++--- .../npcs/blocks/tiles/TileShortLamp.java | 3 + .../java/noppes/npcs/client/ClientProxy.java | 1 + .../model/blocks/lamp/ModelShortLamp.java | 78 ++++++++++ .../model/blocks/lamp/ModelTallLamp.java | 78 ++++++++++ .../ModelLegacyTallLamp.java} | 22 +-- .../ModelLegacyTallLampTop.java} | 18 +-- .../blocks/BlockShortLampRenderer.java | 104 ++++++++++++++ .../blocks/BlockTallLampRenderer.java | 93 +++++++++--- .../java/noppes/npcs/config/ConfigClient.java | 2 + .../assets/customnpcs/lang/en_US.lang | 3 +- .../textures/models/lamp/short/diamond.png | Bin 0 -> 1094 bytes .../textures/models/lamp/short/gold.png | Bin 0 -> 1094 bytes .../textures/models/lamp/short/iron.png | Bin 0 -> 999 bytes .../textures/models/lamp/short/stone.png | Bin 0 -> 917 bytes .../textures/models/lamp/short/wood.png | Bin 0 -> 1012 bytes .../textures/models/lamp/tall/diamond.png | Bin 0 -> 1260 bytes .../textures/models/lamp/tall/gold.png | Bin 0 -> 1268 bytes .../textures/models/lamp/tall/iron.png | Bin 0 -> 1176 bytes .../textures/models/lamp/tall/stone.png | Bin 0 -> 1200 bytes .../textures/models/lamp/tall/wood.png | Bin 0 -> 1276 bytes 22 files changed, 518 insertions(+), 58 deletions(-) create mode 100644 src/main/java/noppes/npcs/blocks/BlockShortLamp.java create mode 100644 src/main/java/noppes/npcs/blocks/tiles/TileShortLamp.java create mode 100644 src/main/java/noppes/npcs/client/model/blocks/lamp/ModelShortLamp.java create mode 100644 src/main/java/noppes/npcs/client/model/blocks/lamp/ModelTallLamp.java rename src/main/java/noppes/npcs/client/model/blocks/{ModelTallLamp.java => legacy/ModelLegacyTallLamp.java} (92%) rename src/main/java/noppes/npcs/client/model/blocks/{ModelTallLampTop.java => legacy/ModelLegacyTallLampTop.java} (89%) create mode 100644 src/main/java/noppes/npcs/client/renderer/blocks/BlockShortLampRenderer.java create mode 100644 src/main/resources/assets/customnpcs/textures/models/lamp/short/diamond.png create mode 100644 src/main/resources/assets/customnpcs/textures/models/lamp/short/gold.png create mode 100644 src/main/resources/assets/customnpcs/textures/models/lamp/short/iron.png create mode 100644 src/main/resources/assets/customnpcs/textures/models/lamp/short/stone.png create mode 100644 src/main/resources/assets/customnpcs/textures/models/lamp/short/wood.png create mode 100644 src/main/resources/assets/customnpcs/textures/models/lamp/tall/diamond.png create mode 100644 src/main/resources/assets/customnpcs/textures/models/lamp/tall/gold.png create mode 100644 src/main/resources/assets/customnpcs/textures/models/lamp/tall/iron.png create mode 100644 src/main/resources/assets/customnpcs/textures/models/lamp/tall/stone.png create mode 100644 src/main/resources/assets/customnpcs/textures/models/lamp/tall/wood.png diff --git a/src/main/java/noppes/npcs/blocks/BlockShortLamp.java b/src/main/java/noppes/npcs/blocks/BlockShortLamp.java new file mode 100644 index 000000000..b3e4955cc --- /dev/null +++ b/src/main/java/noppes/npcs/blocks/BlockShortLamp.java @@ -0,0 +1,135 @@ +package noppes.npcs.blocks; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.BlockColored; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +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; +import noppes.npcs.NoppesUtilServer; +import noppes.npcs.blocks.tiles.TileColorable; +import noppes.npcs.blocks.tiles.TileShortLamp; + +import java.util.List; + +public class BlockShortLamp extends BlockContainer { + + public int renderId = -1; + + public BlockShortLamp() { + super(Material.wood); + setLightLevel(1); + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, + int side, float hitX, float hitY, float hitZ) { + ItemStack item = player.inventory.getCurrentItem(); + if (item == null || item.getItem() != Items.dye) + return false; + int meta = world.getBlockMetadata(x, y, z); + TileColorable tile = (TileColorable) world.getTileEntity(x, y, z); + int color = BlockColored.func_150031_c(item.getItemDamage()); + if (tile.color != color) { + NoppesUtilServer.consumeItemStack(1, player); + tile.color = color; + world.markBlockForUpdate(x, y, z); + } + return true; + } + + @Override + public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { + setBlockBoundsBasedOnState(world, x, y, z); + return super.getCollisionBoundingBoxFromPool(world, x, y, z); + } + + @Override + public void getSubBlocks(Item item, CreativeTabs tab, List list) { + list.add(new ItemStack(item, 1, 0)); + list.add(new ItemStack(item, 1, 1)); + list.add(new ItemStack(item, 1, 2)); + list.add(new ItemStack(item, 1, 3)); + list.add(new ItemStack(item, 1, 4)); + } + + @Override + public int damageDropped(int meta) { + return meta; + } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, + EntityLivingBase entity, ItemStack stack) { + int l = MathHelper.floor_double((double)(entity.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + l %= 4; + TileColorable tile = (TileColorable) world.getTileEntity(x, y, z); + tile.rotation = l; + tile.color = 15 - stack.getItemDamage(); + world.setBlockMetadataWithNotify(x, y, z, stack.getItemDamage(), 2); + } + + @Override + public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) { + // Always one block tall. + setBlockBounds(0, 0, 0, 1, 1, 1); + } + + @Override + public boolean isOpaqueCube(){ + return false; + } + + @Override + public boolean renderAsNormalBlock(){ + return false; + } + + @Override + public int getRenderType(){ + return renderId; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + // Optional icon registration + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + if(meta == 1) + return Blocks.stone.getIcon(side, 0); + else if(meta == 2) + return Blocks.iron_block.getIcon(side, 0); + else if(meta == 3) + return Blocks.gold_block.getIcon(side, 0); + else if(meta == 4) + return Blocks.diamond_block.getIcon(side, 0); + return Blocks.planks.getIcon(side, 0); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileShortLamp(); + } + + @Override + public void onBlockHarvested(World world, int x, int y, int z, int meta, EntityPlayer player) { + super.onBlockHarvested(world, x, y, z, meta, player); + } +} diff --git a/src/main/java/noppes/npcs/blocks/BlockTallLamp.java b/src/main/java/noppes/npcs/blocks/BlockTallLamp.java index 9e38535f8..89a3d86b1 100644 --- a/src/main/java/noppes/npcs/blocks/BlockTallLamp.java +++ b/src/main/java/noppes/npcs/blocks/BlockTallLamp.java @@ -25,8 +25,8 @@ import noppes.npcs.blocks.tiles.TileTallLamp; import java.util.List; -public class BlockTallLamp extends BlockContainer{ - +public class BlockTallLamp extends BlockContainer { + public int renderId = -1; public BlockTallLamp() { @@ -34,7 +34,7 @@ public class BlockTallLamp extends BlockContainer{ setBlockBounds(0, 0, 0, 1, 2, 1); setLightLevel(1); } - @Override + @Override public boolean onBlockActivated(World par1World, int i, int j, int k, EntityPlayer player, int par6, float par7, float par8, float par9){ ItemStack item = player.inventory.getCurrentItem(); if(item == null || item.getItem() != Items.dye) @@ -56,7 +56,7 @@ public class BlockTallLamp extends BlockContainer{ return super.getCollisionBoundingBoxFromPool(world, x, y, z); } - @Override + @Override public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List){ par3List.add(new ItemStack(par1, 1, 0)); par3List.add(new ItemStack(par1, 1, 1)); @@ -65,32 +65,37 @@ public class BlockTallLamp extends BlockContainer{ par3List.add(new ItemStack(par1, 1, 4)); } - @Override + @Override public int damageDropped(int par1){ return par1 % 7; } - @Override + @Override + public boolean canPlaceBlockAt(World world, int x, int y, int z) { + return super.canPlaceBlockAt(world, x, y, z) && world.isAirBlock(x, y + 1, z); + } + + @Override public void onBlockPlacedBy(World par1World, int par2, int par3, int par4, EntityLivingBase par5EntityLivingBase, ItemStack par6ItemStack) { if(!par1World.isAirBlock(par2, par3 + 1, par4)){ par1World.setBlockToAir(par2, par3, par4); } else{ - + int l = MathHelper.floor_double((double)(par5EntityLivingBase.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; l %= 4; - + TileColorable tile = (TileColorable) par1World.getTileEntity(par2, par3, par4); tile.rotation = l; tile.color = 15 - par6ItemStack.getItemDamage(); - + par1World.setBlockMetadataWithNotify(par2, par3, par4, par6ItemStack.getItemDamage() , 2); par1World.setBlock(par2, par3 + 1, par4, this, par6ItemStack.getItemDamage() + 7, 2); } } - @Override + @Override public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z){ int meta = world.getBlockMetadata(x, y, z); if(meta >= 7) @@ -99,26 +104,24 @@ public class BlockTallLamp extends BlockContainer{ setBlockBounds(0, 0, 0, 1, 2, 1); } - @Override + @Override public boolean isOpaqueCube(){ return false; } - @Override + @Override public boolean renderAsNormalBlock(){ return false; } - @Override + @Override public int getRenderType(){ - return renderId; + return renderId; } @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister par1IconRegister) - { - - } + {} @Override @SideOnly(Side.CLIENT) @@ -149,7 +152,7 @@ public class BlockTallLamp extends BlockContainer{ { if (p_149681_5_ >= 7 && p_149681_1_.getBlock(p_149681_2_, p_149681_3_ - 1, p_149681_4_) == this) p_149681_1_.setBlockToAir(p_149681_2_, p_149681_3_ - 1, p_149681_4_); - + else if (p_149681_5_ < 7 && p_149681_1_.getBlock(p_149681_2_, p_149681_3_ + 1, p_149681_4_) == this) p_149681_1_.setBlockToAir(p_149681_2_, p_149681_3_ + 1, p_149681_4_); } diff --git a/src/main/java/noppes/npcs/blocks/tiles/TileShortLamp.java b/src/main/java/noppes/npcs/blocks/tiles/TileShortLamp.java new file mode 100644 index 000000000..1e7250368 --- /dev/null +++ b/src/main/java/noppes/npcs/blocks/tiles/TileShortLamp.java @@ -0,0 +1,3 @@ +package noppes.npcs.blocks.tiles; + +public class TileShortLamp extends TileColorable { } diff --git a/src/main/java/noppes/npcs/client/ClientProxy.java b/src/main/java/noppes/npcs/client/ClientProxy.java index 340b14328..1e27b7cec 100644 --- a/src/main/java/noppes/npcs/client/ClientProxy.java +++ b/src/main/java/noppes/npcs/client/ClientProxy.java @@ -108,6 +108,7 @@ public class ClientProxy extends CommonProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileBanner.class, new BlockBannerRenderer()); ClientRegistry.bindTileEntitySpecialRenderer(TileWallBanner.class, new BlockWallBannerRenderer()); ClientRegistry.bindTileEntitySpecialRenderer(TileTallLamp.class, new BlockTallLampRenderer()); + ClientRegistry.bindTileEntitySpecialRenderer(TileShortLamp.class, new BlockShortLampRenderer()); ClientRegistry.bindTileEntitySpecialRenderer(TileChair.class, new BlockChairRenderer()); ClientRegistry.bindTileEntitySpecialRenderer(TileWeaponRack.class, new BlockWeaponRackRenderer()); ClientRegistry.bindTileEntitySpecialRenderer(TileCrate.class, new BlockCrateRenderer()); diff --git a/src/main/java/noppes/npcs/client/model/blocks/lamp/ModelShortLamp.java b/src/main/java/noppes/npcs/client/model/blocks/lamp/ModelShortLamp.java new file mode 100644 index 000000000..440faa0f3 --- /dev/null +++ b/src/main/java/noppes/npcs/client/model/blocks/lamp/ModelShortLamp.java @@ -0,0 +1,78 @@ +package noppes.npcs.client.model.blocks.lamp; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelBox; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +public class ModelShortLamp extends ModelBase { + public final ModelRenderer Shade; + private final ModelRenderer cube_r1; + private final ModelRenderer cube_r2; + public final ModelRenderer Lamp; + private final ModelRenderer cube_r3; + private final ModelRenderer cube_r4; + private final ModelRenderer cube_r5; + public final ModelRenderer Light; + + public ModelShortLamp() { + textureWidth = 64; + textureHeight = 64; + + Shade = new ModelRenderer(this); + Shade.setRotationPoint(-4.0F, 12.0F, 0.0F); + Shade.cubeList.add(new ModelBox(Shade, 0, 8, 0.0F, -4.0F, -4.0F, 8, 8, 0, 0.0F)); + Shade.cubeList.add(new ModelBox(Shade, -8, 0, 0.0F, -4.0F, -4.0F, 8, 0, 8, 0.0F)); + Shade.cubeList.add(new ModelBox(Shade, 0, 8, 0.0F, -4.0F, 4.0F, 8, 8, 0, 0.0F)); + + cube_r1 = new ModelRenderer(this); + cube_r1.setRotationPoint(0.0F, 0.0F, 0.0F); + Shade.addChild(cube_r1); + setRotationAngle(cube_r1, 0.0F, 1.5708F, 0.0F); + cube_r1.cubeList.add(new ModelBox(cube_r1, 0, 8, -4.0F, -4.0F, 0.0F, 8, 8, 0, 0.0F)); + + cube_r2 = new ModelRenderer(this); + cube_r2.setRotationPoint(8.0F, 0.0F, 0.0F); + Shade.addChild(cube_r2); + setRotationAngle(cube_r2, 0.0F, 1.5708F, 0.0F); + cube_r2.cubeList.add(new ModelBox(cube_r2, 0, 8, -4.0F, -4.0F, 0.0F, 8, 8, 0, 0.0F)); + + Lamp = new ModelRenderer(this); + Lamp.setRotationPoint(0.0F, 24.0F, 0.0F); + Lamp.cubeList.add(new ModelBox(Lamp, 28, 8, -3.0F, -6.0F, -3.0F, 6, 6, 6, 0.0F)); + Lamp.cubeList.add(new ModelBox(Lamp, 20, 5, -1.0F, -9.0F, -1.0F, 2, 3, 2, 0.0F)); + Lamp.cubeList.add(new ModelBox(Lamp, 20, 0, -1.0F, -16.0F, -1.0F, 2, 3, 2, 0.0F)); + Lamp.cubeList.add(new ModelBox(Lamp, 14, 0, -3.0F, -16.0F, -1.0F, 2, 0, 2, 0.0F)); + + cube_r3 = new ModelRenderer(this); + cube_r3.setRotationPoint(0.0F, -16.0F, -2.5F); + Lamp.addChild(cube_r3); + setRotationAngle(cube_r3, 0.0F, -1.5708F, 0.0F); + cube_r3.cubeList.add(new ModelBox(cube_r3, 14, 0, -0.5F, 0.0F, -1.0F, 2, 0, 2, 0.0F)); + + cube_r4 = new ModelRenderer(this); + cube_r4.setRotationPoint(0.0F, -16.0F, 2.5F); + Lamp.addChild(cube_r4); + setRotationAngle(cube_r4, 0.0F, 1.5708F, 0.0F); + cube_r4.cubeList.add(new ModelBox(cube_r4, 14, 0, -0.5F, 0.0F, -1.0F, 2, 0, 2, 0.0F)); + + cube_r5 = new ModelRenderer(this); + cube_r5.setRotationPoint(2.5F, -16.0F, 0.0F); + Lamp.addChild(cube_r5); + setRotationAngle(cube_r5, -3.1416F, 0.0F, 0.0F); + cube_r5.cubeList.add(new ModelBox(cube_r5, 14, 0, -1.5F, 0.0F, -1.0F, 2, 0, 2, 0.0F)); + + Light = new ModelRenderer(this); + Light.setRotationPoint(0.0F, 24.0F, 0.0F); + Light.cubeList.add(new ModelBox(Light, 28, 0, -2.0F, -13.0F, -2.0F, 4, 4, 4, 0.0F)); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) {} + + public void setRotationAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } +} diff --git a/src/main/java/noppes/npcs/client/model/blocks/lamp/ModelTallLamp.java b/src/main/java/noppes/npcs/client/model/blocks/lamp/ModelTallLamp.java new file mode 100644 index 000000000..41ebee6dd --- /dev/null +++ b/src/main/java/noppes/npcs/client/model/blocks/lamp/ModelTallLamp.java @@ -0,0 +1,78 @@ +package noppes.npcs.client.model.blocks.lamp; + +import net.minecraft.client.model.ModelBase; +import net.minecraft.client.model.ModelBox; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.entity.Entity; + +public class ModelTallLamp extends ModelBase { + public final ModelRenderer Shade; + private final ModelRenderer cube_r1; + private final ModelRenderer cube_r2; + public final ModelRenderer Lamp; + private final ModelRenderer cube_r3; + private final ModelRenderer cube_r4; + private final ModelRenderer cube_r5; + public final ModelRenderer Light; + + public ModelTallLamp() { + textureWidth = 64; + textureHeight = 64; + + Shade = new ModelRenderer(this); + Shade.setRotationPoint(0.0F, -6.0F, 7.0F); + Shade.cubeList.add(new ModelBox(Shade, 0, 12, -6.0F, -2.0F, -13.0F, 12, 12, 0, 0.0F)); + Shade.cubeList.add(new ModelBox(Shade, -12, 0, -6.0F, -2.0F, -13.0F, 12, 0, 12, 0.0F)); + Shade.cubeList.add(new ModelBox(Shade, 0, 12, -6.0F, -2.0F, -1.0F, 12, 12, 0, 0.0F)); + + cube_r1 = new ModelRenderer(this); + cube_r1.setRotationPoint(6.0F, 4.0F, -7.0F); + Shade.addChild(cube_r1); + setRotationAngle(cube_r1, 0.0F, 1.5708F, 0.0F); + cube_r1.cubeList.add(new ModelBox(cube_r1, 0, 12, -6.0F, -6.0F, 0.0F, 12, 12, 0, 0.0F)); + + cube_r2 = new ModelRenderer(this); + cube_r2.setRotationPoint(-6.0F, 4.0F, -7.0F); + Shade.addChild(cube_r2); + setRotationAngle(cube_r2, 0.0F, 1.5708F, 0.0F); + cube_r2.cubeList.add(new ModelBox(cube_r2, 0, 12, -6.0F, -6.0F, 0.0F, 12, 12, 0, 0.0F)); + + Lamp = new ModelRenderer(this); + Lamp.setRotationPoint(0.0F, 24.0F, 0.0F); + Lamp.cubeList.add(new ModelBox(Lamp, 40, 22, -3.0F, -2.0F, -3.0F, 6, 2, 6, 0.0F)); + Lamp.cubeList.add(new ModelBox(Lamp, 32, 5, -1.0F, -25.0F, -1.0F, 2, 23, 2, 0.0F)); + Lamp.cubeList.add(new ModelBox(Lamp, 32, 0, -1.0F, -32.0F, -1.0F, 2, 3, 2, 0.0F)); + Lamp.cubeList.add(new ModelBox(Lamp, 22, 0, -4.0F, -32.0F, -1.0F, 3, 0, 2, 0.0F)); + + cube_r3 = new ModelRenderer(this); + cube_r3.setRotationPoint(0.0F, -32.0F, -2.5F); + Lamp.addChild(cube_r3); + setRotationAngle(cube_r3, 0.0F, -1.5708F, 0.0F); + cube_r3.cubeList.add(new ModelBox(cube_r3, 22, 0, -1.5F, 0.0F, -1.0F, 3, 0, 2, 0.0F)); + + cube_r4 = new ModelRenderer(this); + cube_r4.setRotationPoint(0.0F, -32.0F, 2.5F); + Lamp.addChild(cube_r4); + setRotationAngle(cube_r4, 0.0F, 1.5708F, 0.0F); + cube_r4.cubeList.add(new ModelBox(cube_r4, 22, 0, -1.5F, 0.0F, -1.0F, 3, 0, 2, 0.0F)); + + cube_r5 = new ModelRenderer(this); + cube_r5.setRotationPoint(2.5F, -32.0F, 0.0F); + Lamp.addChild(cube_r5); + setRotationAngle(cube_r5, -3.1416F, 0.0F, 0.0F); + cube_r5.cubeList.add(new ModelBox(cube_r5, 22, 0, -1.5F, 0.0F, -1.0F, 3, 0, 2, 0.0F)); + + Light = new ModelRenderer(this); + Light.setRotationPoint(0.0F, 24.0F, 0.0F); + Light.cubeList.add(new ModelBox(Light, 40, 14, -2.0F, -29.0F, -2.0F, 4, 4, 4, 0.0F)); + } + + @Override + public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) {} + + public void setRotationAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } +} diff --git a/src/main/java/noppes/npcs/client/model/blocks/ModelTallLamp.java b/src/main/java/noppes/npcs/client/model/blocks/legacy/ModelLegacyTallLamp.java similarity index 92% rename from src/main/java/noppes/npcs/client/model/blocks/ModelTallLamp.java rename to src/main/java/noppes/npcs/client/model/blocks/legacy/ModelLegacyTallLamp.java index 1dbbeba38..3cbeb2977 100644 --- a/src/main/java/noppes/npcs/client/model/blocks/ModelTallLamp.java +++ b/src/main/java/noppes/npcs/client/model/blocks/legacy/ModelLegacyTallLamp.java @@ -1,10 +1,10 @@ -package noppes.npcs.client.model.blocks; +package noppes.npcs.client.model.blocks.legacy; import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelRenderer; import net.minecraft.entity.Entity; -public class ModelTallLamp extends ModelBase +public class ModelLegacyTallLamp extends ModelBase { //fields ModelRenderer Base; @@ -13,37 +13,37 @@ public class ModelTallLamp extends ModelBase ModelRenderer LampShadeStick2; ModelRenderer LampShadeStick3; ModelRenderer LampShadeStick4; - - public ModelTallLamp() + + public ModelLegacyTallLamp() { Base = new ModelRenderer(this, 6, 2); Base.addBox(-6F, 0F, -6F, 12, 1, 12); Base.setRotationPoint(0F, 23F, 0F); - + MiddleStick = new ModelRenderer(this, 12, 2); MiddleStick.addBox(-1F, 0F, -1F, 2, 28, 2); MiddleStick.setRotationPoint(0F, -5F, 0F); - + LampShadeStick1 = new ModelRenderer(this, 0, 30); LampShadeStick1.addBox(0F, 0F, 0F, 5, 1, 1); LampShadeStick1.setRotationPoint(1F, -1F, -0.5F); - + LampShadeStick2 = new ModelRenderer(this, 0, 30); LampShadeStick2.addBox(0F, 0F, 0F, 5, 1, 1); LampShadeStick2.setRotationPoint(-0.5F, -1F, -1F); setRotation(LampShadeStick2, 0F, 1.570796F, 0F); - + LampShadeStick3 = new ModelRenderer(this, 0, 30); LampShadeStick3.addBox(0F, 0F, 0F, 5, 1, 1); LampShadeStick3.setRotationPoint(-1F, -1F, 0.5F); setRotation(LampShadeStick3, 0F, 3.141593F, 0F); - + LampShadeStick4 = new ModelRenderer(this, 0, 30); LampShadeStick4.addBox(0F, 0F, 0F, 5, 1, 1); LampShadeStick4.setRotationPoint(0.5F, -1F, 1F); setRotation(LampShadeStick4, 0F, -1.570796F, 0F); } - + @Override public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { @@ -55,7 +55,7 @@ public class ModelTallLamp extends ModelBase LampShadeStick3.render(f5); LampShadeStick4.render(f5); } - + private void setRotation(ModelRenderer model, float x, float y, float z) { model.rotateAngleX = x; diff --git a/src/main/java/noppes/npcs/client/model/blocks/ModelTallLampTop.java b/src/main/java/noppes/npcs/client/model/blocks/legacy/ModelLegacyTallLampTop.java similarity index 89% rename from src/main/java/noppes/npcs/client/model/blocks/ModelTallLampTop.java rename to src/main/java/noppes/npcs/client/model/blocks/legacy/ModelLegacyTallLampTop.java index c430be87a..f1c63db60 100644 --- a/src/main/java/noppes/npcs/client/model/blocks/ModelTallLampTop.java +++ b/src/main/java/noppes/npcs/client/model/blocks/legacy/ModelLegacyTallLampTop.java @@ -1,35 +1,35 @@ -package noppes.npcs.client.model.blocks; +package noppes.npcs.client.model.blocks.legacy; import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelRenderer; import net.minecraft.entity.Entity; -public class ModelTallLampTop extends ModelBase +public class ModelLegacyTallLampTop extends ModelBase { ModelRenderer LampShade1; ModelRenderer LampShade3; ModelRenderer LampShade2; ModelRenderer LampShade4; - - public ModelTallLampTop() + + public ModelLegacyTallLampTop() { LampShade1 = new ModelRenderer(this, 0, 0); LampShade1.addBox(-.5F, -6F, -6F, 1, 12, 12); LampShade1.setRotationPoint(6F, -1F, 0F); - + LampShade3 = new ModelRenderer(this, 0, 0); LampShade3.addBox(-6F, -6F, -.5F, 12, 12, 1); LampShade3.setRotationPoint(0F, -1F, -6F); - + LampShade2 = new ModelRenderer(this, 0, 0); LampShade2.addBox(-.5F, -6F, -6F, 1, 12, 12); LampShade2.setRotationPoint(-6F, -1F, 0F); - + LampShade4 = new ModelRenderer(this, 0, 0); LampShade4.addBox(-6F, -6F, -.5F, 12, 12, 1); LampShade4.setRotationPoint(0F, -1F, 6F); } - + @Override public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { @@ -39,7 +39,7 @@ public class ModelTallLampTop extends ModelBase LampShade2.render(f5); LampShade4.render(f5); } - + private void setRotation(ModelRenderer model, float x, float y, float z) { model.rotateAngleX = x; diff --git a/src/main/java/noppes/npcs/client/renderer/blocks/BlockShortLampRenderer.java b/src/main/java/noppes/npcs/client/renderer/blocks/BlockShortLampRenderer.java new file mode 100644 index 000000000..fd6bcf1f9 --- /dev/null +++ b/src/main/java/noppes/npcs/client/renderer/blocks/BlockShortLampRenderer.java @@ -0,0 +1,104 @@ +package noppes.npcs.client.renderer.blocks; + +import cpw.mods.fml.client.registry.RenderingRegistry; +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import noppes.npcs.CustomItems; +import noppes.npcs.blocks.BlockShortLamp; +import noppes.npcs.blocks.tiles.TileShortLamp; +import noppes.npcs.client.model.blocks.lamp.ModelShortLamp; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class BlockShortLampRenderer extends BlockRendererInterface { + + private final ModelShortLamp model = new ModelShortLamp(); + + public static final ResourceLocation wood = new ResourceLocation("customnpcs","textures/models/lamp/short/wood.png"); + public static final ResourceLocation stone = new ResourceLocation("customnpcs","textures/models/lamp/short/stone.png"); + public static final ResourceLocation iron = new ResourceLocation("customnpcs","textures/models/lamp/short/iron.png"); + public static final ResourceLocation gold = new ResourceLocation("customnpcs","textures/models/lamp/short/gold.png"); + public static final ResourceLocation diamond = new ResourceLocation("customnpcs","textures/models/lamp/short/diamond.png"); + + public BlockShortLampRenderer(){ + ((BlockShortLamp)CustomItems.shortLamp).renderId = RenderingRegistry.getNextAvailableRenderId(); + RenderingRegistry.registerBlockHandler(this); + } + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float partialTicks) { + TileShortLamp tile = (TileShortLamp) tileEntity; + GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glPushMatrix(); + + GL11.glTranslatef((float)x + 0.5f, (float)y + 1.5f, (float)z + 0.5f); + GL11.glRotatef(180, 0, 0, 1); + GL11.glRotatef(90 * tile.rotation, 0, 1, 0); + GL11.glColor3f(1, 1, 1); + + setLampTexture(tileEntity.getBlockMetadata()); + model.Lamp.render(0.0625F); + int light = tileEntity.getWorldObj().getLightBrightnessForSkyBlocks(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord, 0); + int brightX = light % 65536; + int brightY = light / 65536; + + // Set full brightness for the light + int fullBright = 0xF000F0; + int fullBrightX = fullBright % 65536; + int fullBrightY = fullBright / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)fullBrightX, (float)fullBrightY); + model.Light.render(0.0625F); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)brightX, (float)brightY); + + float[] color = BlockBannerRenderer.colorTable[tile.color]; + GL11.glColor3f(color[0], color[1], color[2]); + model.Shade.render(0.0625F); + + GL11.glPopAttrib(); + GL11.glPopMatrix(); + } + + @Override + public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { + GL11.glPushMatrix(); + // Adjust transformation for inventory rendering. + GL11.glTranslatef(0, 0.42f, 0); + GL11.glScalef(0.76f, 0.76f, 0.76f); + GL11.glRotatef(180, 0, 0, 1); + GL11.glRotatef(180, 0, 1, 0); + + setLampTexture(metadata); + model.Lamp.render(0.0625F); + model.Light.render(0.0625F); + float[] color = BlockBannerRenderer.colorTable[15 - metadata]; + GL11.glColor3f(color[0], color[1], color[2]); + model.Shade.render(0.0625F); + + GL11.glPopMatrix(); + } + + public void setLampTexture(int meta){ + TextureManager manager = Minecraft.getMinecraft().getTextureManager(); + if(meta == 1) + manager.bindTexture(stone); + else if(meta == 2) + manager.bindTexture(iron); + else if(meta == 3) + manager.bindTexture(gold); + else if(meta == 4) + manager.bindTexture(diamond); + else + manager.bindTexture(wood); + } + + @Override + public int getRenderId() { + return CustomItems.shortLamp.getRenderType(); + } +} diff --git a/src/main/java/noppes/npcs/client/renderer/blocks/BlockTallLampRenderer.java b/src/main/java/noppes/npcs/client/renderer/blocks/BlockTallLampRenderer.java index 24a20cc90..92681e5c7 100644 --- a/src/main/java/noppes/npcs/client/renderer/blocks/BlockTallLampRenderer.java +++ b/src/main/java/noppes/npcs/client/renderer/blocks/BlockTallLampRenderer.java @@ -2,24 +2,37 @@ package noppes.npcs.client.renderer.blocks; import cpw.mods.fml.client.registry.RenderingRegistry; import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.texture.TextureManager; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ResourceLocation; import noppes.npcs.CustomItems; import noppes.npcs.blocks.BlockTallLamp; import noppes.npcs.blocks.tiles.TileTallLamp; -import noppes.npcs.client.model.blocks.ModelTallLamp; -import noppes.npcs.client.model.blocks.ModelTallLampTop; +import noppes.npcs.client.model.blocks.lamp.ModelTallLamp; +import noppes.npcs.client.model.blocks.legacy.ModelLegacyTallLamp; +import noppes.npcs.client.model.blocks.legacy.ModelLegacyTallLampTop; +import noppes.npcs.config.ConfigClient; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; public class BlockTallLampRenderer extends BlockRendererInterface{ - private final ModelTallLamp model = new ModelTallLamp(); - - private final ModelTallLampTop top = new ModelTallLampTop(); + private final ModelLegacyTallLamp modelLegacy = new ModelLegacyTallLamp(); + private final ModelLegacyTallLampTop topLegacy = new ModelLegacyTallLampTop(); public static final ResourceLocation resourceTop = new ResourceLocation("customnpcs","textures/cache/wool_colored_white.png"); + + private final ModelTallLamp model = new ModelTallLamp(); + + public static final ResourceLocation wood = new ResourceLocation("customnpcs","textures/models/lamp/tall/wood.png"); + public static final ResourceLocation stone = new ResourceLocation("customnpcs","textures/models/lamp/tall/stone.png"); + public static final ResourceLocation iron = new ResourceLocation("customnpcs","textures/models/lamp/tall/iron.png"); + public static final ResourceLocation gold = new ResourceLocation("customnpcs","textures/models/lamp/tall/gold.png"); + public static final ResourceLocation diamond = new ResourceLocation("customnpcs","textures/models/lamp/tall/diamond.png"); + public BlockTallLampRenderer(){ ((BlockTallLamp)CustomItems.tallLamp).renderId = RenderingRegistry.getNextAvailableRenderId(); RenderingRegistry.registerBlockHandler(this); @@ -33,18 +46,38 @@ public class BlockTallLampRenderer extends BlockRendererInterface{ GL11.glDisable(GL12.GL_RESCALE_NORMAL); GL11.glPushMatrix(); GL11.glTranslatef((float)var2 + 0.5f, (float)var4 + 1.5f, (float)var6 + 0.5f); - //GL11.glScalef(0.95f, 0.95f, 0.95f); GL11.glRotatef(180, 0, 0, 1); GL11.glRotatef(90 * tile.rotation, 0, 1, 0); GL11.glColor3f(1, 1, 1); - setMaterialTexture(var1.getBlockMetadata()); - model.render(null, 0, 0, 0, 0, 0.0F, 0.0625F); + if(ConfigClient.LegacyTallLamp){ + setMaterialTexture(var1.getBlockMetadata()); + modelLegacy.render(null, 0, 0, 0, 0, 0.0F, 0.0625F); + + this.bindTexture(resourceTop); + float[] color = BlockBannerRenderer.colorTable[tile.color]; + GL11.glColor3f(color[0], color[1], color[2]); + topLegacy.render(null, 0, 0, 0, 0, 0.0F, 0.0625F); + } else { + setLampTexture(var1.getBlockMetadata()); + model.Lamp.render(0.0625F); + int light = var1.getWorldObj().getLightBrightnessForSkyBlocks(var1.xCoord, var1.yCoord, var1.zCoord, 0); + int brightX = light % 65536; + int brightY = light / 65536; + + // Set full brightness for the light + int fullBright = 0xF000F0; + int fullBrightX = fullBright % 65536; + int fullBrightY = fullBright / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)fullBrightX, (float)fullBrightY); + model.Light.render(0.0625F); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)brightX, (float)brightY); + + float[] color = BlockBannerRenderer.colorTable[tile.color]; + GL11.glColor3f(color[0], color[1], color[2]); + model.Shade.render(0.0625F); + } - this.bindTexture(resourceTop); - float[] color = BlockBannerRenderer.colorTable[tile.color]; - GL11.glColor3f(color[0], color[1], color[2]); - top.render(null, 0, 0, 0, 0, 0.0F, 0.0625F); GL11.glPopAttrib(); GL11.glPopMatrix(); } @@ -57,18 +90,40 @@ public class BlockTallLampRenderer extends BlockRendererInterface{ GL11.glScalef(0.76f, 0.66f, 0.76f); GL11.glRotatef(180, 0, 0, 1); GL11.glRotatef(180, 0, 1, 0); + if(ConfigClient.LegacyTallLamp){ + setMaterialTexture(metadata); + GL11.glColor3f(1, 1, 1); + modelLegacy.render(null, 0, 0, 0, 0, 0.0F, 0.0625F); - setMaterialTexture(metadata); - GL11.glColor3f(1, 1, 1); - model.render(null, 0, 0, 0, 0, 0.0F, 0.0625F); + this.bindTexture(resourceTop); + float[] color = BlockBannerRenderer.colorTable[15 - metadata]; + GL11.glColor3f(color[0], color[1], color[2]); + topLegacy.render(null, 0, 0, 0, 0, 0.0F, 0.0625F); + } else { + setLampTexture(metadata); + model.Lamp.render(0.0625F); + model.Light.render(0.0625F); + float[] color = BlockBannerRenderer.colorTable[15 - metadata]; + GL11.glColor3f(color[0], color[1], color[2]); + model.Shade.render(0.0625F); + } - this.bindTexture(resourceTop); - float[] color = BlockBannerRenderer.colorTable[15 - metadata]; - GL11.glColor3f(color[0], color[1], color[2]); - top.render(null, 0, 0, 0, 0, 0.0F, 0.0625F); GL11.glPopMatrix(); } + public void setLampTexture(int meta){ + TextureManager manager = Minecraft.getMinecraft().getTextureManager(); + if(meta == 1) + manager.bindTexture(stone); + else if(meta == 2) + manager.bindTexture(iron); + else if(meta == 3) + manager.bindTexture(gold); + else if(meta == 4) + manager.bindTexture(diamond); + else + manager.bindTexture(wood); + } @Override public int getRenderId() { diff --git a/src/main/java/noppes/npcs/config/ConfigClient.java b/src/main/java/noppes/npcs/config/ConfigClient.java index bc320a60f..4d2ac9950 100644 --- a/src/main/java/noppes/npcs/config/ConfigClient.java +++ b/src/main/java/noppes/npcs/config/ConfigClient.java @@ -93,6 +93,7 @@ public class ConfigClient public static boolean LegacyAnvil = false; public static boolean LegacyLantern = false; public static boolean LegacyCandle = false; + public static boolean LegacyTallLamp = false; public static void init(File configFile) { @@ -163,6 +164,7 @@ public class ConfigClient LegacyCarpentryBench = config.get(MODEL, "Legacy Carpentry Bench Model", false).getBoolean(false); LegacyLantern = config.get(MODEL, "Legacy Lantern Model", false).getBoolean(false); LegacyCandle = config.get(MODEL, "Legacy Candle Model", false).getBoolean(false); + LegacyTallLamp = config.get(MODEL, "Legacy Tall Lamp Model", false).getBoolean(false); // Convert to Legacy if(CustomNpcs.legacyExist){ diff --git a/src/main/resources/assets/customnpcs/lang/en_US.lang b/src/main/resources/assets/customnpcs/lang/en_US.lang index 792e6dce7..84e559010 100644 --- a/src/main/resources/assets/customnpcs/lang/en_US.lang +++ b/src/main/resources/assets/customnpcs/lang/en_US.lang @@ -21,11 +21,12 @@ tile.npcWallBanner.name=Wall Banner tile.npcChair.name=Chair tile.npcCrate.name=Crate tile.npcTallLamp.name=Tall Lamp +tile.npcShortLamp.name=Short Lamp tile.npcWeaponRack.name=Weapon Rack tile.npcCouchWool.name=Wool Couch tile.npcTable.name=Wooden Table tile.npcCouchWood.name=Wooden Couch -tile.npcLamp.name=Lamp +tile.npcLamp.name=Lantern tile.npcCandle.name=Candle tile.npcStool.name=Stool tile.npcBorder.name=Border diff --git a/src/main/resources/assets/customnpcs/textures/models/lamp/short/diamond.png b/src/main/resources/assets/customnpcs/textures/models/lamp/short/diamond.png new file mode 100644 index 0000000000000000000000000000000000000000..fd83872b6e6ebbb2c7834c35ed4eb3d6c556d847 GIT binary patch literal 1094 zcmV-M1iAZ(P)Px&=1D|BRCt{2n9pk?Wf;dlNyeEbZHilIU7Z$o!+I#`L9|K*@lr%xkUbPBcn}Zb zb^n7!ym;>2e_&a9@KP1oi!5x!t|&AJ64^qNCbqOIo%}GW@o0Eq?4Tr!t=T0 znfLq7kN27P`H@K-A0OKQ?RJ}5tp*R7d{6y*R{<#~N_vnq+QUFU29@?6w0nqJs z*?Ie|6a)Bs;{!XpvH(D*w8#2pj`^31095zOeE;L-!1Izq0hpPY8F&-dIm7f@%Zrq2 zO#q7e6pzj{P1ERhyPh3Ic4Yx&`4!UXo4^M153f?)F9V!8VsngTT^yy|Zbyp4G*`b9 za?a~N|6<>GX@N?8FR<|S>Y-h!?|D1KPda^*et#?W!zY2_ZtFn|)1vfS%Zq2$0!4ia zfO4%#QJ@x*jPG)1vgRw7EbMZ0ziCb!o}l`d|F?x$Td60QJq=^!r<6-G>^XCrLV- z?fv9(xpUPZtViKbg6^+((@@O!`&(xVzL=gQsb?*N;R^BIJ8O10hLb!_x-6y+4i0QZ zQRwx0D2kI3T)Wrn0WeITo0|(f(3f_{_Ls$uX^>U(fRhK@5DBwhJ+zDZ6uT!)Z>(iN zdAEYUpKy0pR9_JnMbk7?RmC(-0M8yamdRuSdYH-lQ#-5XeSJcH;Cx4ODn`r6m8|Lt zC3I$Wk9>4u@K6#Fd0$>;hnxJ?tK zGkk`VYvRt2gQDyDK#xU@UsNB4e=!Xv0OzeYnBck!_sl1tUKx9S91{OCG>Vo1+tW?5 zYMus8iE9~-FFO+k4K+_zonV`$7aDQr$KgMBK&8G%VRoLZIzh)Y`0Jk(mAcc|Oy(DO z5vOx}Y@Sl7R{>(rkHe*YZW@IDQ<+QDm!omUlWLI#K@bE%5ClOG1VIo4K@bE%5ClOG z1VIo4K@bE%5ClQ^fAcT@wpU&mZb=9L000hUSV?A0O#mtY000O800000007cclK=n! M07*qoM6N<$g5x9pGXMYp literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/customnpcs/textures/models/lamp/short/gold.png b/src/main/resources/assets/customnpcs/textures/models/lamp/short/gold.png new file mode 100644 index 0000000000000000000000000000000000000000..0ae101a6993a2d17ca2781025d613e8d9152bc43 GIT binary patch literal 1094 zcmV-M1iAZ(P)Px&=1D|BRCt{2n9pnEWEjUk`O!>gY{}4(vY0L6pmos-i!RcWf-8u7E$V+D=%EW9 z{TmjcdrIZN&*zdS z&-YF8zHi>=dEP`hJUsLPY}=+@uLEFN7KK8AD5LcHgZE?Y-uV1?1>m=@ZurJzzm40n zdFzXc!VsRVeCX#F=KydX)%aw!!1Whi2Vi&aDL?+QI`q1%&;e#nhP~!vVhyNLwgkY#X0m_ub`@TfEBL)dX3$^rvQVASWP{sH0ZW%j}*sgfj;x< z&ymU5;*YQ2^yhCpqgsg%yuDubtCeE7LZYbZ9eTaB3v~bT=)tlc#yD-1zHoaQm}Z_@ zxFXzo-(Ijz-@|!S16D$Ncdro(fvZN({Ej6P0Ap}W+R2zt@^Hx}zqmipZCHx8FW&tj z)107N){xgSV4OBeSDybqmIVL&d!N@{z7{V1_Tx|eXv_l`Z{MZYTO%KI>I^+g)MU1g zQYaKoRfD8Hif9rHj^RTSG2iR04F-HZJxi3!mce9&_~4x-KN-VWo@ZSam4kx=U)OcI z-7dP`PYHqD?REher_avL#yaG0zU#-zV#$O?voDs+Fhr8H*UP?P&EXvHhd!;@VdIHG zbUzWStWo=lwCK594#O~TUAN!qfj!QrXuRp2cBvS`f?4*OxP z_sj{jW(T)rv+)za(I5#HPnFfnpabEX>~v0+SM=?krKh32UiQ6297mURv460l%$1beb>(Qs4sh=0moFISmGkWR*YU4isu}h0>047T> zp-dU{O3SFd4V)+60Hki82Hmo(p))qhe_nkY(ZMKfC-f_A2Om(mPp`Cm;r40B{$uD2 zv}Olo=N_~j6o8V679_S8O_WBnuN~hDLnCebG^kk&Dh<_25oKzyB`TRXJDXH1MXHq| z&dz4|HK|M)p+8Ogv|Q=$reQ>Xl?9CYb951ZR$F925ClOG1VIo4K@bE%5ClOG1VIo4 zK@bE%5ClOG1VIq~-~0!)Qcf*N9!>WE000hUSV?A0O#mtY000O800000007cclK=n! M07*qoM6N<$g8Xd*tpET3 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/customnpcs/textures/models/lamp/short/iron.png b/src/main/resources/assets/customnpcs/textures/models/lamp/short/iron.png new file mode 100644 index 0000000000000000000000000000000000000000..82cf422084be8c0bfec0a820e73f27141ce60c1d GIT binary patch literal 999 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/customnpcs/textures/models/lamp/tall/gold.png b/src/main/resources/assets/customnpcs/textures/models/lamp/tall/gold.png new file mode 100644 index 0000000000000000000000000000000000000000..278ec5b392c90e744ea6a5e918fc0972b7ae6d4a GIT binary patch literal 1268 zcmVPx(lu1NERCt{2nNMpQM;M16X-6wo6)2VhHI__ppmo4Dn4|>LLkqo>rll7j+IxE} z7y|toE%^q$x)2IExb#v;Pw62LYMVNRrW8v;ph~u|k?88r_8`q_c5Ury?8pgao{MH@ ze(cUW^UiN(SBYk`>7mf;_0&s*5JVBD|LePVSzUJnb$icj?%Y2}sCDh9%bwNhPHdkQ z0-)V)b98h>yWIw$*=z!k&*uTiWHQXn&5_Au(AD4m_)RF}==}X00O!Usw~H;fe-P-1 z)#}pErTG1E;>>`}l0>uF^eUAKYinzfBfh)4>lKSd0Ce>Ed_Ge5@6R{AelCTaeTl3~ zfAC_anc!zY9I8fFABA091fW9=Cp$kZpN`5|fEQEU=c0)48jeCoJGH)$1Hc*mhRd@i z3F9>!g{sljN0GSxD3Q4SC?P#!@B1?DZ+m|IR5!T<$yq;OTAUlpzES>haP7*TD`4#2 zQK%YSeH0(Qx9OD@R`~KOC|6SelonR_;`2|ua&@1det9@s6O7yELt@>V$7+7~b`K}} z51rE*z{m(6``4K}T94Ew3HbYa6sks7ABA*&wHzFb*&+bu=H}Sl-Sy%QHWFR^H2A?5 zaxfYIu3$G1Fzm3Lv0kso($dmca84TQ>f;E{_*KljB&qJzvMhw~0|~e5>Mug)wB`@W ztVs$Xuq+G5ar_`0$H8$NU>Ka^I9QhD2dblwMNRW7JOD|AWm(v^4S;1?SeAwBy4bc& zI-T}~wr%6Ou3y&C#}P>RM(h0Yh~ozzdCtb@`26IM&mLwdEvx`=k!{mI2%Vgq0MPIE z>G%7%u1mk)545T1>Z1s!yw&QSc{!3e8;gi{-on1Sg|o3pX<>zOb)Rx|-yaAalCtvv zjYh+7kip108KACy79^AR7z}n^%Dn^(JD*Ocab1^QuNN>h+qMxx1cK4kM-oc;&S?#6 zba|c;cAgvp5Bzeu+6XKGU4#rkc321zaCdbbtMxkiIQ(?a4*kGw9RkDh@q?RzH6Lbs zvyHP+8@0D#Gw2c5wtkHC1R*;rJ1-4R*1N7tCX+d{z3J$6>E}{@S+4nH@*Z;L?YmnH z20J)1h?w>$k`SClfNr--w>vf=HO()gk3voJNqc{I%?}1UqkyMtk3y&&uh;9O(`kyu zVgjI2sd)8zooqHsuh$C%c@h12gi~Jq1^D#q2Bn2<0Ls;&!Il>0fo#Z{Iow#@`jA zzA}rr4g#@3Tvi{(ACQQX;p)1JU0kGdTJt?a4P0Uu7g^=3c}iaW7okE9Cp$l${R?v5 zYxOj|`T+y|aWz%Sl4??3ER}V&$*n4IpP0+0j z*SK$ja?L9yIEgFy|1ApjKS60;>b3mK%*oFCSrXREHno0Q{cAq}fByQ0@9vWDc6Zr& zgTY`h7z_r3!C){L3TF0000R}N8 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/customnpcs/textures/models/lamp/tall/iron.png b/src/main/resources/assets/customnpcs/textures/models/lamp/tall/iron.png new file mode 100644 index 0000000000000000000000000000000000000000..348c2bdc6f7d4214f1e46cb6e4b2907e5b7c52a2 GIT binary patch literal 1176 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