From 0dca95c044e0844c1e88c1650a11fa5c0b6de67b Mon Sep 17 00:00:00 2001 From: Boblet Date: Tue, 24 Aug 2021 13:18:09 +0200 Subject: [PATCH] improved mushroom physics, UFFR assets, ducrete --- src/main/java/com/hbm/blocks/ModBlocks.java | 73 +++-- .../com/hbm/blocks/generic/BlockMush.java | 290 +++++++++++------- .../com/hbm/blocks/generic/BlockNTMGlass.java | 42 +-- .../com/hbm/blocks/generic/WasteEarth.java | 62 ++-- src/main/java/com/hbm/items/ModItems.java | 3 + .../hbm/items/block/ItemBlockBlastInfo.java | 29 ++ .../com/hbm/items/block/ItemBlockColored.java | 2 +- .../java/com/hbm/main/CraftingManager.java | 3 +- .../hbm/textures/blocks/brick_ducrete.png | Bin 0 -> 2197 bytes .../assets/hbm/textures/blocks/ducrete.png | Bin 0 -> 1999 bytes .../hbm/textures/blocks/ducrete_tile.png | Bin 0 -> 1963 bytes .../hbm/textures/blocks/glass_quartz.png | Bin 0 -> 5466 bytes .../textures/blocks/reinforced_ducrete.png | Bin 0 -> 2160 bytes .../hbm/textures/blocks/sand_quartz.png | Bin 0 -> 2845 bytes .../items/coil_magnetized_tungsten_torus.png | Bin 0 -> 5940 bytes .../hbm/textures/items/crystal_cinnebar.png | Bin 0 -> 540 bytes .../hbm/textures/items/ingot_silicon.png | Bin 0 -> 159 bytes .../hbm/textures/items/ingot_staballoy.png | Bin 0 -> 2041 bytes .../hbm/textures/items/wafer_diamond.png | Bin 0 -> 1657 bytes .../assets/hbm/textures/items/wafer_gold.png | Bin 0 -> 1643 bytes .../assets/hbm/textures/items/wafer_lapis.png | Bin 0 -> 1653 bytes .../hbm/textures/items/wafer_silicon.png | Bin 0 -> 1629 bytes .../assets/hbm/textures/items/wafer_spark.png | Bin 0 -> 1696 bytes 23 files changed, 307 insertions(+), 197 deletions(-) create mode 100644 src/main/java/com/hbm/items/block/ItemBlockBlastInfo.java create mode 100644 src/main/resources/assets/hbm/textures/blocks/brick_ducrete.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/ducrete.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/ducrete_tile.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/glass_quartz.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/reinforced_ducrete.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/sand_quartz.png create mode 100644 src/main/resources/assets/hbm/textures/items/coil_magnetized_tungsten_torus.png create mode 100644 src/main/resources/assets/hbm/textures/items/crystal_cinnebar.png create mode 100644 src/main/resources/assets/hbm/textures/items/ingot_silicon.png create mode 100644 src/main/resources/assets/hbm/textures/items/ingot_staballoy.png create mode 100644 src/main/resources/assets/hbm/textures/items/wafer_diamond.png create mode 100644 src/main/resources/assets/hbm/textures/items/wafer_gold.png create mode 100644 src/main/resources/assets/hbm/textures/items/wafer_lapis.png create mode 100644 src/main/resources/assets/hbm/textures/items/wafer_silicon.png create mode 100644 src/main/resources/assets/hbm/textures/items/wafer_spark.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 04d345880..1d68c5831 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -263,8 +263,9 @@ public class ModBlocks { public static Block gravel_diamond; public static Block asphalt; public static Block asphalt_light; - + public static Block reinforced_brick; + public static Block reinforced_ducrete; public static Block reinforced_glass; public static Block reinforced_light; public static Block reinforced_sand; @@ -283,12 +284,15 @@ public class ModBlocks { public static Block concrete_colored; public static Block concrete; public static Block concrete_asbestos; + public static Block ducrete_smooth; + public static Block ducrete; public static Block concrete_pillar; public static Block brick_concrete; public static Block brick_concrete_mossy; public static Block brick_concrete_cracked; public static Block brick_concrete_broken; public static Block brick_concrete_marked; + public static Block brick_ducrete; public static Block brick_obsidian; public static Block brick_light; public static Block brick_compound; @@ -376,6 +380,7 @@ public class ModBlocks { public static Block sand_lead; public static Block sand_uranium; public static Block sand_polonium; + public static Block sand_quartz; public static Block sand_gold; public static Block ash_digamma; public static Block glass_boron; @@ -384,6 +389,8 @@ public class ModBlocks { public static Block glass_trinitite; public static Block glass_polonium; public static Block glass_ash; + public static Block glass_quartz; + public static Block mush; public static Block mush_block; @@ -1410,6 +1417,12 @@ public class ModBlocks { cmb_brick_reinforced = new BlockGeneric(Material.rock).setBlockName("cmb_brick_reinforced").setCreativeTab(MainRegistry.blockTab).setHardness(25.0F).setResistance(60000.0F).setBlockTextureName(RefStrings.MODID + ":cmb_brick_reinforced"); brick_asbestos = new BlockOutgas(Material.rock, true, 5, true).addAsbestos().toBlock().setBlockName("brick_asbestos").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(1000.0F).setBlockTextureName(RefStrings.MODID + ":brick_asbestos"); + + ducrete_smooth = new BlockGeneric(Material.rock).setBlockName("ducrete_smooth").setCreativeTab(MainRegistry.blockTab).setHardness(20.0F).setResistance(8000.0F).setBlockTextureName(RefStrings.MODID + ":ducrete"); + ducrete = new BlockGeneric(Material.rock).setBlockName("ducrete").setCreativeTab(MainRegistry.blockTab).setHardness(20.0F).setResistance(8000.0F).setBlockTextureName(RefStrings.MODID + ":ducrete_tile"); + brick_ducrete = new BlockGeneric(Material.rock).setBlockName("brick_ducrete").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(12000.0F).setBlockTextureName(RefStrings.MODID + ":brick_ducrete"); + reinforced_ducrete = new BlockGeneric(Material.rock).setBlockName("reinforced_ducrete").setCreativeTab(MainRegistry.blockTab).setHardness(20.0F).setResistance(24000.0F).setBlockTextureName(RefStrings.MODID + ":reinforced_ducrete"); + tile_lab = new BlockOutgas(Material.rock, false, 5, true).setBlockName("tile_lab").setStepSound(Block.soundTypeGlass).setCreativeTab(MainRegistry.blockTab).setHardness(1.0F).setResistance(20.0F).setBlockTextureName(RefStrings.MODID + ":tile_lab"); tile_lab_cracked = new BlockOutgas(Material.rock, false, 5, true).setBlockName("tile_lab_cracked").setStepSound(Block.soundTypeGlass).setCreativeTab(MainRegistry.blockTab).setHardness(1.0F).setResistance(20.0F).setBlockTextureName(RefStrings.MODID + ":tile_lab_cracked"); tile_lab_broken = new BlockOutgas(Material.rock, true, 5, true).addAsbestos().toBlock().setBlockName("tile_lab_broken").setStepSound(Block.soundTypeGlass).setCreativeTab(MainRegistry.blockTab).setHardness(1.0F).setResistance(20.0F).setBlockTextureName(RefStrings.MODID + ":tile_lab_broken"); @@ -1490,6 +1503,7 @@ public class ModBlocks { sand_lead = new BlockFalling(Material.sand).setBlockName("sand_lead").setStepSound(Block.soundTypeSand).setCreativeTab(MainRegistry.machineTab).setHardness(0.5F).setBlockTextureName(RefStrings.MODID + ":sand_lead"); sand_uranium = new BlockFalling(Material.sand).setBlockName("sand_uranium").setStepSound(Block.soundTypeSand).setCreativeTab(MainRegistry.machineTab).setHardness(0.5F).setBlockTextureName(RefStrings.MODID + ":sand_uranium"); sand_polonium = new BlockFalling(Material.sand).setBlockName("sand_polonium").setStepSound(Block.soundTypeSand).setCreativeTab(MainRegistry.machineTab).setHardness(0.5F).setBlockTextureName(RefStrings.MODID + ":sand_polonium"); + sand_quartz = new BlockFalling(Material.sand).setBlockName("sand_quartz").setStepSound(Block.soundTypeSand).setCreativeTab(MainRegistry.machineTab).setHardness(0.5F).setBlockTextureName(RefStrings.MODID + ":sand_quartz"); sand_gold = new BlockGoldSand(Material.sand).setBlockName("sand_gold").setStepSound(Block.soundTypeSand).setCreativeTab(MainRegistry.machineTab).setHardness(0.5F).setBlockTextureName(RefStrings.MODID + ":sand_gold"); glass_boron = new BlockNTMGlass(0, RefStrings.MODID + ":glass_boron", Material.glass).setBlockName("glass_boron").setStepSound(Block.soundTypeGlass).setCreativeTab(MainRegistry.machineTab).setHardness(0.3F); glass_lead = new BlockNTMGlass(0, RefStrings.MODID + ":glass_lead", Material.glass).setBlockName("glass_lead").setStepSound(Block.soundTypeGlass).setCreativeTab(MainRegistry.machineTab).setHardness(0.3F); @@ -1497,7 +1511,8 @@ public class ModBlocks { glass_trinitite = new BlockNTMGlass(1, RefStrings.MODID + ":glass_trinitite", Material.glass).setBlockName("glass_trinitite").setLightLevel(5F/15F).setStepSound(Block.soundTypeGlass).setCreativeTab(MainRegistry.machineTab).setHardness(0.3F); glass_polonium = new BlockNTMGlass(1, RefStrings.MODID + ":glass_polonium", Material.glass).setBlockName("glass_polonium").setLightLevel(5F/15F).setStepSound(Block.soundTypeGlass).setCreativeTab(MainRegistry.machineTab).setHardness(0.3F); glass_ash = new BlockNTMGlass(1, RefStrings.MODID + ":glass_ash", Material.glass).setBlockName("glass_ash").setStepSound(Block.soundTypeGlass).setCreativeTab(MainRegistry.machineTab).setHardness(3F); - + glass_quartz = new BlockNTMGlass(0, RefStrings.MODID + ":glass_quartz", Material.packedIce, true).setBlockName("glass_quartz").setCreativeTab(MainRegistry.blockTab).setStepSound(Block.soundTypeGlass).setHardness(1.0F).setResistance(40.0F).setBlockTextureName(RefStrings.MODID + "glass_quartz"); + mush = new BlockMush(Material.plants).setBlockName("mush").setCreativeTab(MainRegistry.blockTab).setLightLevel(0.5F).setStepSound(Block.soundTypeGrass).setBlockTextureName(RefStrings.MODID + ":mush"); mush_block = new BlockMushHuge(Material.plants).setBlockName("mush_block").setLightLevel(1.0F).setStepSound(Block.soundTypeGrass).setHardness(0.2F).setBlockTextureName(RefStrings.MODID + ":mush_block_skin"); mush_block_stem = new BlockMushHuge(Material.plants).setBlockName("mush_block_stem").setLightLevel(1.0F).setStepSound(Block.soundTypeGrass).setHardness(0.2F).setBlockTextureName(RefStrings.MODID + ":mush_block_stem"); @@ -2306,7 +2321,7 @@ public class ModBlocks { GameRegistry.registerBlock(deco_rbmk_smooth, deco_rbmk_smooth.getUnlocalizedName()); //Gravel - GameRegistry.registerBlock(gravel_obsidian, gravel_obsidian.getUnlocalizedName()); + GameRegistry.registerBlock(gravel_obsidian, ItemBlockBlastInfo.class, gravel_obsidian.getUnlocalizedName()); GameRegistry.registerBlock(gravel_diamond, ItemBlockLore.class, gravel_diamond.getUnlocalizedName()); //Lamps @@ -2317,35 +2332,39 @@ public class ModBlocks { GameRegistry.registerBlock(lamp_demon, ItemBlockHazard.class, lamp_demon.getUnlocalizedName()); //Reinforced Blocks - GameRegistry.registerBlock(asphalt, asphalt.getUnlocalizedName()); - GameRegistry.registerBlock(asphalt_light, asphalt_light.getUnlocalizedName()); - GameRegistry.registerBlock(reinforced_brick, reinforced_brick.getUnlocalizedName()); - GameRegistry.registerBlock(reinforced_glass, reinforced_glass.getUnlocalizedName()); - GameRegistry.registerBlock(reinforced_light, reinforced_light.getUnlocalizedName()); - GameRegistry.registerBlock(reinforced_sand, reinforced_sand.getUnlocalizedName()); - GameRegistry.registerBlock(reinforced_lamp_off, reinforced_lamp_off.getUnlocalizedName()); - GameRegistry.registerBlock(reinforced_lamp_on, reinforced_lamp_on.getUnlocalizedName()); + GameRegistry.registerBlock(asphalt, ItemBlockBlastInfo.class, asphalt.getUnlocalizedName()); + GameRegistry.registerBlock(asphalt_light, ItemBlockBlastInfo.class, asphalt_light.getUnlocalizedName()); + GameRegistry.registerBlock(reinforced_brick, ItemBlockBlastInfo.class, reinforced_brick.getUnlocalizedName()); + GameRegistry.registerBlock(reinforced_glass, ItemBlockBlastInfo.class, reinforced_glass.getUnlocalizedName()); + GameRegistry.registerBlock(reinforced_light, ItemBlockBlastInfo.class, reinforced_light.getUnlocalizedName()); + GameRegistry.registerBlock(reinforced_sand, ItemBlockBlastInfo.class, reinforced_sand.getUnlocalizedName()); + GameRegistry.registerBlock(reinforced_lamp_off, ItemBlockBlastInfo.class, reinforced_lamp_off.getUnlocalizedName()); + GameRegistry.registerBlock(reinforced_lamp_on, ItemBlockBlastInfo.class, reinforced_lamp_on.getUnlocalizedName()); //Bricks - GameRegistry.registerBlock(reinforced_stone, reinforced_stone.getUnlocalizedName()); - GameRegistry.registerBlock(concrete_smooth, concrete_smooth.getUnlocalizedName()); + GameRegistry.registerBlock(reinforced_stone, ItemBlockBlastInfo.class, reinforced_stone.getUnlocalizedName()); + GameRegistry.registerBlock(reinforced_ducrete, ItemBlockBlastInfo.class, reinforced_ducrete.getUnlocalizedName()); + GameRegistry.registerBlock(concrete_smooth, ItemBlockBlastInfo.class, concrete_smooth.getUnlocalizedName()); GameRegistry.registerBlock(concrete_colored, ItemBlockColored.class, concrete_colored.getUnlocalizedName()); - GameRegistry.registerBlock(concrete, concrete.getUnlocalizedName()); - GameRegistry.registerBlock(concrete_asbestos, concrete_asbestos.getUnlocalizedName()); - GameRegistry.registerBlock(concrete_pillar, concrete_pillar.getUnlocalizedName()); - GameRegistry.registerBlock(brick_concrete, brick_concrete.getUnlocalizedName()); - GameRegistry.registerBlock(brick_concrete_mossy, brick_concrete_mossy.getUnlocalizedName()); - GameRegistry.registerBlock(brick_concrete_cracked, brick_concrete_cracked.getUnlocalizedName()); - GameRegistry.registerBlock(brick_concrete_broken, brick_concrete_broken.getUnlocalizedName()); - GameRegistry.registerBlock(brick_concrete_marked, brick_concrete_marked.getUnlocalizedName()); - GameRegistry.registerBlock(brick_obsidian, brick_obsidian.getUnlocalizedName()); - GameRegistry.registerBlock(brick_compound, brick_compound.getUnlocalizedName()); - GameRegistry.registerBlock(brick_light, brick_light.getUnlocalizedName()); + GameRegistry.registerBlock(concrete, ItemBlockBlastInfo.class, concrete.getUnlocalizedName()); + GameRegistry.registerBlock(concrete_asbestos, ItemBlockBlastInfo.class, concrete_asbestos.getUnlocalizedName()); + GameRegistry.registerBlock(ducrete_smooth, ItemBlockBlastInfo.class, ducrete_smooth.getUnlocalizedName()); + GameRegistry.registerBlock(ducrete, ItemBlockBlastInfo.class, ducrete.getUnlocalizedName()); + GameRegistry.registerBlock(concrete_pillar, ItemBlockBlastInfo.class, concrete_pillar.getUnlocalizedName()); + GameRegistry.registerBlock(brick_concrete, ItemBlockBlastInfo.class, brick_concrete.getUnlocalizedName()); + GameRegistry.registerBlock(brick_concrete_mossy, ItemBlockBlastInfo.class, brick_concrete_mossy.getUnlocalizedName()); + GameRegistry.registerBlock(brick_concrete_cracked, ItemBlockBlastInfo.class, brick_concrete_cracked.getUnlocalizedName()); + GameRegistry.registerBlock(brick_concrete_broken, ItemBlockBlastInfo.class, brick_concrete_broken.getUnlocalizedName()); + GameRegistry.registerBlock(brick_concrete_marked, ItemBlockBlastInfo.class, brick_concrete_marked.getUnlocalizedName()); + GameRegistry.registerBlock(brick_ducrete, ItemBlockBlastInfo.class, brick_ducrete.getUnlocalizedName()); + GameRegistry.registerBlock(brick_obsidian, ItemBlockBlastInfo.class, brick_obsidian.getUnlocalizedName()); + GameRegistry.registerBlock(brick_compound, ItemBlockBlastInfo.class, brick_compound.getUnlocalizedName()); + GameRegistry.registerBlock(brick_light, ItemBlockBlastInfo.class, brick_light.getUnlocalizedName()); GameRegistry.registerBlock(brick_asbestos, ItemBlockHazard.class, brick_asbestos.getUnlocalizedName()); //CMB Building Elements - GameRegistry.registerBlock(cmb_brick, cmb_brick.getUnlocalizedName()); - GameRegistry.registerBlock(cmb_brick_reinforced, cmb_brick_reinforced.getUnlocalizedName()); + GameRegistry.registerBlock(cmb_brick, ItemBlockBlastInfo.class, cmb_brick.getUnlocalizedName()); + GameRegistry.registerBlock(cmb_brick_reinforced, ItemBlockBlastInfo.class, cmb_brick_reinforced.getUnlocalizedName()); //Tiles GameRegistry.registerBlock(tile_lab, ItemBlockHazard.class, tile_lab.getUnlocalizedName()); @@ -2548,6 +2567,7 @@ public class ModBlocks { GameRegistry.registerBlock(sand_lead, sand_lead.getUnlocalizedName()); GameRegistry.registerBlock(sand_uranium, sand_uranium.getUnlocalizedName()); GameRegistry.registerBlock(sand_polonium, sand_polonium.getUnlocalizedName()); + GameRegistry.registerBlock(sand_quartz, sand_quartz.getUnlocalizedName()); GameRegistry.registerBlock(sand_gold, sand_gold.getUnlocalizedName()); GameRegistry.registerBlock(glass_boron, glass_boron.getUnlocalizedName()); GameRegistry.registerBlock(glass_lead, glass_lead.getUnlocalizedName()); @@ -2555,6 +2575,7 @@ public class ModBlocks { GameRegistry.registerBlock(glass_trinitite, glass_trinitite.getUnlocalizedName()); GameRegistry.registerBlock(glass_polonium, glass_polonium.getUnlocalizedName()); GameRegistry.registerBlock(glass_ash, glass_ash.getUnlocalizedName()); + GameRegistry.registerBlock(glass_quartz, glass_quartz.getUnlocalizedName()); //Silo Hatch GameRegistry.registerBlock(seal_frame, seal_frame.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/generic/BlockMush.java b/src/main/java/com/hbm/blocks/generic/BlockMush.java index a528e4b48..6f78cebd5 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockMush.java +++ b/src/main/java/com/hbm/blocks/generic/BlockMush.java @@ -1,7 +1,9 @@ package com.hbm.blocks.generic; import java.util.Random; +import java.util.Set; +import com.google.common.collect.Sets; import com.hbm.blocks.ModBlocks; import com.hbm.config.GeneralConfig; import com.hbm.main.MainRegistry; @@ -11,131 +13,201 @@ import net.minecraft.block.Block; import net.minecraft.block.IGrowable; import net.minecraft.block.material.Material; import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import net.minecraftforge.common.EnumPlantType; +import net.minecraftforge.common.IPlantable; +import net.minecraftforge.common.util.ForgeDirection; -public class BlockMush extends Block implements IGrowable { +public class BlockMush extends Block implements IGrowable, IPlantable { public BlockMush(Material p_i45394_1_) { super(p_i45394_1_); - float f = 0.2F; - this.setBlockBounds(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, f * 2.0F, 0.5F + f); + float f = 0.2F; + this.setBlockBounds(0.5F - f, 0.0F, 0.5F - f, 0.5F + f, f * 2.0F, 0.5F + f); this.setTickRandomly(true); } + + protected boolean canPlaceBlockOn(Block block) { + return block.func_149730_j(); + } + + @Override + public boolean canPlaceBlockAt(World world, int x, int y, int z) { + return super.canPlaceBlockAt(world, x, y, z) && this.canBlockStay(world, x, y, z); + } + + @Override + public boolean canBlockStay(World world, int x, int y, int z) { + + if(y >= 0 && y < 256) { + Block block = world.getBlock(x, y - 1, z); + return block.canSustainPlant(world, x, y - 1, z, ForgeDirection.UP, this) || canMushGrowHere(world, x, y, z); + } else { + return false; + } + } - protected boolean canPlaceBlockOn(Block p_149854_1_) - { - return p_149854_1_.func_149730_j(); - } - - @Override - public boolean canPlaceBlockAt(World p_149742_1_, int p_149742_2_, int p_149742_3_, int p_149742_4_) - { - return super.canPlaceBlockAt(p_149742_1_, p_149742_2_, p_149742_3_, p_149742_4_) && this.canBlockStay(p_149742_1_, p_149742_2_, p_149742_3_, p_149742_4_); - } - - @Override - public boolean canBlockStay(World p_149718_1_, int p_149718_2_, int p_149718_3_, int p_149718_4_) - { - if (p_149718_3_ >= 0 && p_149718_3_ < 256) - { - Block block = p_149718_1_.getBlock(p_149718_2_, p_149718_3_ - 1, p_149718_4_); - return block == ModBlocks.waste_earth || block == ModBlocks.waste_mycelium; - } - else - { - return false; - } - } + private static final Set canGrowOn = Sets.newHashSet(new Block[] { + ModBlocks.waste_earth, + ModBlocks.waste_mycelium, + ModBlocks.waste_trinitite, + ModBlocks.waste_trinitite_red, + ModBlocks.block_waste, + ModBlocks.block_waste_painted, + ModBlocks.block_waste_vitrified + }); + + public boolean canMushGrowHere(World world, int x, int y, int z) { + Block block = world.getBlock(x, y - 1, z); + return canGrowOn.contains(block); + } - public boolean func_149884_c(World p_149884_1_, int p_149884_2_, int p_149884_3_, int p_149884_4_, Random p_149884_5_) - { - p_149884_1_.getBlockMetadata(p_149884_2_, p_149884_3_, p_149884_4_); - p_149884_1_.setBlockToAir(p_149884_2_, p_149884_3_, p_149884_4_); - HugeMush worldgenbigmushroom = null; + public boolean growHuge(World world, int x, int y, int z, Random rand) { + world.getBlockMetadata(x, y, z); + world.setBlockToAir(x, y, z); + (new HugeMush()).generate(world, rand, x, y, z); - worldgenbigmushroom = new HugeMush(); - worldgenbigmushroom.generate(p_149884_1_, p_149884_5_, p_149884_2_, p_149884_3_, p_149884_4_); - - return true; - } + return true; + } - @Override - public boolean func_149851_a(World p_149851_1_, int p_149851_2_, int p_149851_3_, int p_149851_4_, boolean p_149851_5_) - { - return true; - } + /** + * General grow condition ("has space?") + */ + @Override + public boolean func_149851_a(World world, int x, int y, int z, boolean b) { + return this.canMushGrowHere(world, x, y, z); + } - @Override - public boolean func_149852_a(World p_149852_1_, Random p_149852_2_, int p_149852_3_, int p_149852_4_, int p_149852_5_) - { - return p_149852_2_.nextFloat() < 0.4D; - } - @Override - public AxisAlignedBB getCollisionBoundingBoxFromPool(World p_149668_1_, int p_149668_2_, int p_149668_3_, int p_149668_4_) - { - return null; - } + /** + * Grow chance (40%) + */ + @Override + public boolean func_149852_a(World p_149852_1_, Random p_149852_2_, int p_149852_3_, int p_149852_4_, int p_149852_5_) { + return p_149852_2_.nextFloat() < 0.4D; + } - /** - * Is this block (a) opaque and (b) a full 1m cube? This determines whether or not to render the shared face of two - * adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block. - */ - @Override - public boolean isOpaqueCube() - { - return false; - } + /** + * On successful bonemeal grow + */ + @Override + public void func_149853_b(World world, Random rand, int x, int y, int z) { + this.growHuge(world, x, y, z, rand); + } - /** - * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc) - */ - @Override - public boolean renderAsNormalBlock() - { - return false; - } + @Override + public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { + return null; + } - /** - * The type of render function that is called for this block - */ - @Override - public int getRenderType() - { - return 1; - } - @Override - public void onNeighborBlockChange(World p_149695_1_, int p_149695_2_, int p_149695_3_, int p_149695_4_, Block p_149695_5_) - { - super.onNeighborBlockChange(p_149695_1_, p_149695_2_, p_149695_3_, p_149695_4_, p_149695_5_); - this.checkAndDropBlock(p_149695_1_, p_149695_2_, p_149695_3_, p_149695_4_); - } + /** + * Is this block (a) opaque and (b) a full 1m cube? This determines whether + * or not to render the shared face of two adjacent blocks and also whether + * the player can attach torches, redstone wire, etc to this block. + */ + @Override + public boolean isOpaqueCube() { + return false; + } - /** - * checks if the block can stay, if not drop as item - */ - protected void checkAndDropBlock(World p_149855_1_, int p_149855_2_, int p_149855_3_, int p_149855_4_) - { - if (!this.canBlockStay(p_149855_1_, p_149855_2_, p_149855_3_, p_149855_4_)) - { - this.dropBlockAsItem(p_149855_1_, p_149855_2_, p_149855_3_, p_149855_4_, p_149855_1_.getBlockMetadata(p_149855_2_, p_149855_3_, p_149855_4_), 0); - p_149855_1_.setBlock(p_149855_2_, p_149855_3_, p_149855_4_, getBlockById(0), 0, 2); - } - } - - @Override - public void updateTick(World world, int x, int y, int z, Random rand) - { - this.checkAndDropBlock(world, x, y, z); - if(GeneralConfig.enableMycelium && world.getBlock(x, y - 1, z) == ModBlocks.waste_earth && rand.nextInt(5) == 0) - { - world.setBlock(x, y - 1, z, ModBlocks.waste_mycelium); - } - } + /** + * If this block doesn't render as an ordinary block it will return False + * (examples: signs, buttons, stairs, etc) + */ + @Override + public boolean renderAsNormalBlock() { + return false; + } - @Override - public void func_149853_b(World p_149853_1_, Random p_149853_2_, int p_149853_3_, int p_149853_4_, int p_149853_5_) - { - this.func_149884_c(p_149853_1_, p_149853_3_, p_149853_4_, p_149853_5_, p_149853_2_); - } + /** + * The type of render function that is called for this block + */ + @Override + public int getRenderType() { + return 1; + } + + @Override + public void onNeighborBlockChange(World world, int x, int y, int z, Block b) { + super.onNeighborBlockChange(world, x, y, z, b); + this.checkAndDropBlock(world, x, y, z); + } + + /** + * checks if the block can stay, if not drop as item + */ + protected void checkAndDropBlock(World world, int x, int y, int z) { + + if(!this.canBlockStay(world, x, y, z)) { + this.dropBlockAsItem(world, x, y, z, world.getBlockMetadata(x, y, z), 0); + world.setBlockToAir(x, y, z); + } + } + + @Override + public void updateTick(World world, int x, int y, int z, Random rand) { + this.checkAndDropBlock(world, x, y, z); + + if(GeneralConfig.enableMycelium && world.getBlock(x, y - 1, z) == ModBlocks.waste_earth && rand.nextInt(5) == 0) { + world.setBlock(x, y - 1, z, ModBlocks.waste_mycelium); + } + + if(rand.nextInt(25) == 0) { + byte range = 4; + int maxShroom = 3; + int ix; + int iy; + int iz; + + for(ix = x - range; ix <= x + range; ++ix) { + for(iy = y - range; iy <= y + range; ++iy) { + for(iz = z - 1; iz <= z + 1; ++iz) { + if(world.getBlock(ix, iz, iy) == this) { + --maxShroom; + + if(maxShroom <= 0) { + return; + } + } + } + } + } + + ix = x + rand.nextInt(5) - 2; + iy = z + rand.nextInt(2) - rand.nextInt(2); + iz = y + rand.nextInt(5) - 2; + + for(int l1 = 0; l1 < 4; ++l1) { + if(world.isAirBlock(ix, iy, iz) && this.canMushGrowHere(world, ix, iy, iz)) { + x = ix; + z = iy; + y = iz; + } + + ix = x + rand.nextInt(5) - 2; + iy = z + rand.nextInt(2) - rand.nextInt(2); + iz = y + rand.nextInt(5) - 2; + } + + if(world.isAirBlock(ix, iy, iz) && this.canMushGrowHere(world, ix, iy, iz)) { + world.setBlock(ix, iy, iz, this, 0, 2); + } + } + } + + @Override + public EnumPlantType getPlantType(IBlockAccess world, int x, int y, int z) { + return EnumPlantType.Cave; + } + + @Override + public Block getPlant(IBlockAccess world, int x, int y, int z) { + return this; + } + + @Override + public int getPlantMetadata(IBlockAccess world, int x, int y, int z) { + return world.getBlockMetadata(x, y, z); + } } diff --git a/src/main/java/com/hbm/blocks/generic/BlockNTMGlass.java b/src/main/java/com/hbm/blocks/generic/BlockNTMGlass.java index 4770d7ff4..440352102 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockNTMGlass.java +++ b/src/main/java/com/hbm/blocks/generic/BlockNTMGlass.java @@ -8,29 +8,35 @@ import net.minecraft.block.BlockBreakable; import net.minecraft.block.material.Material; public class BlockNTMGlass extends BlockBreakable { - + int renderLayer; + boolean doesDrop = false; public BlockNTMGlass(int layer, String name, Material material) { + this(layer, name, material, false); + } + + public BlockNTMGlass(int layer, String name, Material material, boolean doesDrop) { super(name, material, false); this.renderLayer = layer; + this.doesDrop = doesDrop; + } + + public int quantityDropped(Random rand) { + return doesDrop ? 1 : 0; + } + + @SideOnly(Side.CLIENT) + public int getRenderBlockPass() { + return renderLayer; + } + + public boolean renderAsNormalBlock() { + return false; + } + + protected boolean canSilkHarvest() { + return true; } - - public int quantityDropped(Random rand) { - return 0; - } - - @SideOnly(Side.CLIENT) - public int getRenderBlockPass() { - return renderLayer; - } - - public boolean renderAsNormalBlock() { - return false; - } - - protected boolean canSilkHarvest() { - return true; - } } diff --git a/src/main/java/com/hbm/blocks/generic/WasteEarth.java b/src/main/java/com/hbm/blocks/generic/WasteEarth.java index c9c7f4097..53b79131c 100644 --- a/src/main/java/com/hbm/blocks/generic/WasteEarth.java +++ b/src/main/java/com/hbm/blocks/generic/WasteEarth.java @@ -22,7 +22,11 @@ import net.minecraft.item.Item; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import net.minecraftforge.common.EnumPlantType; +import net.minecraftforge.common.IPlantable; +import net.minecraftforge.common.util.ForgeDirection; public class WasteEarth extends Block { @@ -92,23 +96,6 @@ public class WasteEarth extends Block { @Override public void updateTick(World world, int x, int y, int z, Random rand) { - if((this == ModBlocks.waste_earth || this == ModBlocks.waste_mycelium) && world.getBlock(x, y + 1, z) == Blocks.air && rand.nextInt(1000) == 0) { - Block b0; - int count = 0; - for(int i = -5; i < 5; i++) { - for(int j = -5; j < 6; j++) { - for(int k = -5; k < 5; k++) { - b0 = world.getBlock(x + i, y + j, z + k); - if((b0 instanceof BlockMushroom) || b0 == ModBlocks.mush) { - count++; - } - } - } - } - if(count > 0 && count < 5) - world.setBlock(x, y + 1, z, ModBlocks.mush); - } - if(this == ModBlocks.waste_mycelium && GeneralConfig.enableMycelium) { for(int i = -1; i < 2; i++) { for(int j = -1; j < 2; j++) { @@ -121,35 +108,26 @@ public class WasteEarth extends Block { } } } - - if(rand.nextInt(10) == 0) { - Block b0; - int count = 0; - for(int i = -5; i < 5; i++) { - for(int j = -5; j < 6; j++) { - for(int k = -5; k < 5; k++) { - b0 = world.getBlock(x + i, y + j, z + k); - if(b0 == ModBlocks.mush) { - count++; - } - } - } - } - if(count < 5) - world.setBlock(x, y + 1, z, ModBlocks.mush); - } } if(this == ModBlocks.waste_earth || this == ModBlocks.waste_mycelium) { - if(!world.isRemote) { - if(world.getBlockLightValue(x, y + 1, z) < 4 && world.getBlockLightOpacity(x, y + 1, z) > 2) { - world.setBlock(x, y, z, Blocks.dirt); - } + + if(GeneralConfig.enableAutoCleanup || (world.getBlockLightValue(x, y + 1, z) < 4 && world.getBlockLightOpacity(x, y + 1, z) > 2)) { + world.setBlock(x, y, z, Blocks.dirt); + + } else if(world.getBlock(x, y + 1, z) instanceof BlockMushroom) { + world.setBlock(x, y + 1, z, ModBlocks.mush); } } - - if(GeneralConfig.enableAutoCleanup && (this == ModBlocks.waste_earth | this == ModBlocks.waste_mycelium)) - if(!world.isRemote) - world.setBlock(x, y, z, Blocks.dirt); + } + + @Override + public boolean canSustainPlant(IBlockAccess world, int x, int y, int z, ForgeDirection direction, IPlantable plantable) { + + if(this == ModBlocks.waste_earth || this == ModBlocks.waste_mycelium) { + return plantable.getPlantType(world, x, y, z) == EnumPlantType.Cave; + } + + return false; } } diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 35fcbe669..690a9341a 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -318,6 +318,7 @@ public class ModItems { public static Item crystal_lithium; public static Item crystal_cobalt; public static Item crystal_starmetal; + public static Item crystal_cinnebar; public static Item crystal_trixite; public static Item gem_tantalium; @@ -2689,6 +2690,7 @@ public class ModItems { crystal_lithium = new ItemHazard().addHydroReactivity().toItem().setUnlocalizedName("crystal_lithium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_lithium"); crystal_cobalt = new Item().setUnlocalizedName("crystal_cobalt").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_cobalt"); crystal_starmetal = new Item().setUnlocalizedName("crystal_starmetal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_starmetal"); + crystal_cinnebar = new Item().setUnlocalizedName("crystal_cinnebar").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_cinnebar"); crystal_trixite = new ItemHazard().addRadiation(ItemHazard.trx * ItemHazard.crystal).toItem().setUnlocalizedName("crystal_trixite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_trixite"); gem_tantalium = new ItemCustomLore().setUnlocalizedName("gem_tantalium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":gem_tantalium"); gem_volcanic = new ItemCustomLore().setRarity(EnumRarity.uncommon).setUnlocalizedName("gem_volcanic").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":gem_volcanic"); @@ -5568,6 +5570,7 @@ public class ModItems { GameRegistry.registerItem(crystal_lithium, crystal_lithium.getUnlocalizedName()); GameRegistry.registerItem(crystal_cobalt, crystal_cobalt.getUnlocalizedName()); GameRegistry.registerItem(crystal_starmetal, crystal_starmetal.getUnlocalizedName()); + GameRegistry.registerItem(crystal_cinnebar, crystal_cinnebar.getUnlocalizedName()); GameRegistry.registerItem(crystal_trixite, crystal_trixite.getUnlocalizedName()); GameRegistry.registerItem(gem_tantalium, gem_tantalium.getUnlocalizedName()); GameRegistry.registerItem(gem_volcanic, gem_volcanic.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/block/ItemBlockBlastInfo.java b/src/main/java/com/hbm/items/block/ItemBlockBlastInfo.java new file mode 100644 index 000000000..142f59b81 --- /dev/null +++ b/src/main/java/com/hbm/items/block/ItemBlockBlastInfo.java @@ -0,0 +1,29 @@ +package com.hbm.items.block; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +public class ItemBlockBlastInfo extends ItemBlock { + + public ItemBlockBlastInfo(Block block) { + super(block); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + + Item item = stack.getItem(); + Block block = Block.getBlockFromItem(item); + + if(block == null) + return; + + list.add(EnumChatFormatting.GOLD + "Blast Resistance: " + block.getExplosionResistance(null)); + } +} diff --git a/src/main/java/com/hbm/items/block/ItemBlockColored.java b/src/main/java/com/hbm/items/block/ItemBlockColored.java index fea23bac2..bc94c0bdc 100644 --- a/src/main/java/com/hbm/items/block/ItemBlockColored.java +++ b/src/main/java/com/hbm/items/block/ItemBlockColored.java @@ -7,7 +7,7 @@ import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemDye; import net.minecraft.item.ItemStack; -public class ItemBlockColored extends ItemBlock { +public class ItemBlockColored extends ItemBlockBlastInfo { public ItemBlockColored(Block block) { super(block); diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 81762f855..df4464a8a 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -655,7 +655,8 @@ public class CraftingManager { GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModBlocks.sand_polonium, 8), new Object[] { "sand", "sand", "sand", "sand", "sand", "sand", "sand", "sand", "dustPolonium" })); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModBlocks.sand_boron, 8), new Object[] { "sand", "sand", "sand", "sand", "sand", "sand", "sand", "sand", "dustBoron" })); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModBlocks.sand_lead, 8), new Object[] { "sand", "sand", "sand", "sand", "sand", "sand", "sand", "sand", "dustLead" })); - + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModBlocks.sand_quartz, 1), new Object[] { "sand", "sand", "dustNetherQuartz", "dustNetherQuartz" })); + GameRegistry.addRecipe(new ItemStack(ModItems.rune_blank, 1), new Object[] { "PSP", "SDS", "PSP", 'P', ModItems.powder_magic, 'S', ModItems.ingot_starmetal, 'D', ModItems.dynosphere_dineutronium_charged }); GameRegistry.addShapelessRecipe(new ItemStack(ModItems.rune_isa, 1), new Object[] { ModItems.rune_blank, ModItems.powder_spark_mix, ModItems.singularity_counter_resonant }); GameRegistry.addShapelessRecipe(new ItemStack(ModItems.rune_dagaz, 1), new Object[] { ModItems.rune_blank, ModItems.powder_spark_mix, ModItems.singularity }); diff --git a/src/main/resources/assets/hbm/textures/blocks/brick_ducrete.png b/src/main/resources/assets/hbm/textures/blocks/brick_ducrete.png new file mode 100644 index 0000000000000000000000000000000000000000..07bf9aac5f32817f2a774a9bc726158416a3dc83 GIT binary patch literal 2197 zcmV;G2x|9 zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1Y=lJq7F{Ld+J1SAlTq8nZuYCn zxOQN8NKJPmuWJAN-PK?GK^;(8^1(&tG=FTg5fgWUzCLk&gSPW~{m{Gf7*{fZJY={v z*H53;`o!b(*|2j!evYfKW-zQkJMs!>MrPzry@TX&yvD(B5p%U3BKBKm=q}x&jLo5_D*@El?Pu#fF|+#KJ<2 zv0yw#EJGh-#{(U`iKd#sx)p577#>E!0yA%%`3eNiT!EJ&a4?u+fAgrHCjaD7y_Z1| z=pbA%E*#Ef7(==7&8t`t=u0=61n+0buW$ZgtFnSLX%2kAr1KRb6MVd7rp|`f5x3VB z0_E!pz!Y(AVlZG>0qwvLIM5!^12B()1xkz@jm69g01;LOiPjj0%45KhoA-E_Ymw05 z80Ol<|9BhNLx~JoB68#@D2kMvan_M@&bv|Mk~iLZ^3Ho7eDo=p zU;_mgd%NB`dlJ=_s;}n{RD-1&PNl{= zFRJmV@_vVaQBG)R#)_c@R@@H-*w8pM(*dl-q1@0+N90RE$RKHGqbdx=SVG$Xse@?u zQSMi|DGI;R4gX6yHKhALlv6C-TemM%tK&UarefDE9Gq&yw~r|a?4yvzJ1yaF+W5nS zdXD%Cmbd^ytfM6gFpkS}Txru>#crBY<8JN_kEq!*XCPhHE^IqAxdVoyHRI%Hehulo zQn+go8wBl)n6$GSh)F9_s%wP$3^dTn5N-VN+!i;Y&`wB(QL7KQnPg+4i;+~Uy^>g6 z;*OAMBlmJVB?;RZONfhmO>o~)sgqiq)*YIJfw*)FD-hotvzbScVCPqIbjh3g2`QVc zv)@zh0f8tb+*qP#&mk~`scIeVL2Jo2fKZCA)m1nO^h zNj9^Ql? zo=5t+WRKU;_%HP^k`!t>%d5ND=6XTm_mJM@qn>pa zeniw>h{PoMrJB65?dt}Kx21x&vq(fSi>Lj9ggptne!H`9$W+;0`6Nx-*>CsIsSzBl z=l__Z`WM9#zebn@>AnB}0flKpLr_UWLm+T+Z)Rz1WdHzpoPCiyNW)MRhX1CPic|{P zLBt_Lb+RD7aMUUkp+cw?T6HkF=?j`PBq=VAf@{IS$70pN#aUMeS3wYbfVjCiDY{6B z=Qf2FF&?0TpPFn||;=_&r-IKQZnmh2lWq#c@7{ zf#5FCs5#E}vEwvO0RJ;^rMLZ+IxzD|dabQRkAUztaB4yW|h1F4i15l0%fmzyt}(|ZvXbQ=Jx|qAaa^x&|1;} z000SaNLh0L01m?d01m?e$8V@)00007bV*G`2jv9<0s#sV{%czR00F5Gv)oCWX61113?A%V8X=B_C>lItGeh?m&;}4KVgjdIBTu>`5F28 z@-;Wc7}~Za=Zw~xoHKpj6G8wW=Ztd>5kVBgPokb=@Irt+Ceb03VMBP17JEbvmWg zHo@U=;Cj8*AC_g=Nhqbz_x%p^bx*X`gb+BN&$VH#-Hq$Lr<6iUi5MeV>ngzvLqKcI z_xH%MEO_sUaokCY@z3)cF~%^CbM2ecseS5h8HRvT(=-3{g|+STEP!l2cebsaHAlv4HHt0ympuInmW&iP|y&bgg0y!Z5dkNMRZ$vFcWr4+~GvAQvY zu-l5YmKY=Jx^7l}-~Y=O(=^q3(=?=%>gy||IGs+EQhp_P?-7y8@DBVA1|TAY5SXTE z^TB&)t@*bmA{-6}-sL*yXqpCdyCp<~VF>l%Znwm;%ot;z0EOEvk#ojcODTnM902$W X9d+Xzc7ESd00000NkvXXu0mjf27xg} literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/ducrete.png b/src/main/resources/assets/hbm/textures/blocks/ducrete.png new file mode 100644 index 0000000000000000000000000000000000000000..7df9eb8b28cee8e350bf077364f2d8d0006839e7 GIT binary patch literal 1999 zcmV;=2Qc`FP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1bvlH@21{nshx2uL87C5O2|BGNMJ z>!*wTd=xp~7lsW?Z#nqBL%u5-n!7^XER!tC(@BxjB}da0g?cS)@b2kqqHE6m;OR>L z=6b4D*p0Q{@Dvy)C>54dny6|KpHF{zpxYO9l$p;b$~ipOtPx}~I&@D2kXLvUK=lOZ z1@c(IivC#_3r0M!o^!@5E*h%jWG2c& zRFiq_C{S)(2{|(GAg6;a+6$MNDrhZYn!ey^H=On|da+zkjuMJ8lq+8c{NLuE3^#$4k}1(Kp*5+}KF0|gsnLZPWh zeBk8nX70Cm1NOhg8~wx_H0u5ab0F01ynSG;wD(*-8M~^mVXCxLU$xdt9(g%n3mR@O zs2oXTQoe1g?ZnbHc+AM6BR&|KO-=q6W zW;mYiv+!1JaC-+tn;K`Vr54FGksw@lU8VMmdhIDjNb(Kp3-Z)Ge>xJ=c4~v zrMFvKec7!t%BvpWfm&XYaAwVxl~lG;hab~O?Jc7$IYW7?eq0M-1Lp1_v-zFL4ei!U zpS1b+H3RTnY6c#x*tIs)C<*%o;fHOQ*Lg*B?I*NB!&@7nwGEaP2tRv1t$D^Hv^{y& z4u(@=mP%wztUiF|Xix8-Gr6q%Ut5cy;j0Wcm7DTzk>o zArh>a=eJk#%xS&4$q(@0x;h5a|? zW;w{8JMwQV{0H+LpJz~Mg}?v+0flKpLr_UWLm+T+Z)Rz1WdHzpoPCiyNW)MRhX1CP zic|{PLBt_Lb+RD7aMUUkp+cw?T6HkF=?j`PBq=VAf@{IS$70pN#aUMeS3wYbfVjCi zDY{6B=Qf2FF&?0TpPFn||;=_&r-IKQZnmh2lWq z#c@7{f#5FCs5#E}vEwvO0RJ;^rMLZ+IxzD|dabQRkAUztaB4yW|h1F4i15l0%fmzyt}(|ZvXbQ=Jx|qAaa^x z&|1;}000SaNLh0L01m?d01m?e$8V@)00007bV*G`2jv9;6EiVE)Uc-j00BoyL_t(2 z&rOm^cEm6UL>VQ!kJ$IWL#q*>EGqGf7k(Nj_@dzV``z7D#mt}2M^(odV+UoA_W_REB zjSCT}DtC_vW;Qd(Pyr_AA5_52Or&3HnHkms9jZT; zp#t3PZg>BFzwoZR=*A_6i2&wsNqQD*iG1rgo%4KTqJjWPD#sP?eU hIWu$b4Y7!b$Pd7wJbv3oa7_RJ002ovPDHLkV1i|vo#Frh literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/ducrete_tile.png b/src/main/resources/assets/hbm/textures/blocks/ducrete_tile.png new file mode 100644 index 0000000000000000000000000000000000000000..e76629e09b6f532a0763b2cc65727dc7de1ec5c9 GIT binary patch literal 1963 zcmV;c2UPfpP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+O1aE(c~x$ekY0z0ZE+Ua8_*w6aESev<>Z@`K!iM z8ySSIPZBN4uYarfhaZ$m3Z<zb5ai2681L-e)HnpC!Pre1Kef!d zruHo!3znmlH7g>-LO`;=-DLr_A5h>~_ct&fbXpS%o{*-m9FT{5D}eGIphu7=CHCkq zY70Jwu})ho&4>{bUpGK+>$KG1T`?_-@VSw2iaLW_Yj(Ak%e$ZqN7Rgr>cNI7h8ZJ= zocb}t!}3ovZTs*%oD4EC|wB#w1W3UnyLBz|rY=N%VcYO&QYtF!|2rLZv$m<0tVB3b~Bqho*qTaKhKG6JAAW;PNPkwIb6VbjfLEOcJfXs|7FZ(<-c z8M2Ixr@&w-r8$4Ba-2g!lU7=5qpfyAdmRiJWwbHIn%3lkC9ABq##-yFx51H9PCMhQ zbI!Zq(G&MT?TxqIdGA9&5m-@RS%LWjuSAR#Rn*Z$8(s7 zc8Y-3PISYJ5km!xxNQht&MB11!rAyfrWS6JA6kozOt zgm!;~8~zSC(V+Vq$O(q-#O(`ex!rTABX(6`i>V~8zT^VBAliLal?KHZ0DFHCWcp^i z?XFpePVu!kIIvCaPMfosgdZHR&0J2M0puWL8A375EpCZQJjD9#v`o{IyxXeg&TvO8 z)r-YXf823s?nFC-K~uHZeSLFv8ToQRd|am2fG!q0S^U8wj?+H~&s?y220M=}xy`tU zdVp7-)^YVy*^(q*AYH@|fRhP46x4XvEq*%23?z#iM{$G*;qM-ZORZicei1_tH^X%dB-ber`gsu%AV7 zn&sa#*;~FpZ`!g4;?wOW5##rA6nD_W8^i||{>VsS^Y@PT<)W_q=f;cw0Qv-^gpbi{ z82|tQg=s@WP)S2WAaHVTW@&6?004NLeUUpz!%!54|E89TR0`Tb#34g2)G8FA zLZ}s5buhW<3z{?}DK3tJYr(tgRcm{hcNmuB{R#IlcXd(>+7C+sqSJt%e(K->Q!?V z1AHR!EHg}-c!PL)(>6Ho6GvE4R*BDvM@_mQ@gvt2m)|%Snk?|lh?!2!6Gw=}LI*1y z%!;N)JV_i?HJ$Q>jLRzLEzVlG%3Am2FAU}Mm1VBe8bSh#Sb_u*3aTif3>z`pby6&( z=sfP>A8h(1aw+60fstbY6=;x~e(*o|JzFb3G43XX;y~cVaXyBD;4aXpInMX7<1|hH z|1)rYT&7p%7gMB`qa(Aq?u=fT4m>Kros4D0?|IG|@PLKqv3io{@GyBk53sr@^ zH!`yiRTbPF5z!(8z`tsl2{Y?L03eAuXV;U&kb(;K-XPfxRBUFiIskZ{2PE0n_TF%J zkZkoa2CAwZs$Rk)GeHs&@yd5blcG3@$KLz5fgGHfrD|qy_t!cz)tuc~il-{ccDUAh zfhGwmtC@B22}^5%lsk7vW@0FdBAk@Z@tz#C2LSv#K3NkFDFHx4^hFa3o>bK=B07fd zgP^(l%fUDyo)_l4VCNf$<*F$7mPN^Yp`t xh*z|Tz?>69)&)oo6hX1pT5xyFIop+);RkaVXw%!gWd;BM002ovPDHLkV1gH3oI3yj literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/glass_quartz.png b/src/main/resources/assets/hbm/textures/blocks/glass_quartz.png new file mode 100644 index 0000000000000000000000000000000000000000..befcb5e7d2b64914276b91394157b162116bd7b0 GIT binary patch literal 5466 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/coil_magnetized_tungsten_torus.png b/src/main/resources/assets/hbm/textures/items/coil_magnetized_tungsten_torus.png new file mode 100644 index 0000000000000000000000000000000000000000..1a221c6e57cb44925f24bfb7bef80ce4fa87725d GIT binary patch literal 5940 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/crystal_cinnebar.png b/src/main/resources/assets/hbm/textures/items/crystal_cinnebar.png new file mode 100644 index 0000000000000000000000000000000000000000..f51b9d613a526fd28c971f1881fe6bc420cdcf9d GIT binary patch literal 540 zcmV+%0^|LOP)f6vlsNCaEQCHn7X~qAn;R#mj=Y*Wx4i1ip#*CSH42 z6kkFXyc7{_r9{?rk#4hX(n)5#$REM9+9>xs=I3IyQmdVA+|50KssK44pM7$_`+1CPZfyKAp;Fo^=0M1gwsWNZN4ih;n_ ztn&Ro^LhOrFCUJS77QSPuhAl`O@Xm(vL>$UI&gv3gr3LR6kLoV0Z5Co7F*&pM@tpA z6B*Uyo-Go)HU$7zx0PLEZCxG9ZN~HQ2~SUtrQ@QF;NE_T2U;)}qex0|JUAM*vEnob zU|W%$jo(%d9q?z?H%{V_AVyweg(uGHy z=1k8*nVyBFj_#>O6ll#P462=$w#I4B<@JW?X$T4)9|zQzwGaXLo$Uz+9xv{nu(+)r zjA3#Qm0Q?0HG3)mthuh)+0000jv;#3tX$nVrHeOX)#QbMc!z!uM9;&WEOO&ThTrZT6_L#4uBez7Q z;qwE*4nh5jlarakQ`ELFYipi$-s9%I>fSx}s7tpQ-hMvlXEbHe^dud=sX!YUJYD@< J);T3K0RZkAJW>Dv literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/ingot_staballoy.png b/src/main/resources/assets/hbm/textures/items/ingot_staballoy.png new file mode 100644 index 0000000000000000000000000000000000000000..0aaf57dc79e7c0ba935297982ae4ebfb098acf3a GIT binary patch literal 2041 zcmV zaB^>EX>4U6ba`-PAZ2)IW&i+q+U-_ZvLq)A{O1%t0uo5TaVVAu-@wOrveoP5%}h@? z{AD-M1tnBUp_BmA{`#|f^8L?zvaFpBPjug-od)J@;w25V zZMl14Pw#%p&Fcio_jFHAA3O^F2IeP^YQ8b-Bdz1#dyT!fwYuyTOV+)pvl23s%3iOL z1oJaR3-}AhVYY-8Q7#2JR&B8tTA@TJG26*grA*yWn}b3HK6-8(&@&gXK4cMGBrbz^ zP>n{NgG;U=1=tm&ii4DUH`^DQxM|`Qia@ReRVEliZU4HNPn3SvdLOk!WOmKaBA7=R z!i~Y)ctQ<~P~Sn78Q{~N6LJ&lK%vYqM=UVgYnix&zH-Y=q8;=E{VHw>b$ve!d0-2i zAqNVqk`q$0fjJN%kP!rBvXPzV3k;A5S2)SuIR!T;0zeyl6KLwP@RDPf9L4C=1#pvG z23g(<@+bI+9LnOvi-<~)C`qz9^#&ED8gy*8Ik@111Pvj?kV1|w`Y2Ijh%u&^6DNn= zSQ5%H#gtOcz|63m)nw>rNG`tI{**a0 zsQZV^P2NnC2j0G6t&U^6OvY9fj+k19>cf1CnPVQOXf|i?Py7G8A?)g7c;NsjM^@UB zrBeR|kG?}ZeM@VE11e3e6k{8ShcUJ`yGG5Z^LEbTApEd*xEjolm%$daYwBSgW zn&NO1@-l8-yC-R{?%uAM+qZ9A`xg2K$mR(e`@shI(X#leQ?>Zn;nE{vP8rxvi^w!0 zy(x|Li2xMffiLaN(!@3oD7QmjF}RjCQ+y3qtYTyomZ&J&@KX#yE6 z51XHW!O*mom8}!})j8(q7jFGbd6CsjMm^jAjCyu+ZfWtIoX!i1;Li5AWdS1N2|@(>wF% z-m`b9{?4M!$GE@f%~RO))YbKp22z^)`3`J8->UyNghKDQ4JGq8dFbWF;=!HX0004n zX+uL$Nkc;*aB^>EX>4Tx0C=2zkvmAkP!xv$rk09S3fe)$AwzYtAii+aDionYs1;gu zFuCaqnlvOSE{=k0!NJF3)xpJCR|i)?5PX2Rxj8AiNQvh*g%&X$xZIEbp8x0Ga{-}V zW}4MC257o%rV?>6lU)^quL!`0F#0ehGs~Ehq$E7+>z;b4?qWR4yYJ8HRdW^td?N8I zGfbO!gLrz=HaPDSM_5r-iO-2gO}ZfQBi9v|-#8bVEbz>TnNH0UM~KBj2P+-Sil#<9 zNgP!*o$`f@%PQwB&RV(3TKD8H4CVBdWvu?swklh8!_5-QY@tCJnrEi zZ2Bc~DdZ}Fkz)ZBXpozJ@IUxHTPr^??k0ueK;Xr3K8AtdF3_ks&iAq7G)@5jGjOH1 z{gpZ}^GSNGtwoQ3@HTL9-PV*n;Bp5Tcrs*DZc2VyLOu_?pV2pEf&N>dXU&~k>l~*K zK$>Qiya5glfsq1buY0_^yK`>;_O#~r15zMznq$yf(f|Me32;bRa{vG?BLDy{BLR4& zKXw2B00(qQO+^Rg1pyWwF6uocRsaA18FWQhbVF}#ZDnqB07G(RVRU6=Aa`kWXdp*P zO;A^X4i^9b0WL{IK~y-))sr!6!ax{?pFpB#Oa_N8f`dUP1%E*t>{@95a5L0j;NWCP zgh(maR;(qSCVCx8uC;30)o*%v;d$RXzB{;>acZ7&YM%P(n}0!tZnoM~Y@0Z8)jSy) zg>U=^5<&nVr34_3B8m|6H%OGrCr{S&JODLMMuzFsJauz>M-;~Z2qAQn+-wd)y4{Y} zZ_6e5uA@wV@pz2i_X#KAQCq9s(mJ>gkW!N6IaS+c{kr(PLY8F&_W^_J0pTP(X!;Hn zW0~gR7A(sGVE8b^@B1eqfU0e4ovzcbfYoY+>$(7hlaT#>f7Dnil}Ohq&&f>tQa&2y z`yw(bj;jD2vfXYqnD26)rqcuH=poIMkwK%USDEi}US_ki(Al|a^pp^FB}83a&L{f- XYbTF1l86~?00000NkvXXu0mjfuKdei literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/wafer_diamond.png b/src/main/resources/assets/hbm/textures/items/wafer_diamond.png new file mode 100644 index 0000000000000000000000000000000000000000..10db83af14808c5b1b07c130b3c88a749c9cad6b GIT binary patch literal 1657 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/wafer_lapis.png b/src/main/resources/assets/hbm/textures/items/wafer_lapis.png new file mode 100644 index 0000000000000000000000000000000000000000..3d6760a26205f0f5dc10271f1b8ace611c100995 GIT binary patch literal 1653 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