diff --git a/src/main/java/api/hbm/fluid/IFluidConnector.java b/src/main/java/api/hbm/fluid/IFluidConnector.java index dd8c2c4ab..9ec663305 100644 --- a/src/main/java/api/hbm/fluid/IFluidConnector.java +++ b/src/main/java/api/hbm/fluid/IFluidConnector.java @@ -17,7 +17,7 @@ public interface IFluidConnector { * @param power * @return */ - public int transferFluid(FluidType type, int fluid); + public long transferFluid(FluidType type, long fluid); /** * Whether the given side can be connected to @@ -33,7 +33,7 @@ public interface IFluidConnector { * @param type * @return */ - public int getDemand(FluidType type); + public long getDemand(FluidType type); /** * Basic implementation of subscribing to a nearby power grid diff --git a/src/main/java/api/hbm/fluid/IPipeNet.java b/src/main/java/api/hbm/fluid/IPipeNet.java index 8571f16e9..e218df51f 100644 --- a/src/main/java/api/hbm/fluid/IPipeNet.java +++ b/src/main/java/api/hbm/fluid/IPipeNet.java @@ -1,5 +1,6 @@ package api.hbm.fluid; +import java.util.HashSet; import java.util.List; import com.hbm.inventory.fluid.FluidType; @@ -9,7 +10,7 @@ public interface IPipeNet { public void joinNetworks(IPipeNet network); public List getLinks(); - public List getSubscribers(); + public HashSet getSubscribers(); public IPipeNet joinLink(IFluidConductor conductor); public void leaveLink(IFluidConductor conductor); @@ -22,6 +23,6 @@ public interface IPipeNet { public boolean isValid(); - public long transferFluid(long power); + public long transferFluid(long fill); public FluidType getType(); } diff --git a/src/main/java/api/hbm/fluid/PipeNet.java b/src/main/java/api/hbm/fluid/PipeNet.java index 6e15a06d0..2a2c6bf78 100644 --- a/src/main/java/api/hbm/fluid/PipeNet.java +++ b/src/main/java/api/hbm/fluid/PipeNet.java @@ -1,15 +1,19 @@ package api.hbm.fluid; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import com.hbm.inventory.fluid.FluidType; +import net.minecraft.tileentity.TileEntity; + public class PipeNet implements IPipeNet { - + + private boolean valid = true; private FluidType type; private List links = new ArrayList(); - private List subscribers = new ArrayList(); + private HashSet subscribers = new HashSet(); public PipeNet(FluidType type) { this.type = type; @@ -40,44 +44,79 @@ public class PipeNet implements IPipeNet { } @Override - public List getSubscribers() { + public HashSet getSubscribers() { return subscribers; } @Override public IPipeNet joinLink(IFluidConductor conductor) { - // TODO Auto-generated method stub - return null; + + if(conductor.getPipeNet(type) != null) + conductor.getPipeNet(type).leaveLink(conductor); + + conductor.setPipeNet(type, this); + this.links.add(conductor); + return this; } @Override public void leaveLink(IFluidConductor conductor) { - // TODO Auto-generated method stub - + conductor.setPipeNet(type, null); + this.links.remove(conductor); } @Override public void subscribe(IFluidConnector connector) { - // TODO Auto-generated method stub - + this.subscribers.add(connector); } @Override public void unsubscribe(IFluidConnector connector) { - // TODO Auto-generated method stub - + this.subscribers.remove(connector); } @Override public boolean isSubscribed(IFluidConnector connector) { - // TODO Auto-generated method stub - return false; + return this.subscribers.contains(connector); } @Override - public long transferFluid(long power) { - // TODO Auto-generated method stub - return 0; + public long transferFluid(long fill) { + + this.subscribers.removeIf(x -> + x == null || !(x instanceof TileEntity) || ((TileEntity)x).isInvalid() + ); + + if(this.subscribers.isEmpty()) + return fill; + + List subList = new ArrayList(subscribers); + + List weight = new ArrayList(); + long totalReq = 0; + + for(IFluidConnector con : subList) { + long req = con.getDemand(type); + weight.add(req); + totalReq += req; + } + + if(totalReq == 0) + return fill; + + long totalGiven = 0; + + for(int i = 0; i < subList.size(); i++) { + IFluidConnector con = subList.get(i); + long req = weight.get(i); + double fraction = (double)req / (double)totalReq; + + long given = (long) Math.floor(fraction * fill); + + totalGiven += (given - con.transferFluid(type, given)); + } + + return fill - totalGiven; } @Override @@ -87,13 +126,17 @@ public class PipeNet implements IPipeNet { @Override public void destroy() { - // TODO Auto-generated method stub + this.valid = false; + this.subscribers.clear(); + for(IFluidConductor con : this.links) + con.setPipeNet(type, null); + + this.links.clear(); } @Override public boolean isValid() { - // TODO Auto-generated method stub - return false; + return this.valid; } } diff --git a/src/main/java/com/hbm/blocks/BlockEnumMulti.java b/src/main/java/com/hbm/blocks/BlockEnumMulti.java new file mode 100644 index 000000000..5ece200f7 --- /dev/null +++ b/src/main/java/com/hbm/blocks/BlockEnumMulti.java @@ -0,0 +1,64 @@ +package com.hbm.blocks; + +import java.util.List; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +public class BlockEnumMulti extends BlockBase { + + public Class theEnum; + public boolean multiName; + private boolean multiTexture; + + public BlockEnumMulti(Material mat, Class theEnum, boolean multiName, boolean multiTexture) { + super(mat); + this.theEnum = theEnum; + this.multiName = multiName; + this.multiTexture = multiTexture; + } + + @Override + public int damageDropped(int meta) { + return meta; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(Item item, CreativeTabs tab, List list) { + for(int i = 0; i < theEnum.getEnumConstants().length; ++i) { + list.add(new ItemStack(item, 1, i)); + } + } + + private IIcon[] icons; + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + + if(multiTexture) { + Enum[] enums = theEnum.getEnumConstants(); + this.icons = new IIcon[enums.length]; + + for(int i = 0; i < icons.length; i++) { + Enum num = enums[i]; + this.icons[i] = reg.registerIcon(this.getTextureName() + "." + num.name().toLowerCase()); + } + } else { + this.blockIcon = reg.registerIcon(this.getTextureName()); + } + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + return this.icons[meta % this.icons.length]; + } +} diff --git a/src/main/java/com/hbm/blocks/BlockEnums.java b/src/main/java/com/hbm/blocks/BlockEnums.java new file mode 100644 index 000000000..8b069a935 --- /dev/null +++ b/src/main/java/com/hbm/blocks/BlockEnums.java @@ -0,0 +1,8 @@ +package com.hbm.blocks; + +public class BlockEnums { + + public static enum EnumStoneType { + SULFUR + } +} diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 21c9a450d..5f71c7651 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -133,6 +133,9 @@ public class ModBlocks { public static Block ore_depth_nether_neodymium; public static Block stone_porous; + public static Block stone_resource; + public static Block stalagmite; + public static Block stalactite; public static Block depth_brick; public static Block depth_tiles; @@ -476,6 +479,9 @@ public class ModBlocks { public static Block geysir_vapor; public static Block geysir_nether; + public static Block observer_off; + public static Block observer_on; + public static Block flame_war; public static Block float_bomb; public static Block therm_endo; @@ -1340,6 +1346,9 @@ public class ModBlocks { ore_depth_nether_neodymium = new BlockDepthOre().setBlockName("ore_depth_nether_neodymium").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":ore_depth_nether_neodymium"); stone_porous = new BlockPorous().setBlockName("stone_porous").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":stone_porous"); + stone_resource = new BlockEnumMulti(Material.rock, BlockEnums.EnumStoneType.class, true, true).setBlockName("stone_resource").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F); + stalagmite = new BlockStalagmite().setBlockName("stalagmite").setCreativeTab(MainRegistry.blockTab).setHardness(0.5F).setResistance(2.0F); + stalactite = new BlockStalagmite().setBlockName("stalactite").setCreativeTab(MainRegistry.blockTab).setHardness(0.5F).setResistance(2.0F); basalt = new BlockGeneric(Material.rock).setBlockName("basalt").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":basalt"); basalt_sulfur = new BlockOre(Material.rock).setBlockName("basalt_sulfur").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":basalt_sulfur"); @@ -1679,6 +1688,9 @@ public class ModBlocks { geysir_vapor = new BlockGeysir(Material.rock).setBlockName("geysir_vapor").setStepSound(Block.soundTypeStone).setHardness(5.0F); geysir_nether = new BlockGeysir(Material.rock).setBlockName("geysir_nether").setLightLevel(1.0F).setStepSound(Block.soundTypeStone).setHardness(2.0F); + observer_off = new BlockObserver(Material.iron, false).setBlockName("observer_off").setStepSound(Block.soundTypeStone).setHardness(2.0F); + observer_on = new BlockObserver(Material.iron, true).setBlockName("observer_on").setStepSound(Block.soundTypeStone).setHardness(2.0F); + nuke_gadget = new NukeGadget(Material.iron).setBlockName("nuke_gadget").setCreativeTab(MainRegistry.nukeTab).setHardness(5.0F).setResistance(6000.0F).setBlockTextureName(RefStrings.MODID + ":theGadget"); nuke_boy = new NukeBoy(Material.iron).setBlockName("nuke_boy").setCreativeTab(MainRegistry.nukeTab).setHardness(5.0F).setResistance(6000.0F).setBlockTextureName(RefStrings.MODID + ":lilBoy"); nuke_man = new NukeMan(Material.iron).setBlockName("nuke_man").setCreativeTab(MainRegistry.nukeTab).setHardness(5.0F).setResistance(6000.0F).setBlockTextureName(RefStrings.MODID + ":fatMan"); @@ -2377,6 +2389,11 @@ public class ModBlocks { GameRegistry.registerBlock(crystal_robust, crystal_robust.getUnlocalizedName()); GameRegistry.registerBlock(crystal_trixite, crystal_trixite.getUnlocalizedName()); + //Resource-bearing Stones + GameRegistry.registerBlock(stone_resource, ItemBlockBase.class, stone_resource.getUnlocalizedName()); + GameRegistry.registerBlock(stalagmite, ItemBlockBase.class, stalagmite.getUnlocalizedName()); + GameRegistry.registerBlock(stalactite, ItemBlockBase.class, stalactite.getUnlocalizedName()); + //Stone Variants GameRegistry.registerBlock(stone_porous, stone_porous.getUnlocalizedName()); GameRegistry.registerBlock(stone_gneiss, stone_gneiss.getUnlocalizedName()); @@ -2829,6 +2846,9 @@ public class ModBlocks { GameRegistry.registerBlock(bomber, bomber.getUnlocalizedName()); //Machines + //GameRegistry.registerBlock(observer_off, observer_off.getUnlocalizedName()); + //GameRegistry.registerBlock(observer_on, observer_on.getUnlocalizedName()); + GameRegistry.registerBlock(anvil_iron, ItemBlockBase.class, anvil_iron.getUnlocalizedName()); GameRegistry.registerBlock(anvil_lead, ItemBlockBase.class, anvil_lead.getUnlocalizedName()); GameRegistry.registerBlock(anvil_steel, ItemBlockBase.class, anvil_steel.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/generic/BlockStalagmite.java b/src/main/java/com/hbm/blocks/generic/BlockStalagmite.java new file mode 100644 index 000000000..9358ab147 --- /dev/null +++ b/src/main/java/com/hbm/blocks/generic/BlockStalagmite.java @@ -0,0 +1,70 @@ +package com.hbm.blocks.generic; + +import java.util.Random; + +import com.hbm.blocks.BlockEnumMulti; +import com.hbm.blocks.BlockEnums; +import com.hbm.blocks.ModBlocks; +import com.hbm.items.ModItems; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.item.Item; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class BlockStalagmite extends BlockEnumMulti { + + public BlockStalagmite() { + super(Material.rock, BlockEnums.EnumStoneType.class, true, true); + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + public int getRenderType() { + return 1; + } + + @Override + public Item getItemDropped(int meta, Random rang, int fortune) { + + switch(meta) { + case 0: return ModItems.sulfur; + } + + return null; + } + + @Override + public boolean canPlaceBlockAt(World world, int x, int y, int z) { + + if(this == ModBlocks.stalagmite) + return World.doesBlockHaveSolidTopSurface(world, x, y - 1, z); + if(this == ModBlocks.stalactite) + return world.isSideSolid(x, y + 1, z, ForgeDirection.DOWN); + + return true; + } + + @Override + public void onNeighborBlockChange(World world, int x, int y, int z, Block block) { + if(!canPlaceBlockAt(world, x, y, z)) { + world.func_147480_a(x, y, z, true); + } + } + + @Override + public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { + return null; + } +} diff --git a/src/main/java/com/hbm/blocks/machine/BlockObserver.java b/src/main/java/com/hbm/blocks/machine/BlockObserver.java new file mode 100644 index 000000000..e1dfa027f --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/BlockObserver.java @@ -0,0 +1,83 @@ +package com.hbm.blocks.machine; + +import java.util.Random; + +import com.hbm.blocks.ModBlocks; +import com.hbm.lib.RefStrings; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.block.BlockPistonBase; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class BlockObserver extends Block { + + private boolean isActive; + + @SideOnly(Side.CLIENT) + private IIcon iconFront; + @SideOnly(Side.CLIENT) + private IIcon iconBack; + + public BlockObserver(Material mat, boolean isActive) { + super(mat); + this.isActive = isActive; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + this.iconBack = iconRegister.registerIcon(RefStrings.MODID + (this.isActive ? ":observer_back_on" : ":observer_back_off")); + this.iconFront = iconRegister.registerIcon(RefStrings.MODID + ":observer_front"); + this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":observer_side"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int metadata) { + ForgeDirection dir = ForgeDirection.getOrientation(metadata); + ForgeDirection opp = dir.getOpposite(); + return side == dir.ordinal() ? iconFront : side == opp.ordinal() ? iconBack : blockIcon; + } + + @Override + public Item getItemDropped(int meta, Random rand, int luck) { + return Item.getItemFromBlock(ModBlocks.observer_off); + } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) { + int l = BlockPistonBase.determineOrientation(world, x, y, z, player); + world.setBlockMetadataWithNotify(x, y, z, l, 2); + + if(this.isActive) + world.scheduleBlockUpdate(x, y, z, this, 2); + } + + @Override + public void onNeighborBlockChange(World world, int x, int y, int z, Block block) { + + if(!this.isActive) { + + } + } + + @Override + public boolean canProvidePower() { + return this.isActive; + } + + @Override + public int isProvidingWeakPower(IBlockAccess world, int x, int y, int z, int side) { + return this.isActive ? 15 : 0; + } +} diff --git a/src/main/java/com/hbm/blocks/machine/SoyuzLauncher.java b/src/main/java/com/hbm/blocks/machine/SoyuzLauncher.java index 8e066e31f..480073153 100644 --- a/src/main/java/com/hbm/blocks/machine/SoyuzLauncher.java +++ b/src/main/java/com/hbm/blocks/machine/SoyuzLauncher.java @@ -160,63 +160,55 @@ public class SoyuzLauncher extends BlockDummyable { private static boolean keepInventory; @Override - public void breakBlock(World world, int x, int y, int z, Block p_149749_5_, int i) - { - if (!keepInventory) - { - ISidedInventory tileentityfurnace = (ISidedInventory)world.getTileEntity(x, y, z); + public void breakBlock(World world, int x, int y, int z, Block p_149749_5_, int i) { + if(!keepInventory) { + ISidedInventory tileentityfurnace = (ISidedInventory) world.getTileEntity(x, y, z); - if (tileentityfurnace != null) - { - for (int i1 = 0; i1 < tileentityfurnace.getSizeInventory(); ++i1) - { - ItemStack itemstack = tileentityfurnace.getStackInSlot(i1); + if(tileentityfurnace != null) { + for(int i1 = 0; i1 < tileentityfurnace.getSizeInventory(); ++i1) { + ItemStack itemstack = tileentityfurnace.getStackInSlot(i1); - if (itemstack != null) - { - float f = this.field_149933_a.nextFloat() * 0.8F + 0.1F; - float f1 = this.field_149933_a.nextFloat() * 0.8F + 0.1F; - float f2 = this.field_149933_a.nextFloat() * 0.8F + 0.1F; + if(itemstack != null) { + float f = this.field_149933_a.nextFloat() * 0.8F + 0.1F; + float f1 = this.field_149933_a.nextFloat() * 0.8F + 0.1F; + float f2 = this.field_149933_a.nextFloat() * 0.8F + 0.1F; - while (itemstack.stackSize > 0) - { - int j1 = this.field_149933_a.nextInt(21) + 10; + while(itemstack.stackSize > 0) { + int j1 = this.field_149933_a.nextInt(21) + 10; - if (j1 > itemstack.stackSize) - { - j1 = itemstack.stackSize; - } + if(j1 > itemstack.stackSize) { + j1 = itemstack.stackSize; + } - itemstack.stackSize -= j1; - EntityItem entityitem = new EntityItem(world, x + f, y + f1, z + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage())); + itemstack.stackSize -= j1; + EntityItem entityitem = new EntityItem(world, x + f, y + f1, z + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage())); - if (itemstack.hasTagCompound()) - { - entityitem.getEntityItem().setTagCompound((NBTTagCompound)itemstack.getTagCompound().copy()); - } + if(itemstack.hasTagCompound()) { + entityitem.getEntityItem().setTagCompound((NBTTagCompound) itemstack.getTagCompound().copy()); + } - float f3 = 0.05F; - entityitem.motionX = (float)this.field_149933_a.nextGaussian() * f3; - entityitem.motionY = (float)this.field_149933_a.nextGaussian() * f3 + 0.2F; - entityitem.motionZ = (float)this.field_149933_a.nextGaussian() * f3; - world.spawnEntityInWorld(entityitem); - } - } - } - - for(int l = 0; l < 10; l++) - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.struct_launcher, 38))); - for(int l = 0; l < 8; l++) - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.concrete_smooth, 41))); - for(int l = 0; l < 6; l++) - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.struct_scaffold, 64))); - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.struct_scaffold, 53))); - - world.func_147453_f(x, y, z, p_149749_5_); - } - } + float f3 = 0.05F; + entityitem.motionX = (float) this.field_149933_a.nextGaussian() * f3; + entityitem.motionY = (float) this.field_149933_a.nextGaussian() * f3 + 0.2F; + entityitem.motionZ = (float) this.field_149933_a.nextGaussian() * f3; + world.spawnEntityInWorld(entityitem); + } + } + } - super.breakBlock(world, x, y, z, p_149749_5_, i); - } + for(int l = 0; l < 10; l++) + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.struct_launcher, 38))); + for(int l = 0; l < 8; l++) + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.concrete_smooth, 41))); + for(int l = 0; l < 6; l++) + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.struct_scaffold, 64))); + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.struct_scaffold, 53))); + + world.func_147453_f(x, y, z, p_149749_5_); + } + } + + super.breakBlock(world, x, y, z, p_149749_5_, i); + } } diff --git a/src/main/java/com/hbm/blocks/test/TestPipe.java b/src/main/java/com/hbm/blocks/test/TestPipe.java index 7b5563a9c..598b0e794 100644 --- a/src/main/java/com/hbm/blocks/test/TestPipe.java +++ b/src/main/java/com/hbm/blocks/test/TestPipe.java @@ -3,16 +3,36 @@ package com.hbm.blocks.test; import com.hbm.tileentity.network.TileEntityPipeBaseNT; import cpw.mods.fml.client.registry.RenderingRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; import net.minecraft.world.World; public class TestPipe extends BlockContainer { + @SideOnly(Side.CLIENT) + protected IIcon overlay; + public TestPipe(Material mat) { super(mat); } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + super.registerBlockIcons(iconRegister); + this.overlay = iconRegister.registerIcon(this.getTextureName() + "_overlay"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int metadata) { + return side == 0 ? this.blockIcon : this.overlay; + } @Override public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { diff --git a/src/main/java/com/hbm/handler/MultiblockHandlerXR.java b/src/main/java/com/hbm/handler/MultiblockHandlerXR.java index 95b599547..80ed65dc5 100644 --- a/src/main/java/com/hbm/handler/MultiblockHandlerXR.java +++ b/src/main/java/com/hbm/handler/MultiblockHandlerXR.java @@ -29,7 +29,7 @@ public class MultiblockHandlerXR { if(a == ox && b == oy && c == oz) continue; - if(!world.getBlock(a, b, c).canPlaceBlockAt(world, a, b, c)) { + if(!world.getBlock(a, b, c).isReplaceable(world, a, b, c)) { return false; } diff --git a/src/main/java/com/hbm/handler/guncfg/GunNPCFactory.java b/src/main/java/com/hbm/handler/guncfg/GunNPCFactory.java index d2482addc..d9c8407e3 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunNPCFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunNPCFactory.java @@ -10,6 +10,7 @@ import com.hbm.handler.BulletConfiguration; import com.hbm.interfaces.IBulletImpactBehavior; import com.hbm.interfaces.IBulletUpdateBehavior; import com.hbm.items.ModItems; +import com.hbm.lib.ModDamageSource; import com.hbm.main.MainRegistry; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; @@ -92,6 +93,7 @@ public class GunNPCFactory { bullet.explosive = 0.5F; bullet.setToBolt(BulletConfiguration.BOLT_LACUNAE); bullet.vPFX = "reddust"; + bullet.damageType = ModDamageSource.s_laser; return bullet; } @@ -124,6 +126,7 @@ public class GunNPCFactory { bullet.leadChance = 0; bullet.setToBolt(BulletConfiguration.BOLT_NIGHTMARE); bullet.vPFX = "reddust"; + bullet.damageType = ModDamageSource.s_laser; bullet.bImpact = new IBulletImpactBehavior() { @@ -210,6 +213,7 @@ public class GunNPCFactory { bullet.leadChance = 0; bullet.doesRicochet = false; bullet.setToBolt(BulletConfiguration.BOLT_WORM); + bullet.damageType = ModDamageSource.s_laser; return bullet; } @@ -226,6 +230,7 @@ public class GunNPCFactory { bullet.leadChance = 0; bullet.doesRicochet = false; bullet.setToBolt(BulletConfiguration.BOLT_LASER); + bullet.damageType = ModDamageSource.s_laser; return bullet; } diff --git a/src/main/java/com/hbm/inventory/OreDictManager.java b/src/main/java/com/hbm/inventory/OreDictManager.java index e70a3fe3f..753106a53 100644 --- a/src/main/java/com/hbm/inventory/OreDictManager.java +++ b/src/main/java/com/hbm/inventory/OreDictManager.java @@ -10,6 +10,7 @@ import static com.hbm.items.ModItems.*; import static com.hbm.blocks.ModBlocks.*; import static com.hbm.inventory.OreDictManager.DictFrame.*; +import com.hbm.blocks.BlockEnums.EnumStoneType; import com.hbm.config.GeneralConfig; import com.hbm.hazard.HazardData; import com.hbm.hazard.HazardEntry; @@ -349,7 +350,7 @@ public class OreDictManager { /* * DUST AND GEM ORES */ - S .dust(sulfur) .block(block_sulfur) .ore(ore_sulfur, ore_nether_sulfur, basalt_sulfur, ore_meteor_sulfur) .oreNether(ore_nether_sulfur); + S .dust(sulfur) .block(block_sulfur) .ore(ore_sulfur, ore_nether_sulfur, basalt_sulfur, ore_meteor_sulfur, DictFrame.fromOne(stone_resource, EnumStoneType.SULFUR)) .oreNether(ore_nether_sulfur); KNO .dust(niter) .block(block_niter) .ore(ore_niter); F .dust(fluorite) .block(block_fluorite) .ore(ore_fluorite, basalt_fluorite); LIGNITE .gem(lignite) .dust(powder_lignite) .ore(ore_lignite); @@ -572,9 +573,15 @@ public class OreDictManager { public static ItemStack fromOne(Item item, Enum en) { return new ItemStack(item, 1, en.ordinal()); } + public static ItemStack fromOne(Block block, Enum en) { + return new ItemStack(block, 1, en.ordinal()); + } public static ItemStack fromOne(Item item, Enum en, int stacksize) { return new ItemStack(item, stacksize, en.ordinal()); } + public static ItemStack fromOne(Block block, Enum en, int stacksize) { + return new ItemStack(block, stacksize, en.ordinal()); + } /** Same as fromOne but with an array of ItemStacks. The array type is Object[] so that the ODM methods work with it. Generates ItemStacks for the entire enum class. */ public static Object[] fromAll(Item item, Class en) { Enum[] vals = en.getEnumConstants(); diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index 7a27b4aca..8b7518cb3 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -178,6 +178,7 @@ public class AssemblerRecipes { makeRecipe(new ComparableStack(ModItems.warhead_buster_medium, 1), new AStack[] {new ComparableStack(ModItems.warhead_generic_medium, 1), new ComparableStack(ModBlocks.det_cord, 4), new ComparableStack(ModBlocks.det_charge, 4), },150); makeRecipe(new ComparableStack(ModItems.warhead_buster_large, 1), new AStack[] {new ComparableStack(ModItems.warhead_generic_large, 1), new ComparableStack(ModBlocks.det_charge, 8), },200); makeRecipe(new ComparableStack(ModItems.warhead_nuclear, 1), new AStack[] {new ComparableStack(ModItems.boy_shielding, 1), new ComparableStack(ModItems.boy_target, 1), new ComparableStack(ModItems.boy_bullet, 1), new OreDictStack(TI.plate(), 20), new OreDictStack(STEEL.plate(), 12), },300); + makeRecipe(new ComparableStack(ModItems.warhead_mirv, 1), new AStack[] {new OreDictStack(TI.plate(), 20), new OreDictStack(STEEL.plate(), 12), new OreDictStack(PU239.ingot(), 1), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 8), new OreDictStack(OreDictManager.getReflector(), 6), new OreDictStack(LI.ingot(), 4), new ComparableStack(ModItems.cell_deuterium, 6), },500); makeRecipe(new ComparableStack(ModItems.warhead_volcano, 1), new AStack[] {new OreDictStack(TI.plate(), 24), new OreDictStack(STEEL.plate(), 16), new ComparableStack(ModBlocks.det_nuke, 3), new OreDictStack(U238.block(), 24), new ComparableStack(ModItems.circuit_tantalium, 5) }, 600); makeRecipe(new ComparableStack(ModItems.warhead_thermo_endo, 1), new AStack[] {new ComparableStack(ModBlocks.therm_endo, 2), new OreDictStack(TI.plate(), 12), new OreDictStack(STEEL.plate(), 6), },300); makeRecipe(new ComparableStack(ModItems.warhead_thermo_exo, 1), new AStack[] {new ComparableStack(ModBlocks.therm_exo, 2), new OreDictStack(TI.plate(), 12), new OreDictStack(STEEL.plate(), 6), },300); diff --git a/src/main/java/com/hbm/inventory/recipes/ChemplantRecipes.java b/src/main/java/com/hbm/inventory/recipes/ChemplantRecipes.java index 43045d169..3a4a67f97 100644 --- a/src/main/java/com/hbm/inventory/recipes/ChemplantRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ChemplantRecipes.java @@ -93,6 +93,12 @@ public class ChemplantRecipes { .inputItems(new OreDictStack(KNO.dust())) .inputFluids(new FluidStack(Fluids.AROMATICS, 500)) .outputItems(new ItemStack(ModItems.ball_tnt, 4))); + recipes.add(new ChemRecipe(89, "DYNAMITE", 50) + .inputItems( + new ComparableStack(Items.sugar), + new OreDictStack(KNO.dust()), + new OreDictStack("sand")) + .outputItems(new ItemStack(ModItems.ball_dynamite, 2))); recipes.add(new ChemRecipe(84, "C4", 150) .inputItems(new OreDictStack(KNO.dust())) .inputFluids(new FluidStack(Fluids.UNSATURATEDS, 500)) diff --git a/src/main/java/com/hbm/items/block/ItemBlockBase.java b/src/main/java/com/hbm/items/block/ItemBlockBase.java index ee230584b..25d85b537 100644 --- a/src/main/java/com/hbm/items/block/ItemBlockBase.java +++ b/src/main/java/com/hbm/items/block/ItemBlockBase.java @@ -2,7 +2,9 @@ package com.hbm.items.block; import java.util.List; +import com.hbm.blocks.BlockEnumMulti; import com.hbm.blocks.ITooltipProvider; +import com.hbm.util.EnumUtil; import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; @@ -14,6 +16,31 @@ public class ItemBlockBase extends ItemBlock { public ItemBlockBase(Block block) { super(block); + + if(block instanceof BlockEnumMulti) { + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + } + + @Override + public int getMetadata(int meta) { + if(field_150939_a instanceof BlockEnumMulti) + return meta; + else + return super.getMetadata(meta); + } + + @Override + public String getUnlocalizedName(ItemStack stack) { + + if(field_150939_a instanceof BlockEnumMulti && ((BlockEnumMulti)field_150939_a).multiName) { + + Enum num = EnumUtil.grabEnumSafely(((BlockEnumMulti)field_150939_a).theEnum, stack.getItemDamage()); + return super.getUnlocalizedName() + "." + num.name().toLowerCase(); + } else { + return super.getUnlocalizedName(stack); + } } @Override diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index faa039536..21cb9e94c 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -679,6 +679,7 @@ public class ClientProxy extends ServerProxy { RenderingRegistry.registerBlockHandler(new RenderAnvil()); RenderingRegistry.registerBlockHandler(new RenderCrystal()); RenderingRegistry.registerBlockHandler(new RenderTestCable()); + RenderingRegistry.registerBlockHandler(new RenderTestPipe()); RenderingRegistry.registerBlockHandler(new RenderBlockCT()); RenderingRegistry.registerBlockHandler(new RenderDetCord()); RenderingRegistry.registerBlockHandler(new RenderBlockMultipass()); @@ -1161,17 +1162,20 @@ public class ClientProxy extends ServerProxy { } } } - - double motionX = BobMathUtil.safeClamp(p.motionX + moX, -5, 5); - double motionY = BobMathUtil.safeClamp(p.motionY + moY, -2, 2); - double motionZ = BobMathUtil.safeClamp(p.motionZ + moZ, -5, 5); - Minecraft.getMinecraft().effectRenderer.addEffect(new EntityFlameFX(world, ix + ox, iy, iz + oz, motionX * 2, motionY * 2, motionZ * 2)); - Minecraft.getMinecraft().effectRenderer.addEffect(new EntityFlameFX(world, ix - ox, iy, iz - oz, motionX * 2, motionY * 2, motionZ * 2)); + double mX2 = BobMathUtil.safeClamp(p.motionX + moX * 2, -5, 5); + double mY2 = BobMathUtil.safeClamp(p.motionY + moY * 2, -5, 5); + double mZ2 = BobMathUtil.safeClamp(p.motionZ + moZ * 2, -5, 5); + double mX3 = BobMathUtil.safeClamp(p.motionX + moX * 2, -10, 10); + double mY3 = BobMathUtil.safeClamp(p.motionY + moY * 2, -10, 10); + double mZ3 = BobMathUtil.safeClamp(p.motionZ + moZ * 2, -10, 10); + + Minecraft.getMinecraft().effectRenderer.addEffect(new EntityFlameFX(world, ix + ox, iy, iz + oz, mX2, mY2, mZ2)); + Minecraft.getMinecraft().effectRenderer.addEffect(new EntityFlameFX(world, ix - ox, iy, iz - oz, mX2, mY2, mZ2)); if(particleSetting == 0) { - Minecraft.getMinecraft().effectRenderer.addEffect(new net.minecraft.client.particle.EntitySmokeFX(world, ix + ox, iy, iz + oz, motionX * 3, motionY * 3, motionZ * 3)); - Minecraft.getMinecraft().effectRenderer.addEffect(new net.minecraft.client.particle.EntitySmokeFX(world, ix - ox, iy, iz - oz, motionX * 3, motionY * 3, motionZ * 3)); + Minecraft.getMinecraft().effectRenderer.addEffect(new net.minecraft.client.particle.EntitySmokeFX(world, ix + ox, iy, iz + oz, mX3, mY3, mZ3)); + Minecraft.getMinecraft().effectRenderer.addEffect(new net.minecraft.client.particle.EntitySmokeFX(world, ix - ox, iy, iz - oz, mX3, mY3, mZ3)); } } } diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 26e7c2c1b..1963143b1 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -71,6 +71,7 @@ import com.hbm.tileentity.bomb.TileEntityNukeCustom; import com.hbm.tileentity.machine.*; import com.hbm.tileentity.machine.rbmk.RBMKDials; import com.hbm.util.ArmorUtil; +import com.hbm.world.feature.OreCave; import com.hbm.world.feature.SchistStratum; import com.hbm.world.generator.CellularDungeonFactory; @@ -973,6 +974,9 @@ public class MainRegistry { //expand for the largest entity we have (currently Quackos who is 17.5m in diameter, that's one fat duck) World.MAX_ENTITY_RADIUS = Math.max(World.MAX_ENTITY_RADIUS, 8.75); + + new OreCave(ModBlocks.stone_resource, 0).setThreshold(1.5D).setRangeMult(20).setYLevel(30).setMaxRange(20); + //new OreLayer(Blocks.coal_ore, 0.2F).setThreshold(4).setRangeMult(3).setYLevel(70); } @EventHandler @@ -989,8 +993,6 @@ public class MainRegistry { SchistStratum schist = new SchistStratum(); MinecraftForge.EVENT_BUS.register(schist); //DecorateBiomeEvent.Pre - //new OreLayer(Blocks.coal_ore, 0.2F).setThreshold(4).setRangeMult(3).setYLevel(70); - OreDictManager oreMan = new OreDictManager(); MinecraftForge.EVENT_BUS.register(oreMan); //OreRegisterEvent diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 4f67e998b..8c32969af 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -1179,6 +1179,7 @@ public class ResourceManager { public static final IModelCustom crystal_robust = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/crystals_robust.obj")); public static final IModelCustom crystal_trixite = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/crystals_trixite.obj")); public static final IModelCustom cable_neo = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/cable_neo.obj")); + public static final IModelCustom pipe_neo = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/pipe_neo.obj")); public static final IModelCustom charge_dynamite = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/charge_dynamite.obj")); public static final IModelCustom charge_c4 = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/charge_c4.obj")); diff --git a/src/main/java/com/hbm/render/block/RenderTestPipe.java b/src/main/java/com/hbm/render/block/RenderTestPipe.java new file mode 100644 index 000000000..849fcd0ba --- /dev/null +++ b/src/main/java/com/hbm/render/block/RenderTestPipe.java @@ -0,0 +1,130 @@ +package com.hbm.render.block; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.test.TestPipe; +import com.hbm.lib.Library; +import com.hbm.main.ResourceManager; +import com.hbm.render.util.ObjUtil; + +import api.hbm.fluid.IFluidConductor; +import api.hbm.fluid.IFluidConnector; +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.client.model.obj.WavefrontObject; + +public class RenderTestPipe implements ISimpleBlockRenderingHandler { + + @Override + public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { + + GL11.glPushMatrix(); + Tessellator tessellator = Tessellator.instance; + IIcon iicon = block.getIcon(0, 0); + tessellator.setColorOpaque_F(1, 1, 1); + + if(renderer.hasOverrideBlockTexture()) { + iicon = renderer.overrideBlockTexture; + } + + GL11.glRotated(180, 0, 1, 0); + GL11.glScaled(1.25D, 1.25D, 1.25D); + tessellator.startDrawingQuads(); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "pX", iicon, tessellator, 0, false); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "nX", iicon, tessellator, 0, false); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "pZ", iicon, tessellator, 0, false); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "nZ", iicon, tessellator, 0, false); + tessellator.draw(); + + GL11.glPopMatrix(); + } + + @Override + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { + + Tessellator tessellator = Tessellator.instance; + IIcon iicon = block.getIcon(0, 0); + IIcon overlay = block.getIcon(1, 0); + tessellator.setColorOpaque_F(1, 1, 1); + + if(renderer.hasOverrideBlockTexture()) { + iicon = renderer.overrideBlockTexture; + } + + tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z)); + tessellator.setColorOpaque_F(1, 1, 1); + + boolean pX = world.getTileEntity(x + 1, y, z) instanceof IFluidConductor; + boolean nX = world.getTileEntity(x - 1, y, z) instanceof IFluidConductor; + boolean pY = world.getTileEntity(x, y + 1, z) instanceof IFluidConductor; + boolean nY = world.getTileEntity(x, y - 1, z) instanceof IFluidConductor; + boolean pZ = world.getTileEntity(x, y, z + 1) instanceof IFluidConductor; + boolean nZ = world.getTileEntity(x, y, z - 1) instanceof IFluidConductor; + + int mask = 0 + (pX ? 32 : 0) + (nX ? 16 : 0) + (pY ? 8 : 0) + (nY ? 4 : 0) + (pZ ? 2 : 0) + (nZ ? 1 : 0); + + tessellator.addTranslation(x + 0.5F, y + 0.5F, z + 0.5F); + + int color = 0xff0000; + + if(mask == 0) { + renderDuct(iicon, overlay, color, tessellator, "pX"); + renderDuct(iicon, overlay, color, tessellator, "nX"); + renderDuct(iicon, overlay, color, tessellator, "pY"); + renderDuct(iicon, overlay, color, tessellator, "nY"); + renderDuct(iicon, overlay, color, tessellator, "pZ"); + renderDuct(iicon, overlay, color, tessellator, "nZ"); + } else if(mask == 0b100000 || mask == 0b010000) { + renderDuct(iicon, overlay, color, tessellator, "pX"); + renderDuct(iicon, overlay, color, tessellator, "nX"); + } else if(mask == 0b001000 || mask == 0b000100) { + renderDuct(iicon, overlay, color, tessellator, "pY"); + renderDuct(iicon, overlay, color, tessellator, "nY"); + } else if(mask == 0b000010 || mask == 0b000001) { + renderDuct(iicon, overlay, color, tessellator, "pZ"); + renderDuct(iicon, overlay, color, tessellator, "nZ"); + } else { + + if(pX) renderDuct(iicon, overlay, color, tessellator, "pX"); + if(nX) renderDuct(iicon, overlay, color, tessellator, "nX"); + if(pY) renderDuct(iicon, overlay, color, tessellator, "pY"); + if(nY) renderDuct(iicon, overlay, color, tessellator, "nY"); + if(pZ) renderDuct(iicon, overlay, color, tessellator, "nZ"); + if(nZ) renderDuct(iicon, overlay, color, tessellator, "pZ"); + + if(!pX && !pY && !pZ) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "ppn", iicon, tessellator, 0, true); + if(!pX && !pY && !nZ) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "ppp", iicon, tessellator, 0, true); + if(!nX && !pY && !pZ) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "npn", iicon, tessellator, 0, true); + if(!nX && !pY && !nZ) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "npp", iicon, tessellator, 0, true); + if(!pX && !nY && !pZ) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "pnn", iicon, tessellator, 0, true); + if(!pX && !nY && !nZ) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "pnp", iicon, tessellator, 0, true); + if(!nX && !nY && !pZ) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "nnn", iicon, tessellator, 0, true); + if(!nX && !nY && !nZ) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "nnp", iicon, tessellator, 0, true); + } + + tessellator.addTranslation(-x - 0.5F, -y - 0.5F, -z - 0.5F); + + return true; + } + + private void renderDuct(IIcon iicon, IIcon overlay, int color, Tessellator tessellator, String part) { + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, part, iicon, tessellator, 0, true); + ObjUtil.setColor(color); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, part, overlay, tessellator, 0, true); + ObjUtil.clearColor(); + } + + @Override + public boolean shouldRender3DInInventory(int modelId) { + return true; + } + + @Override + public int getRenderId() { + return TestPipe.renderID; + } +} diff --git a/src/main/java/com/hbm/render/util/ObjUtil.java b/src/main/java/com/hbm/render/util/ObjUtil.java index 108b90308..b58628541 100644 --- a/src/main/java/com/hbm/render/util/ObjUtil.java +++ b/src/main/java/com/hbm/render/util/ObjUtil.java @@ -91,7 +91,11 @@ public class ObjUtil { if(brightness < 0.45F) brightness = 0.45F; - tes.setColorOpaque_F(brightness, brightness, brightness); + if(hasColor) { + tes.setColorOpaque((int)(red * brightness), (int)(green * brightness), (int)(blue * brightness)); + } else { + tes.setColorOpaque_F(brightness, brightness, brightness); + } } for(int i = 0; i < f.vertices.length; i++) { @@ -116,4 +120,27 @@ public class ObjUtil { } } } + + private static int red; + private static int green; + private static int blue; + private static boolean hasColor = false; + + public static void setColor(int color) { + red = (color & 0xff0000) >> 16; + green = (color & 0x00ff00) >> 8; + blue = color & 0x0000ff; + hasColor = true; + } + + public static void setColor(int r, int g, int b) { + red = r; + green = g; + blue = b; + hasColor = true; + } + + public static void clearColor() { + hasColor = false; + } } diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 873d7d66c..3b044c1ea 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -184,6 +184,7 @@ public class TileMappings { put(TileEntityDeaerator.class, "tileentity_deaerator"); put(TileEntityChungus.class, "tileentity_chungus"); put(TileEntityCableBaseNT.class, "tileentity_ohgod"); + put(TileEntityPipeBaseNT.class, "tileentity_pipe_base"); put(TileEntityWatz.class, "tileentity_watz"); put(TileEntityMachineBAT9000.class, "tileentity_bat9000"); put(TileEntityMachineOrbus.class, "tileentity_orbus"); diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java b/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java index c55922b77..76f026db5 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityPipeBaseNT.java @@ -74,13 +74,12 @@ public class TileEntityPipeBaseNT extends TileEntity implements IFluidConductor } @Override - public int transferFluid(FluidType type, int fluid) { - // TODO Auto-generated method stub + public long transferFluid(FluidType type, long fluid) { return 0; } @Override - public int getDemand(FluidType type) { + public long getDemand(FluidType type) { return 0; } diff --git a/src/main/java/com/hbm/world/feature/OreCave.java b/src/main/java/com/hbm/world/feature/OreCave.java new file mode 100644 index 000000000..17ec19c43 --- /dev/null +++ b/src/main/java/com/hbm/world/feature/OreCave.java @@ -0,0 +1,125 @@ +package com.hbm.world.feature; + +import java.util.Random; + +import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.generic.BlockStalagmite; +import com.hbm.inventory.RecipesCommon.MetaBlock; + +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.gen.NoiseGeneratorPerlin; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.event.terraingen.DecorateBiomeEvent; + +public class OreCave { + + private NoiseGeneratorPerlin noise; + private MetaBlock ore; + /** The number that is being deducted flat from the result of the perlin noise before all other processing. Increase this to make strata rarer. */ + private double threshold = 2D; + /** The mulitplier for the remaining bit after the threshold has been deducted. Increase to make strata wavier. */ + private int rangeMult = 3; + /** The maximum range after multiplying - anything above this will be subtracted from (maxRange * 2) to yield the proper range. Increase this to make strata thicker. */ + private int maxRange = 4; + /** The y-level around which the stratum is centered. */ + private int yLevel = 30; + + public OreCave(Block ore) { + this(ore, 0); + } + + public OreCave(Block ore, int meta) { + this.ore = new MetaBlock(ore, meta); + MinecraftForge.EVENT_BUS.register(this); + } + + public OreCave setThreshold(double threshold) { + this.threshold = threshold; + return this; + } + + public OreCave setRangeMult(int rangeMult) { + this.rangeMult = rangeMult; + return this; + } + + public OreCave setMaxRange(int maxRange) { + this.maxRange = maxRange; + return this; + } + + public OreCave setYLevel(int yLevel) { + this.yLevel = yLevel; + return this; + } + + @SubscribeEvent + public void onDecorate(DecorateBiomeEvent.Pre event) { + + if(this.noise == null) { + this.noise = new NoiseGeneratorPerlin(new Random(event.world.getSeed() + (ore.getID() * 31) + yLevel), 2); + } + + World world = event.world; + + if(world.provider.dimensionId != 0) + return; + + int cX = event.chunkX; + int cZ = event.chunkZ; + + double scale = 0.01D; + + for(int x = cX; x < cX + 16; x++) { + for(int z = cZ; z < cZ + 16; z++) { + + double n = noise.func_151601_a(x * scale, z * scale); + + if(n > threshold) { + int range = (int)((n - threshold) * rangeMult); + + if(range > maxRange) + range = (maxRange * 2) - range; + + if(range < 0) + continue; + + for(int y = yLevel - range; y <= yLevel + range; y++) { + Block genTarget = world.getBlock(x, y, z); + + if(genTarget.isNormalCube() && (genTarget.getMaterial() == Material.rock || genTarget.getMaterial() == Material.ground)) { + + boolean shouldGen = false; + + for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { + Block neighbor = world.getBlock(MathHelper.clamp_int(x + dir.offsetX, cX, cX + 16), y + dir.offsetY, MathHelper.clamp_int(z + dir.offsetZ, cZ, cZ + 16)); + if(neighbor.getMaterial() == Material.air || neighbor instanceof BlockStalagmite) { + shouldGen = true; + break; + } + } + if(shouldGen) world.setBlock(x, y, z, ore.block, ore.meta, 2); + } else { + + if((genTarget.getMaterial() == Material.air || !genTarget.isNormalCube()) && event.rand.nextInt(5) == 0) { + + if(ModBlocks.stalactite.canPlaceBlockAt(world, x, y, z)) { + world.setBlock(x, y, z, ModBlocks.stalactite, ore.meta, 2); + } else { + if(ModBlocks.stalagmite.canPlaceBlockAt(world, x, y, z)) { + world.setBlock(x, y, z, ModBlocks.stalagmite, ore.meta, 2); + } + } + } + } + } + } + } + } + } +} diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index e9c2e7d07..2e0bdc918 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -137,6 +137,7 @@ chem.DEUTERIUM=Deuteriumextrahierung chem.DYN_DNT=Dineutronium-Dynosynthese chem.DYN_EUPH=Euphemium-Dynosynthese chem.DYN_SCHRAB=Schrabidium-Dynosynthese +chem.DYNAMITE=Dynamitherstellung chem.ELECTROLYSIS=Kryo-Elektrolyse chem.EPEARL=Enderperlen-Synthese chem.ETHANOL=Ethanolherstellung @@ -3553,6 +3554,8 @@ tile.solar_mirror.name=Heliostatspiegel tile.soyuz_capsule.name=Landekapsel tile.soyuz_launcher.name=Soyuz-Startplatform tile.spikes.name=Stacheln +tile.stalactite.sulfur.name=Schwefelhaltiger Stalaktit +tile.stalagmite.sulfur.name=Schwefelhaltiger Stalagmit tile.steel_beam.name=Stahlträger tile.steel_corner.name=Stahlwand (Ecke) tile.steel_grate.name=Stahlgitter @@ -3564,6 +3567,7 @@ tile.stone_depth.name=Tiefenfels tile.stone_depth_nether.name=Nether-Tiefenfels tile.stone_gneiss.name=Graphitschiefer tile.stone_porous.name=Poröser Stein +tile.stone_resource.sulfur.name=Schwefelhaltiger Stein tile.struct_iter_core.name=Fusionsreaktor-Kernkomponente tile.struct_launcher.name=Startrampe-Komponentenblock tile.struct_launcher_core.name=Kompaktrampe-Kernkomponente diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 6e2a95097..25745b257 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -306,6 +306,7 @@ chem.DUCRETE=Ducrete Production chem.DYN_DNT=Dineutronium Dynosynthesis chem.DYN_EUPH=Euphemium Dynosynthesis chem.DYN_SCHRAB=Schrabidium Dynosynthesis +chem.DYNAMITE=Dynamite Synthesis chem.ELECTROLYSIS=Cryo-Electrolysis chem.EPEARL=Ender Pearl Synthesis chem.ETHANOL=Ethanol Production @@ -3926,6 +3927,8 @@ tile.solar_mirror.name=Heliostat Mirror tile.soyuz_capsule.name=Cargo Landing Capsule tile.soyuz_launcher.name=Soyuz Launch Platform tile.spikes.name=Spikes +tile.stalactite.sulfur.name=Sulfurous Stalactite +tile.stalagmite.sulfur.name=Sulfurous Stalagmite tile.steel_beam.name=Steel Beam tile.steel_corner.name=Steel Wall Corner tile.steel_grate.name=Steel Grate @@ -3937,6 +3940,7 @@ tile.stone_depth.name=Depth Rock tile.stone_depth_nether.name=Nether Depth Rock tile.stone_gneiss.name=Graphitic Schist tile.stone_porous.name=Porous Stone +tile.stone_resource.sulfur.name=Sulfurous Stone tile.struct_iter_core.name=Fusion Reactor Core Component tile.struct_launcher.name=Launch Pad Component Block tile.struct_launcher_core.name=Compact Launcher Core Component diff --git a/src/main/resources/assets/hbm/models/blocks/pipe_neo.obj b/src/main/resources/assets/hbm/models/blocks/pipe_neo.obj new file mode 100644 index 000000000..2273b5e22 --- /dev/null +++ b/src/main/resources/assets/hbm/models/blocks/pipe_neo.obj @@ -0,0 +1,664 @@ +# Blender v2.79 (sub 0) OBJ File: 'pipe_neo.blend' +# www.blender.org +o pZ +v 0.187500 0.000000 -0.500000 +v 0.132582 -0.132582 -0.500000 +v -0.000000 -0.187500 -0.500000 +v -0.132583 -0.132582 -0.500000 +v -0.187500 0.000000 -0.500000 +v -0.132583 0.132583 -0.500000 +v -0.000000 0.187500 -0.500000 +v 0.132582 0.132583 -0.500000 +v -0.132582 0.132583 0.000000 +v 0.000000 0.187500 0.000000 +v -0.132582 -0.132583 0.000000 +v -0.187500 0.000000 0.000000 +v 0.132582 -0.132583 0.000000 +v 0.000000 -0.187500 0.000000 +v 0.132582 0.132583 0.000000 +v 0.187500 -0.000000 0.000000 +vt 0.125000 1.000000 +vt 0.000000 0.500000 +vt 0.125000 0.500000 +vt 0.125000 1.000000 +vt 0.000000 0.500000 +vt 0.125000 0.500000 +vt 0.125000 1.000000 +vt 0.000000 0.500000 +vt 0.125000 0.500000 +vt 0.250000 1.000000 +vt 0.250000 0.500000 +vt 0.250000 0.500000 +vt 0.250000 0.500000 +vt 0.250000 1.000000 +vt 0.125000 0.500000 +vt 0.250000 0.500000 +vt 0.125000 1.000000 +vt 0.000000 0.500000 +vt 0.305394 0.319606 +vt 0.250674 0.187500 +vt 0.624326 0.187500 +vt -0.000000 1.000000 +vt -0.000000 1.000000 +vt -0.000000 1.000000 +vt 0.250000 1.000000 +vt 0.250000 1.000000 +vt -0.000000 1.000000 +vt 0.305394 0.055394 +vt 0.437500 0.000674 +vt 0.569606 0.055394 +vt 0.569606 0.319606 +vt 0.437500 0.374326 +vn -0.3827 0.9239 0.0000 +vn -0.9239 -0.3827 0.0000 +vn 0.3827 -0.9239 -0.0000 +vn 0.3827 0.9239 0.0000 +vn -0.9239 0.3827 0.0000 +vn -0.3827 -0.9239 -0.0000 +vn 0.9239 -0.3827 -0.0000 +vn 0.9239 0.3827 -0.0000 +vn 0.0000 0.0000 -1.0000 +s off +f 7/1/1 9/2/1 10/3/1 +f 5/4/2 11/5/2 12/6/2 +f 3/7/3 13/8/3 14/9/3 +f 8/10/4 10/3/4 15/11/4 +f 9/12/5 5/4/5 12/6/5 +f 11/13/6 3/7/6 14/9/6 +f 2/14/7 16/15/7 13/16/7 +f 1/17/8 15/18/8 16/15/8 +f 8/19/9 1/20/9 5/21/9 +f 7/1/1 6/22/1 9/2/1 +f 5/4/2 4/23/2 11/5/2 +f 3/7/3 2/24/3 13/8/3 +f 8/10/4 7/1/4 10/3/4 +f 9/12/5 6/25/5 5/4/5 +f 11/13/6 4/26/6 3/7/6 +f 2/14/7 1/17/7 16/15/7 +f 1/17/8 8/27/8 15/18/8 +f 1/20/9 2/28/9 3/29/9 +f 3/29/9 4/30/9 1/20/9 +f 4/30/9 5/21/9 1/20/9 +f 5/21/9 6/31/9 7/32/9 +f 7/32/9 8/19/9 5/21/9 +o pX +v 0.500000 0.000000 0.187500 +v 0.500000 -0.132582 0.132582 +v 0.500000 -0.187500 0.000000 +v 0.500000 -0.132582 -0.132582 +v 0.500000 0.000000 -0.187500 +v 0.500000 0.132583 -0.132582 +v 0.500000 0.187500 0.000000 +v 0.500000 0.132583 0.132582 +v 0.000000 -0.000000 0.187500 +v 0.000000 0.132583 0.132582 +v 0.000000 -0.187500 0.000000 +v 0.000000 -0.132583 0.132582 +v 0.000000 0.000000 -0.187500 +v 0.000000 -0.132583 -0.132582 +v 0.000000 0.187500 0.000000 +v 0.000000 0.132583 -0.132582 +vt 0.125000 1.000000 +vt 0.000000 0.500000 +vt 0.125000 0.500000 +vt 0.125000 0.500000 +vt -0.000000 1.000000 +vt 0.000000 0.500000 +vt 0.125000 1.000000 +vt 0.000000 0.500000 +vt 0.125000 0.500000 +vt 0.250000 1.000000 +vt 0.250000 0.500000 +vt 0.250000 1.000000 +vt 0.250000 0.500000 +vt 0.250000 1.000000 +vt 0.250000 0.500000 +vt 0.250000 1.000000 +vt 0.125000 0.500000 +vt 0.250000 0.500000 +vt 0.125000 1.000000 +vt 0.000000 0.500000 +vt 0.305394 0.319606 +vt 0.250674 0.187500 +vt 0.624326 0.187500 +vt -0.000000 1.000000 +vt 0.125000 1.000000 +vt -0.000000 1.000000 +vt -0.000000 1.000000 +vt 0.305394 0.055394 +vt 0.437500 0.000674 +vt 0.569606 0.055394 +vt 0.569606 0.319606 +vt 0.437500 0.374326 +vn -0.0000 0.9239 -0.3827 +vn 0.0000 -0.3827 -0.9239 +vn 0.0000 -0.9239 0.3827 +vn -0.0000 0.9239 0.3827 +vn -0.0000 0.3827 -0.9239 +vn 0.0000 -0.9239 -0.3827 +vn 0.0000 -0.3827 0.9239 +vn -0.0000 0.3827 0.9239 +vn 1.0000 0.0000 0.0000 +s off +f 23/33/10 32/34/10 31/35/10 +f 29/36/11 20/37/11 30/38/11 +f 19/39/12 28/40/12 27/41/12 +f 24/42/13 31/35/13 26/43/13 +f 22/44/14 29/36/14 32/45/14 +f 20/46/15 27/41/15 30/47/15 +f 18/48/16 25/49/16 28/50/16 +f 17/51/17 26/52/17 25/49/17 +f 24/53/18 17/54/18 21/55/18 +f 23/33/10 22/56/10 32/34/10 +f 29/36/11 21/57/11 20/37/11 +f 19/39/12 18/58/12 28/40/12 +f 24/42/13 23/33/13 31/35/13 +f 22/44/14 21/57/14 29/36/14 +f 20/46/15 19/39/15 27/41/15 +f 18/48/16 17/51/16 25/49/16 +f 17/51/17 24/59/17 26/52/17 +f 17/54/18 18/60/18 19/61/18 +f 19/61/18 20/62/18 17/54/18 +f 20/62/18 21/55/18 17/54/18 +f 21/55/18 22/63/18 23/64/18 +f 23/64/18 24/53/18 21/55/18 +o nZ +v 0.187500 -0.000000 0.500000 +v 0.132583 -0.132583 0.500000 +v 0.000000 -0.187500 0.500000 +v -0.132582 -0.132583 0.500000 +v -0.187500 -0.000000 0.500000 +v -0.132582 0.132582 0.500000 +v 0.000000 0.187500 0.500000 +v 0.132583 0.132582 0.500000 +v -0.132582 0.132583 0.000000 +v 0.000000 0.187500 0.000000 +v -0.132582 -0.132583 0.000000 +v -0.187500 0.000000 0.000000 +v 0.132582 -0.132583 0.000000 +v 0.000000 -0.187500 0.000000 +v 0.132582 0.132583 0.000000 +v 0.187500 -0.000000 0.000000 +vt 0.624326 0.187500 +vt 0.437500 0.374326 +vt 0.250674 0.187500 +vt 0.125000 0.500000 +vt -0.000000 -0.000000 +vt 0.125000 -0.000000 +vt 0.250000 0.500000 +vt 0.250000 -0.000000 +vt 0.250000 -0.000000 +vt 0.125000 0.500000 +vt 0.125000 -0.000000 +vt 0.250000 0.500000 +vt 0.125000 -0.000000 +vt 0.250000 -0.000000 +vt 0.250000 0.500000 +vt 0.125000 0.000000 +vt 0.250000 0.000000 +vt -0.000000 -0.000000 +vt 0.125000 0.500000 +vt -0.000000 -0.000000 +vt 0.125000 0.500000 +vt -0.000000 0.000000 +vt 0.437500 0.000674 +vt 0.569606 0.055394 +vt 0.569606 0.319606 +vt 0.305394 0.319606 +vt 0.305394 0.055394 +vt 0.000000 0.500000 +vt 0.250000 0.500000 +vt 0.000000 0.500000 +vt 0.000000 0.500000 +vt 0.000000 0.500000 +vn 0.0000 0.0000 1.0000 +vn 0.9239 0.3827 0.0000 +vn 0.9239 -0.3827 -0.0000 +vn -0.3827 -0.9239 -0.0000 +vn -0.9239 0.3827 0.0000 +vn 0.3827 0.9239 0.0000 +vn 0.3827 -0.9239 -0.0000 +vn -0.9239 -0.3827 0.0000 +vn -0.3827 0.9239 0.0000 +s off +f 33/65/19 39/66/19 37/67/19 +f 48/68/20 40/69/20 33/70/20 +f 45/71/21 33/70/21 34/72/21 +f 36/73/22 46/74/22 35/75/22 +f 41/76/23 37/77/23 38/78/23 +f 47/79/24 39/80/24 40/81/24 +f 46/74/25 34/82/25 35/75/25 +f 44/83/26 36/84/26 37/77/26 +f 42/85/27 38/86/27 39/80/27 +f 35/87/19 34/88/19 33/65/19 +f 33/65/19 40/89/19 39/66/19 +f 39/66/19 38/90/19 37/67/19 +f 37/67/19 36/91/19 35/87/19 +f 35/87/19 33/65/19 37/67/19 +f 48/68/20 47/92/20 40/69/20 +f 45/71/21 48/68/21 33/70/21 +f 36/73/22 43/93/22 46/74/22 +f 41/76/23 44/83/23 37/77/23 +f 47/79/24 42/85/24 39/80/24 +f 46/74/25 45/94/25 34/82/25 +f 44/83/26 43/95/26 36/84/26 +f 42/85/27 41/96/27 38/86/27 +o nX +v -0.500000 -0.000000 0.187500 +v -0.500000 -0.132583 0.132583 +v -0.500000 -0.187500 0.000000 +v -0.500000 -0.132583 -0.132582 +v -0.500000 -0.000000 -0.187500 +v -0.500000 0.132582 -0.132582 +v -0.500000 0.187500 0.000000 +v -0.500000 0.132582 0.132583 +v 0.000000 -0.000000 0.187500 +v 0.000000 0.132583 0.132582 +v 0.000000 -0.187500 0.000000 +v 0.000000 -0.132583 0.132582 +v 0.000000 0.000000 -0.187500 +v 0.000000 -0.132583 -0.132582 +v 0.000000 0.187500 0.000000 +v 0.000000 0.132583 -0.132582 +vt 0.437500 0.000674 +vt 0.624326 0.187500 +vt 0.437500 0.374326 +vt 0.125000 0.000000 +vt 0.000000 0.500000 +vt -0.000000 0.000000 +vt 0.125000 0.500000 +vt -0.000000 -0.000000 +vt 0.125000 -0.000000 +vt 0.125000 0.500000 +vt -0.000000 -0.000000 +vt 0.125000 -0.000000 +vt 0.250000 0.500000 +vt 0.250000 0.000000 +vt 0.250000 0.500000 +vt 0.250000 -0.000000 +vt 0.250000 0.500000 +vt 0.250000 -0.000000 +vt 0.250000 0.500000 +vt 0.125000 -0.000000 +vt 0.250000 -0.000000 +vt 0.125000 0.500000 +vt -0.000000 -0.000000 +vt 0.569606 0.055394 +vt 0.569606 0.319606 +vt 0.305394 0.319606 +vt 0.250674 0.187500 +vt 0.305394 0.055394 +vt 0.125000 0.500000 +vt 0.000000 0.500000 +vt 0.000000 0.500000 +vt 0.000000 0.500000 +vn -1.0000 0.0000 0.0000 +vn -0.0000 0.9239 -0.3827 +vn 0.0000 -0.3827 -0.9239 +vn 0.0000 -0.9239 0.3827 +vn -0.0000 0.9239 0.3827 +vn -0.0000 0.3827 -0.9239 +vn 0.0000 -0.9239 -0.3827 +vn 0.0000 -0.3827 0.9239 +vn -0.0000 0.3827 0.9239 +s off +f 51/97/28 49/98/28 55/99/28 +f 55/100/29 64/101/29 54/102/29 +f 61/103/30 52/104/30 53/105/30 +f 59/106/31 50/107/31 51/108/31 +f 58/109/32 55/100/32 56/110/32 +f 64/111/33 53/105/33 54/112/33 +f 62/113/34 51/108/34 52/114/34 +f 60/115/35 49/116/35 50/117/35 +f 57/118/36 56/119/36 49/116/36 +f 51/97/28 50/120/28 49/98/28 +f 49/98/28 56/121/28 55/99/28 +f 55/99/28 54/122/28 53/123/28 +f 53/123/28 52/124/28 55/99/28 +f 52/124/28 51/97/28 55/99/28 +f 55/100/29 63/125/29 64/101/29 +f 61/103/30 62/126/30 52/104/30 +f 59/106/31 60/127/31 50/107/31 +f 58/109/32 63/125/32 55/100/32 +f 64/111/33 61/103/33 53/105/33 +f 62/113/34 59/106/34 51/108/34 +f 60/115/35 57/118/35 49/116/35 +f 57/118/36 58/128/36 56/119/36 +o pY +v -0.000000 0.500000 -0.187500 +v -0.132583 0.500000 -0.132582 +v -0.187500 0.500000 0.000000 +v -0.132583 0.500000 0.132582 +v 0.000000 0.500000 0.187500 +v 0.132583 0.500000 0.132582 +v 0.187500 0.500000 0.000000 +v 0.132583 0.500000 -0.132582 +v -0.000000 0.000000 -0.187500 +v 0.132583 0.000000 -0.132582 +v -0.187500 0.000000 0.000000 +v -0.132583 0.000000 -0.132582 +v 0.000000 0.000000 0.187500 +v -0.132583 0.000000 0.132582 +v 0.187500 0.000000 0.000000 +v 0.132583 0.000000 0.132582 +vt 0.125000 1.000000 +vt 0.000000 0.500000 +vt 0.125000 0.500000 +vt 0.125000 1.000000 +vt 0.000000 0.500000 +vt 0.125000 0.500000 +vt 0.125000 1.000000 +vt 0.000000 0.500000 +vt 0.125000 0.500000 +vt 0.250000 1.000000 +vt 0.250000 0.500000 +vt 0.250000 1.000000 +vt 0.250000 0.500000 +vt 0.250000 1.000000 +vt 0.250000 0.500000 +vt 0.250000 1.000000 +vt 0.125000 0.500000 +vt 0.250000 0.500000 +vt 0.125000 1.000000 +vt 0.000000 0.500000 +vt 0.624326 0.187500 +vt 0.437500 0.374326 +vt 0.250674 0.187500 +vt -0.000000 1.000000 +vt -0.000000 1.000000 +vt -0.000000 1.000000 +vt -0.000000 1.000000 +vt 0.305394 0.055394 +vt 0.437500 0.000674 +vt 0.569606 0.055394 +vt 0.569606 0.319606 +vt 0.305394 0.319606 +vn 0.9239 0.0000 0.3827 +vn -0.3827 0.0000 0.9239 +vn -0.9239 0.0000 -0.3827 +vn 0.9239 0.0000 -0.3827 +vn 0.3827 0.0000 0.9239 +vn -0.9239 0.0000 0.3827 +vn -0.3827 0.0000 -0.9239 +vn 0.3827 0.0000 -0.9239 +vn 0.0000 1.0000 0.0000 +s off +f 71/129/37 80/130/37 79/131/37 +f 69/132/38 78/133/38 77/134/38 +f 67/135/39 76/136/39 75/137/39 +f 72/138/40 79/131/40 74/139/40 +f 70/140/41 77/134/41 80/141/41 +f 68/142/42 75/137/42 78/143/42 +f 66/144/43 73/145/43 76/146/43 +f 65/147/44 74/148/44 73/145/44 +f 69/149/45 71/150/45 65/151/45 +f 71/129/37 70/152/37 80/130/37 +f 69/132/38 68/153/38 78/133/38 +f 67/135/39 66/154/39 76/136/39 +f 72/138/40 71/129/40 79/131/40 +f 70/140/41 69/132/41 77/134/41 +f 68/142/42 67/135/42 75/137/42 +f 66/144/43 65/147/43 73/145/43 +f 65/147/44 72/155/44 74/148/44 +f 65/151/45 66/156/45 69/149/45 +f 66/156/45 67/157/45 69/149/45 +f 67/157/45 68/158/45 69/149/45 +f 69/149/45 70/159/45 71/150/45 +f 71/150/45 72/160/45 65/151/45 +o nnn +v 0.000000 -0.187500 0.000000 +v -0.132582 -0.132583 0.000000 +v -0.187500 -0.000000 0.000000 +v -0.132582 -0.000000 0.132583 +v 0.000000 -0.000000 0.187500 +v 0.000000 -0.132583 0.132583 +vt 0.250000 0.500000 +vt 0.375000 0.375000 +vt 0.375000 0.625000 +vt 0.500000 0.500000 +vt 0.625000 0.375000 +vt 0.625000 0.625000 +vn -0.3574 -0.8629 0.3574 +vn -0.3574 -0.3574 0.8629 +vn -0.5774 -0.5774 0.5774 +vn -0.8629 -0.3574 0.3574 +s off +f 81/161/46 86/162/46 82/163/46 +f 84/164/47 86/162/47 85/165/47 +f 86/162/48 84/164/48 82/163/48 +f 82/163/49 84/164/49 83/166/49 +o nnp +v 0.000000 -0.187500 0.000000 +v -0.132582 -0.132583 0.000000 +v -0.187500 -0.000000 0.000000 +v 0.000000 -0.000000 -0.187500 +v -0.132582 -0.000000 -0.132583 +v 0.000000 -0.132583 -0.132583 +vt 0.250000 0.500000 +vt 0.375000 0.375000 +vt 0.375000 0.625000 +vt 0.625000 0.625000 +vt 0.500000 0.500000 +vt 0.625000 0.375000 +vn -0.3574 -0.8629 -0.3574 +vn -0.3574 -0.3574 -0.8629 +vn -0.5774 -0.5774 -0.5774 +vn -0.8629 -0.3574 -0.3574 +s off +f 87/167/50 88/168/50 92/169/50 +f 90/170/51 92/169/51 91/171/51 +f 92/169/52 88/168/52 91/171/52 +f 88/168/53 89/172/53 91/171/53 +o pnp +v 0.187500 -0.000000 0.000000 +v 0.132583 -0.132583 0.000000 +v 0.000000 -0.187500 0.000000 +v 0.132583 -0.000000 -0.132583 +v 0.000000 -0.000000 -0.187500 +v 0.000000 -0.132583 -0.132583 +vt 0.375000 0.625000 +vt 0.250000 0.500000 +vt 0.375000 0.375000 +vt 0.500000 0.500000 +vt 0.625000 0.375000 +vt 0.625000 0.625000 +vn 0.3574 -0.8629 -0.3574 +vn 0.3574 -0.3574 -0.8629 +vn 0.5774 -0.5774 -0.5774 +vn 0.8629 -0.3574 -0.3574 +s off +f 94/173/54 95/174/54 98/175/54 +f 96/176/55 98/175/55 97/177/55 +f 98/175/56 96/176/56 94/173/56 +f 93/178/57 94/173/57 96/176/57 +o pnn +v 0.187500 -0.000000 0.000000 +v 0.132583 -0.132583 0.000000 +v 0.000000 -0.187500 0.000000 +v 0.000000 -0.000000 0.187500 +v 0.132583 -0.000000 0.132583 +v 0.000000 -0.132583 0.132583 +vt 0.375000 0.375000 +vt 0.375000 0.625000 +vt 0.250000 0.500000 +vt 0.625000 0.375000 +vt 0.500000 0.500000 +vt 0.625000 0.625000 +vn 0.3574 -0.8629 0.3574 +vn 0.8629 -0.3574 0.3574 +vn 0.5774 -0.5774 0.5774 +vn 0.3574 -0.3574 0.8629 +s off +f 100/179/58 104/180/58 101/181/58 +f 99/182/59 103/183/59 100/179/59 +f 104/180/60 100/179/60 103/183/60 +f 103/183/61 102/184/61 104/180/61 +o ppn +v 0.187500 -0.000000 0.000000 +v 0.000000 0.187500 0.000000 +v 0.132583 0.132582 0.000000 +v 0.000000 -0.000000 0.187500 +v 0.132583 -0.000000 0.132583 +v 0.000000 0.132582 0.132583 +vt 0.625000 0.375000 +vt 0.500000 0.500000 +vt 0.375000 0.375000 +vt 0.250000 0.500000 +vt 0.375000 0.625000 +vt 0.625000 0.625000 +vn 0.3574 0.3574 0.8629 +vn 0.3574 0.8629 0.3574 +vn 0.8629 0.3574 0.3574 +vn 0.5774 0.5774 0.5774 +s off +f 108/185/62 109/186/62 110/187/62 +f 106/188/63 110/187/63 107/189/63 +f 107/189/64 109/186/64 105/190/64 +f 109/186/65 107/189/65 110/187/65 +o npn +v -0.187500 -0.000000 0.000000 +v -0.132582 0.132582 0.000000 +v 0.000000 0.187500 0.000000 +v -0.132582 -0.000000 0.132583 +v 0.000000 -0.000000 0.187500 +v 0.000000 0.132582 0.132583 +vt 0.625000 0.375000 +vt 0.500000 0.500000 +vt 0.375000 0.375000 +vt 0.375000 0.625000 +vt 0.625000 0.625000 +vt 0.250000 0.500000 +vn -0.8629 0.3574 0.3574 +vn -0.5774 0.5774 0.5774 +vn -0.3574 0.3574 0.8629 +vn -0.3574 0.8629 0.3574 +s off +f 111/191/66 114/192/66 112/193/66 +f 114/192/67 116/194/67 112/193/67 +f 114/192/68 115/195/68 116/194/68 +f 112/193/69 116/194/69 113/196/69 +o npp +v -0.187500 -0.000000 0.000000 +v -0.132582 0.132582 0.000000 +v 0.000000 0.187500 0.000000 +v 0.000000 -0.000000 -0.187500 +v -0.132582 -0.000000 -0.132583 +v 0.000000 0.132582 -0.132583 +vt 0.625000 0.375000 +vt 0.500000 0.500000 +vt 0.375000 0.375000 +vt 0.625000 0.625000 +vt 0.375000 0.625000 +vt 0.250000 0.500000 +vn -0.3574 0.3574 -0.8629 +vn -0.8629 0.3574 -0.3574 +vn -0.5774 0.5774 -0.5774 +vn -0.3574 0.8629 -0.3574 +s off +f 120/197/70 121/198/70 122/199/70 +f 117/200/71 118/201/71 121/198/71 +f 121/198/72 118/201/72 122/199/72 +f 118/201/73 119/202/73 122/199/73 +o ppp +v 0.187500 -0.000000 0.000000 +v 0.000000 0.187500 0.000000 +v 0.132583 0.132582 0.000000 +v 0.132583 -0.000000 -0.132583 +v 0.000000 -0.000000 -0.187500 +v 0.000000 0.132582 -0.132583 +vt 0.500000 0.500000 +vt 0.625000 0.625000 +vt 0.375000 0.625000 +vt 0.250000 0.500000 +vt 0.375000 0.375000 +vt 0.625000 0.375000 +vn 0.3574 0.3574 -0.8629 +vn 0.3574 0.8629 -0.3574 +vn 0.5774 0.5774 -0.5774 +vn 0.8629 0.3574 -0.3574 +s off +f 126/203/74 127/204/74 128/205/74 +f 124/206/75 125/207/75 128/205/75 +f 128/205/76 125/207/76 126/203/76 +f 125/207/77 123/208/77 126/203/77 +o nY +v -0.000000 -0.500000 -0.187500 +v -0.132583 -0.500000 -0.132582 +v -0.187500 -0.500000 0.000000 +v -0.132583 -0.500000 0.132582 +v 0.000000 -0.500000 0.187500 +v 0.132583 -0.500000 0.132582 +v 0.187500 -0.500000 0.000000 +v 0.132583 -0.500000 -0.132582 +v -0.000000 0.000000 -0.187500 +v 0.132583 0.000000 -0.132582 +v -0.187500 0.000000 0.000000 +v -0.132583 0.000000 -0.132582 +v 0.000000 0.000000 0.187500 +v -0.132583 0.000000 0.132582 +v 0.187500 0.000000 0.000000 +v 0.132583 0.000000 0.132582 +vt 0.305394 0.055394 +vt 0.437500 0.000674 +vt 0.437500 0.374326 +vt 0.125000 0.500000 +vt -0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.125000 0.500000 +vt -0.000000 -0.000000 +vt 0.125000 -0.000000 +vt 0.125000 0.500000 +vt -0.000000 -0.000000 +vt 0.125000 -0.000000 +vt 0.250000 0.500000 +vt 0.250000 0.000000 +vt 0.250000 0.500000 +vt 0.250000 -0.000000 +vt 0.250000 0.500000 +vt 0.250000 -0.000000 +vt 0.250000 0.500000 +vt 0.125000 -0.000000 +vt 0.250000 -0.000000 +vt 0.125000 0.500000 +vt -0.000000 -0.000000 +vt 0.569606 0.055394 +vt 0.624326 0.187500 +vt 0.569606 0.319606 +vt 0.305394 0.319606 +vt 0.250674 0.187500 +vt 0.000000 0.500000 +vt 0.000000 0.500000 +vt 0.000000 0.500000 +vt 0.000000 0.500000 +vn 0.0000 -1.0000 0.0000 +vn 0.9239 0.0000 0.3827 +vn -0.3827 0.0000 0.9239 +vn -0.9239 0.0000 -0.3827 +vn 0.9239 0.0000 -0.3827 +vn 0.3827 0.0000 0.9239 +vn -0.9239 0.0000 0.3827 +vn -0.3827 0.0000 -0.9239 +vn 0.3827 0.0000 -0.9239 +s off +f 132/209/78 131/210/78 135/211/78 +f 143/212/79 134/213/79 135/214/79 +f 141/215/80 132/216/80 133/217/80 +f 139/218/81 130/219/81 131/220/81 +f 138/221/82 135/214/82 136/222/82 +f 144/223/83 133/217/83 134/224/83 +f 142/225/84 131/220/84 132/226/84 +f 140/227/85 129/228/85 130/229/85 +f 137/230/86 136/231/86 129/228/86 +f 131/210/78 130/232/78 135/211/78 +f 130/232/78 129/233/78 135/211/78 +f 129/233/78 136/234/78 135/211/78 +f 135/211/78 134/235/78 133/236/78 +f 133/236/78 132/209/78 135/211/78 +f 143/212/79 144/237/79 134/213/79 +f 141/215/80 142/238/80 132/216/80 +f 139/218/81 140/239/81 130/219/81 +f 138/221/82 143/212/82 135/214/82 +f 144/223/83 141/215/83 133/217/83 +f 142/225/84 139/218/84 131/220/84 +f 140/227/85 137/230/85 129/228/85 +f 137/230/86 138/240/86 136/231/86 diff --git a/src/main/resources/assets/hbm/textures/blocks/observer_back_off.png b/src/main/resources/assets/hbm/textures/blocks/observer_back_off.png new file mode 100644 index 000000000..5f770a5a4 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/observer_back_off.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/observer_back_on.png b/src/main/resources/assets/hbm/textures/blocks/observer_back_on.png new file mode 100644 index 000000000..25d538d75 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/observer_back_on.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/observer_front.png b/src/main/resources/assets/hbm/textures/blocks/observer_front.png new file mode 100644 index 000000000..a52922d72 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/observer_front.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/observer_front.png.mcmeta b/src/main/resources/assets/hbm/textures/blocks/observer_front.png.mcmeta new file mode 100644 index 000000000..754e4e96f --- /dev/null +++ b/src/main/resources/assets/hbm/textures/blocks/observer_front.png.mcmeta @@ -0,0 +1,105 @@ +{ + "animation": { + "frames": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 2, + 1 + ] + } +} diff --git a/src/main/resources/assets/hbm/textures/blocks/observer_side.png b/src/main/resources/assets/hbm/textures/blocks/observer_side.png new file mode 100644 index 000000000..6c0d38dca Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/observer_side.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/pipe_neo.png b/src/main/resources/assets/hbm/textures/blocks/pipe_neo.png new file mode 100644 index 000000000..37c9b3699 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/pipe_neo.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/pipe_neo_overlay.png b/src/main/resources/assets/hbm/textures/blocks/pipe_neo_overlay.png new file mode 100644 index 000000000..7e999b57b Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/pipe_neo_overlay.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/stalactite.fluorite.png b/src/main/resources/assets/hbm/textures/blocks/stalactite.fluorite.png new file mode 100644 index 000000000..a17615c91 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/stalactite.fluorite.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/stalactite.sulfur.png b/src/main/resources/assets/hbm/textures/blocks/stalactite.sulfur.png new file mode 100644 index 000000000..f1ffcd47d Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/stalactite.sulfur.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/stalagmite.fluorite.png b/src/main/resources/assets/hbm/textures/blocks/stalagmite.fluorite.png new file mode 100644 index 000000000..2e949cb89 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/stalagmite.fluorite.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/stalagmite.sulfur.png b/src/main/resources/assets/hbm/textures/blocks/stalagmite.sulfur.png new file mode 100644 index 000000000..6ab1b26d9 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/stalagmite.sulfur.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/stone_resource.fluorite.png b/src/main/resources/assets/hbm/textures/blocks/stone_resource.fluorite.png new file mode 100644 index 000000000..1d499399a Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/stone_resource.fluorite.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/stone_resource.sulfur.png b/src/main/resources/assets/hbm/textures/blocks/stone_resource.sulfur.png new file mode 100644 index 000000000..a0d26e86b Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/stone_resource.sulfur.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/stone_resource.sulfur_alt.png b/src/main/resources/assets/hbm/textures/blocks/stone_resource.sulfur_alt.png new file mode 100644 index 000000000..6ec700547 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/stone_resource.sulfur_alt.png differ diff --git a/src/main/resources/assets/hbm/textures/items/can_mug.png b/src/main/resources/assets/hbm/textures/items/can_mug.png new file mode 100644 index 000000000..745790a97 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/can_mug.png differ diff --git a/src/main/resources/assets/hbm/textures/items/chem_icon_DYNAMITE.png b/src/main/resources/assets/hbm/textures/items/chem_icon_DYNAMITE.png new file mode 100644 index 000000000..f044bbf39 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/chem_icon_DYNAMITE.png differ