From c64f1a74bef34dfa81f65935375ae1405d51de70 Mon Sep 17 00:00:00 2001 From: Bob Date: Tue, 13 Jul 2021 13:11:29 +0200 Subject: [PATCH] SILEX access ports, coltan pain, better designators --- .../java/api/hbm/item/IDesignatorItem.java | 30 + .../java/com/hbm/blocks/bomb/LaunchPad.java | 588 ++++++------------ .../com/hbm/blocks/machine/MachineITER.java | 1 - .../com/hbm/blocks/machine/MachineSILEX.java | 30 +- .../com/hbm/handler/FluidTypeHandler.java | 1 + .../com/hbm/inventory/MachineRecipes.java | 38 ++ .../com/hbm/inventory/OreDictManager.java | 4 + src/main/java/com/hbm/items/ModItems.java | 11 + .../items/machine/ItemChemistryTemplate.java | 11 +- .../com/hbm/items/tool/ItemDesingator.java | 73 ++- .../hbm/items/tool/ItemDesingatorManual.java | 36 +- .../hbm/items/tool/ItemDesingatorRange.java | 65 +- .../com/hbm/items/weapon/ItemGunDart.java | 16 +- src/main/java/com/hbm/lib/Library.java | 2 +- .../hbm/render/tileentity/RenderSILEX.java | 8 +- .../bomb/TileEntityCompactLauncher.java | 6 +- .../bomb/TileEntityLaunchTable.java | 6 +- .../tileentity/machine/TileEntitySILEX.java | 14 + .../machine/TileEntitySoyuzLauncher.java | 8 +- src/main/resources/assets/hbm/lang/de_DE.lang | 4 + src/main/resources/assets/hbm/lang/en_US.lang | 4 + .../assets/hbm/textures/gui/fluids2.png | Bin 16062 -> 19419 bytes .../textures/items/ammo_fireext_diesel.png | Bin 0 -> 319 bytes .../hbm/textures/items/bismuth_tool.png | Bin 0 -> 472 bytes .../items/chem_icon_COLTAN_CLEANING.png | Bin 0 -> 410 bytes .../items/chem_icon_COLTAN_CRYSTAL.png | Bin 0 -> 350 bytes .../textures/items/chem_icon_COLTAN_PAIN.png | Bin 0 -> 338 bytes .../hbm/textures/items/gem_tantalium.png | Bin 0 -> 354 bytes .../hbm/textures/items/powder_coltan.png | Bin 0 -> 309 bytes .../hbm/textures/items/powder_coltan_ore.png | Bin 0 -> 396 bytes .../hbm/textures/models/turrets/brandon.png | Bin 0 -> 914 bytes .../textures/models/turrets/brandon_drum.png | Bin 0 -> 230 bytes 32 files changed, 464 insertions(+), 492 deletions(-) create mode 100644 src/main/java/api/hbm/item/IDesignatorItem.java create mode 100644 src/main/resources/assets/hbm/textures/items/ammo_fireext_diesel.png create mode 100644 src/main/resources/assets/hbm/textures/items/bismuth_tool.png create mode 100644 src/main/resources/assets/hbm/textures/items/chem_icon_COLTAN_CLEANING.png create mode 100644 src/main/resources/assets/hbm/textures/items/chem_icon_COLTAN_CRYSTAL.png create mode 100644 src/main/resources/assets/hbm/textures/items/chem_icon_COLTAN_PAIN.png create mode 100644 src/main/resources/assets/hbm/textures/items/gem_tantalium.png create mode 100644 src/main/resources/assets/hbm/textures/items/powder_coltan.png create mode 100644 src/main/resources/assets/hbm/textures/items/powder_coltan_ore.png create mode 100644 src/main/resources/assets/hbm/textures/models/turrets/brandon.png create mode 100644 src/main/resources/assets/hbm/textures/models/turrets/brandon_drum.png diff --git a/src/main/java/api/hbm/item/IDesignatorItem.java b/src/main/java/api/hbm/item/IDesignatorItem.java new file mode 100644 index 000000000..2cde2b01d --- /dev/null +++ b/src/main/java/api/hbm/item/IDesignatorItem.java @@ -0,0 +1,30 @@ +package api.hbm.item; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; + +public interface IDesignatorItem { + + /** + * Whether the target is valid + * @param world for things like restricting dimensions or getting entities + * @param stack to check NBT and metadata + * @param x position of the launch pad + * @param y position of the launch pad + * @param z position of the launch pad + * @return + */ + public boolean isReady(World world, ItemStack stack, int x, int y, int z); + + /** + * The target position if the designator is ready + * @param world + * @param stack + * @param x + * @param y + * @param z + * @return the target + */ + public Vec3 getCoords(World world, ItemStack stack, int x, int y, int z); +} diff --git a/src/main/java/com/hbm/blocks/bomb/LaunchPad.java b/src/main/java/com/hbm/blocks/bomb/LaunchPad.java index dbfd69040..4500b0d90 100644 --- a/src/main/java/com/hbm/blocks/bomb/LaunchPad.java +++ b/src/main/java/com/hbm/blocks/bomb/LaunchPad.java @@ -36,12 +36,14 @@ import com.hbm.items.ModItems; import com.hbm.main.MainRegistry; import com.hbm.tileentity.bomb.TileEntityLaunchPad; +import api.hbm.item.IDesignatorItem; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; +import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; @@ -56,7 +58,7 @@ public class LaunchPad extends BlockContainer implements IBomb { public TileEntityLaunchPad tetn = new TileEntityLaunchPad(); public static boolean keepInventory = false; - private final static Random field_149933_a = new Random(); + private final static Random field_149933_a = new Random(); public LaunchPad(Material p_i45386_1_) { super(p_i45386_1_); @@ -66,75 +68,63 @@ public class LaunchPad extends BlockContainer implements IBomb { public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { return new TileEntityLaunchPad(); } - + @Override - public Item getItemDropped(int p_149650_1_, Random p_149650_2_, int p_149650_3_) - { - return Item.getItemFromBlock(ModBlocks.launch_pad); - } - + public Item getItemDropped(int p_149650_1_, Random p_149650_2_, int p_149650_3_) { + return Item.getItemFromBlock(ModBlocks.launch_pad); + } + @Override - public void breakBlock(World p_149749_1_, int p_149749_2_, int p_149749_3_, int p_149749_4_, Block p_149749_5_, int p_149749_6_) - { - if (!keepInventory) - { - TileEntityLaunchPad tileentityfurnace = (TileEntityLaunchPad)p_149749_1_.getTileEntity(p_149749_2_, p_149749_3_, p_149749_4_); + public void breakBlock(World p_149749_1_, int p_149749_2_, int p_149749_3_, int p_149749_4_, Block p_149749_5_, int p_149749_6_) { + if(!keepInventory) { + TileEntityLaunchPad tileentityfurnace = (TileEntityLaunchPad) p_149749_1_.getTileEntity(p_149749_2_, p_149749_3_, p_149749_4_); - 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 = LaunchPad.field_149933_a.nextFloat() * 0.8F + 0.1F; - float f1 = LaunchPad.field_149933_a.nextFloat() * 0.8F + 0.1F; - float f2 = LaunchPad.field_149933_a.nextFloat() * 0.8F + 0.1F; + if(itemstack != null) { + float f = LaunchPad.field_149933_a.nextFloat() * 0.8F + 0.1F; + float f1 = LaunchPad.field_149933_a.nextFloat() * 0.8F + 0.1F; + float f2 = LaunchPad.field_149933_a.nextFloat() * 0.8F + 0.1F; - while (itemstack.stackSize > 0) - { - int j1 = LaunchPad.field_149933_a.nextInt(21) + 10; + while(itemstack.stackSize > 0) { + int j1 = LaunchPad.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(p_149749_1_, p_149749_2_ + f, p_149749_3_ + f1, p_149749_4_ + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage())); + itemstack.stackSize -= j1; + EntityItem entityitem = new EntityItem(p_149749_1_, p_149749_2_ + f, p_149749_3_ + f1, p_149749_4_ + 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)LaunchPad.field_149933_a.nextGaussian() * f3; - entityitem.motionY = (float)LaunchPad.field_149933_a.nextGaussian() * f3 + 0.2F; - entityitem.motionZ = (float)LaunchPad.field_149933_a.nextGaussian() * f3; - p_149749_1_.spawnEntityInWorld(entityitem); - } - } - } + float f3 = 0.05F; + entityitem.motionX = (float) LaunchPad.field_149933_a.nextGaussian() * f3; + entityitem.motionY = (float) LaunchPad.field_149933_a.nextGaussian() * f3 + 0.2F; + entityitem.motionZ = (float) LaunchPad.field_149933_a.nextGaussian() * f3; + p_149749_1_.spawnEntityInWorld(entityitem); + } + } + } - p_149749_1_.func_147453_f(p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_); - } - } + p_149749_1_.func_147453_f(p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_); + } + } + + super.breakBlock(p_149749_1_, p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_, p_149749_6_); + } - super.breakBlock(p_149749_1_, p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_, p_149749_6_); - } - @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { - if(world.isRemote) - { + if(world.isRemote) { return true; - } else if(!player.isSneaking()) - { + } else if(!player.isSneaking()) { TileEntityLaunchPad entity = (TileEntityLaunchPad) world.getTileEntity(x, y, z); - if(entity != null) - { + if(entity != null) { FMLNetworkHandler.openGui(player, MainRegistry.instance, ModBlocks.guiID_launch_pad, world, x, y, z); } return true; @@ -142,362 +132,192 @@ public class LaunchPad extends BlockContainer implements IBomb { return false; } } - - @Override - public void onNeighborBlockChange(World p_149695_1_, int x, int y, int z, Block p_149695_5_) - { - if (p_149695_1_.isBlockIndirectlyGettingPowered(x, y, z) && !p_149695_1_.isRemote) - { - this.explode(p_149695_1_, x, y, z); - } - } - + @Override - public int getRenderType(){ + public void onNeighborBlockChange(World p_149695_1_, int x, int y, int z, Block p_149695_5_) { + if(p_149695_1_.isBlockIndirectlyGettingPowered(x, y, z) && !p_149695_1_.isRemote) { + this.explode(p_149695_1_, x, y, z); + } + } + + @Override + public int getRenderType() { return -1; } - + @Override public boolean isOpaqueCube() { return false; } - + @Override public boolean renderAsNormalBlock() { return false; } - + @Override public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack itemStack) { int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; - - if(i == 0) - { + + if(i == 0) { world.setBlockMetadataWithNotify(x, y, z, 5, 2); } - if(i == 1) - { + if(i == 1) { world.setBlockMetadataWithNotify(x, y, z, 3, 2); } - if(i == 2) - { + if(i == 2) { world.setBlockMetadataWithNotify(x, y, z, 4, 2); } - if(i == 3) - { + if(i == 3) { world.setBlockMetadataWithNotify(x, y, z, 2, 2); } } - - /*@Override - public void setBlockBoundsBasedOnState(IBlockAccess p_149719_1_, int p_149719_2_, int p_149719_3_, int p_149719_4_) - { - float f = 0.0625F; - this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F); - } - + + /* + * @Override public void setBlockBoundsBasedOnState(IBlockAccess + * p_149719_1_, int p_149719_2_, int p_149719_3_, int p_149719_4_) { float f + * = 0.0625F; this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F); } + * + * @Override public AxisAlignedBB getCollisionBoundingBoxFromPool(World + * world, int x, int y, int z) { float f = 0.0625F; + * this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 8*f, 1.0F); return + * AxisAlignedBB.getBoundingBox(x + this.minX, y + this.minY, z + this.minZ, + * x + this.maxX, y + this.maxY, z + this.maxZ); } + */ + @Override - public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { - float f = 0.0625F; - this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 8*f, 1.0F); - return AxisAlignedBB.getBoundingBox(x + this.minX, y + this.minY, z + this.minZ, x + this.maxX, y + this.maxY, z + this.maxZ); - }*/ - - @Override @SideOnly(Side.CLIENT) - public Item getItem(World p_149694_1_, int p_149694_2_, int p_149694_3_, int p_149694_4_) - { - return Item.getItemFromBlock(ModBlocks.launch_pad); - } - - @Override - public void explode(World p_149695_1_, int x, int y, int z) - { - TileEntityLaunchPad entity = (TileEntityLaunchPad) p_149695_1_.getTileEntity(x, y, z); - // - { - if(entity.slots[1] != null && (entity.slots[1].getItem() == ModItems.designator || entity.slots[1].getItem() == ModItems.designator_range || entity.slots[1].getItem() == ModItems.designator_manual) && entity.slots[1].stackTagCompound != null) - { - int xCoord = entity.slots[1].stackTagCompound.getInteger("xCoord"); - int zCoord = entity.slots[1].stackTagCompound.getInteger("zCoord"); - - if(xCoord == entity.xCoord && zCoord == entity.zCoord) - { - xCoord += 1; - } + public Item getItem(World p_149694_1_, int p_149694_2_, int p_149694_3_, int p_149694_4_) { + return Item.getItemFromBlock(ModBlocks.launch_pad); + } - if(GeneralConfig.enableExtendedLogging) - MainRegistry.logger.log(Level.INFO, "[MISSILE] Tried to launch missile at " + x + " / " + y + " / " + z + " to " + xCoord + " / " + zCoord + "!"); - - if(entity.slots[0] != null && entity.slots[0].getItem() == ModItems.missile_generic && entity.power >= 75000) - { - //EntityMissileGeneric missile = new EntityMissileGeneric(p_149695_1_, xCoord, zCoord, x + 0.5F, y + 2F, z + 0.5F); - EntityMissileGeneric missile = new EntityMissileGeneric(p_149695_1_, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); - if (!p_149695_1_.isRemote) - p_149695_1_.spawnEntityInWorld(missile); - entity.power -= 75000; - - entity.slots[0] = null; - p_149695_1_.playSoundEffect(x, y, z, "hbm:weapon.missileTakeOff", 2.0F, 1.0F); - } - if(entity.slots[0] != null && entity.slots[0].getItem() == ModItems.missile_incendiary && entity.power >= 75000) - { - EntityMissileIncendiary missile = new EntityMissileIncendiary(p_149695_1_, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); - if (!p_149695_1_.isRemote) - p_149695_1_.spawnEntityInWorld(missile); - entity.power -= 75000; - - entity.slots[0] = null; - p_149695_1_.playSoundEffect(x, y, z, "hbm:weapon.missileTakeOff", 2.0F, 1.0F); - } - if(entity.slots[0] != null && entity.slots[0].getItem() == ModItems.missile_cluster && entity.power >= 75000) - { - EntityMissileCluster missile = new EntityMissileCluster(p_149695_1_, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); - if (!p_149695_1_.isRemote) - p_149695_1_.spawnEntityInWorld(missile); - entity.power -= 75000; - - entity.slots[0] = null; - p_149695_1_.playSoundEffect(x, y, z, "hbm:weapon.missileTakeOff", 2.0F, 1.0F); - } - if(entity.slots[0] != null && entity.slots[0].getItem() == ModItems.missile_buster && entity.power >= 75000) - { - EntityMissileBunkerBuster missile = new EntityMissileBunkerBuster(p_149695_1_, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); - if (!p_149695_1_.isRemote) - p_149695_1_.spawnEntityInWorld(missile); - entity.power -= 75000; - - entity.slots[0] = null; - p_149695_1_.playSoundEffect(x, y, z, "hbm:weapon.missileTakeOff", 2.0F, 1.0F); - } - if(entity.slots[0] != null && entity.slots[0].getItem() == ModItems.missile_strong && entity.power >= 75000) - { - EntityMissileStrong missile = new EntityMissileStrong(p_149695_1_, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); - if (!p_149695_1_.isRemote) - p_149695_1_.spawnEntityInWorld(missile); - entity.power -= 75000; - - entity.slots[0] = null; - p_149695_1_.playSoundEffect(x, y, z, "hbm:weapon.missileTakeOff", 2.0F, 1.0F); - } - if(entity.slots[0] != null && entity.slots[0].getItem() == ModItems.missile_incendiary_strong && entity.power >= 75000) - { - EntityMissileIncendiaryStrong missile = new EntityMissileIncendiaryStrong(p_149695_1_, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); - if (!p_149695_1_.isRemote) - p_149695_1_.spawnEntityInWorld(missile); - entity.power -= 75000; - - entity.slots[0] = null; - p_149695_1_.playSoundEffect(x, y, z, "hbm:weapon.missileTakeOff", 2.0F, 1.0F); - } - if(entity.slots[0] != null && entity.slots[0].getItem() == ModItems.missile_cluster_strong && entity.power >= 75000) - { - EntityMissileClusterStrong missile = new EntityMissileClusterStrong(p_149695_1_, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); - if (!p_149695_1_.isRemote) - p_149695_1_.spawnEntityInWorld(missile); - entity.power -= 75000; - - entity.slots[0] = null; - p_149695_1_.playSoundEffect(x, y, z, "hbm:weapon.missileTakeOff", 2.0F, 1.0F); - } - if(entity.slots[0] != null && entity.slots[0].getItem() == ModItems.missile_buster_strong && entity.power >= 75000) - { - EntityMissileBusterStrong missile = new EntityMissileBusterStrong(p_149695_1_, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); - if (!p_149695_1_.isRemote) - p_149695_1_.spawnEntityInWorld(missile); - entity.power -= 75000; - - entity.slots[0] = null; - p_149695_1_.playSoundEffect(x, y, z, "hbm:weapon.missileTakeOff", 2.0F, 1.0F); - } - if(entity.slots[0] != null && entity.slots[0].getItem() == ModItems.missile_burst && entity.power >= 75000) - { - EntityMissileBurst missile = new EntityMissileBurst(p_149695_1_, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); - if (!p_149695_1_.isRemote) - p_149695_1_.spawnEntityInWorld(missile); - entity.power -= 75000; - - entity.slots[0] = null; - p_149695_1_.playSoundEffect(x, y, z, "hbm:weapon.missileTakeOff", 2.0F, 1.0F); - } - if(entity.slots[0] != null && entity.slots[0].getItem() == ModItems.missile_inferno && entity.power >= 75000) - { - EntityMissileInferno missile = new EntityMissileInferno(p_149695_1_, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); - if (!p_149695_1_.isRemote) - p_149695_1_.spawnEntityInWorld(missile); - entity.power -= 75000; - - entity.slots[0] = null; - p_149695_1_.playSoundEffect(x, y, z, "hbm:weapon.missileTakeOff", 2.0F, 1.0F); - } - if(entity.slots[0] != null && entity.slots[0].getItem() == ModItems.missile_rain && entity.power >= 75000) - { - EntityMissileRain missile = new EntityMissileRain(p_149695_1_, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); - if (!p_149695_1_.isRemote) - p_149695_1_.spawnEntityInWorld(missile); - entity.power -= 75000; - - entity.slots[0] = null; - p_149695_1_.playSoundEffect(x, y, z, "hbm:weapon.missileTakeOff", 2.0F, 1.0F); - } - if(entity.slots[0] != null && entity.slots[0].getItem() == ModItems.missile_drill && entity.power >= 75000) - { - EntityMissileDrill missile = new EntityMissileDrill(p_149695_1_, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); - if (!p_149695_1_.isRemote) - p_149695_1_.spawnEntityInWorld(missile); - entity.power -= 75000; - - entity.slots[0] = null; - p_149695_1_.playSoundEffect(x, y, z, "hbm:weapon.missileTakeOff", 2.0F, 1.0F); - } - if(entity.slots[0] != null && entity.slots[0].getItem() == ModItems.missile_nuclear && entity.power >= 75000) - { - EntityMissileNuclear missile = new EntityMissileNuclear(p_149695_1_, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); - if (!p_149695_1_.isRemote) - p_149695_1_.spawnEntityInWorld(missile); - entity.power -= 75000; - - entity.slots[0] = null; - p_149695_1_.playSoundEffect(x, y, z, "hbm:weapon.missileTakeOff", 2.0F, 1.0F); - } - if(entity.slots[0] != null && entity.slots[0].getItem() == ModItems.missile_endo && entity.power >= 75000) - { - EntityMissileEndo missile = new EntityMissileEndo(p_149695_1_, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); - if (!p_149695_1_.isRemote) - p_149695_1_.spawnEntityInWorld(missile); - entity.power -= 75000; - - entity.slots[0] = null; - p_149695_1_.playSoundEffect(x, y, z, "hbm:weapon.missileTakeOff", 2.0F, 1.0F); - } - if(entity.slots[0] != null && entity.slots[0].getItem() == ModItems.missile_exo && entity.power >= 75000) - { - EntityMissileExo missile = new EntityMissileExo(p_149695_1_, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); - if (!p_149695_1_.isRemote) - p_149695_1_.spawnEntityInWorld(missile); - entity.power -= 75000; - - entity.slots[0] = null; - p_149695_1_.playSoundEffect(x, y, z, "hbm:weapon.missileTakeOff", 2.0F, 1.0F); - } - if(entity.slots[0] != null && entity.slots[0].getItem() == ModItems.missile_nuclear_cluster && entity.power >= 75000) - { - EntityMissileMirv missile = new EntityMissileMirv(p_149695_1_, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); - if (!p_149695_1_.isRemote) - p_149695_1_.spawnEntityInWorld(missile); - entity.power -= 75000; - - entity.slots[0] = null; - p_149695_1_.playSoundEffect(x, y, z, "hbm:weapon.missileTakeOff", 2.0F, 1.0F); - } - if(entity.slots[0] != null && entity.slots[0].getItem() == ModItems.missile_doomsday && entity.power >= 75000) - { - EntityMissileDoomsday missile = new EntityMissileDoomsday(p_149695_1_, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); - if (!p_149695_1_.isRemote) - p_149695_1_.spawnEntityInWorld(missile); - entity.power -= 75000; - - entity.slots[0] = null; - p_149695_1_.playSoundEffect(x, y, z, "hbm:weapon.missileTakeOff", 2.0F, 1.0F); - } - if(entity.slots[0] != null && entity.slots[0].getItem() == ModItems.missile_taint && entity.power >= 75000) - { - EntityMissileTaint missile = new EntityMissileTaint(p_149695_1_, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); - if (!p_149695_1_.isRemote) - p_149695_1_.spawnEntityInWorld(missile); - entity.power -= 75000; - - entity.slots[0] = null; - p_149695_1_.playSoundEffect(x, y, z, "hbm:weapon.missileTakeOff", 2.0F, 1.0F); - } - if(entity.slots[0] != null && entity.slots[0].getItem() == ModItems.missile_micro && entity.power >= 75000) - { - EntityMissileMicro missile = new EntityMissileMicro(p_149695_1_, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); - if (!p_149695_1_.isRemote) - p_149695_1_.spawnEntityInWorld(missile); - entity.power -= 75000; - - entity.slots[0] = null; - p_149695_1_.playSoundEffect(x, y, z, "hbm:weapon.missileTakeOff", 2.0F, 1.0F); - } - if(entity.slots[0] != null && entity.slots[0].getItem() == ModItems.missile_bhole && entity.power >= 75000) - { - EntityMissileBHole missile = new EntityMissileBHole(p_149695_1_, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); - if (!p_149695_1_.isRemote) - p_149695_1_.spawnEntityInWorld(missile); - entity.power -= 75000; - - entity.slots[0] = null; - p_149695_1_.playSoundEffect(x, y, z, "hbm:weapon.missileTakeOff", 2.0F, 1.0F); - } - if(entity.slots[0] != null && entity.slots[0].getItem() == ModItems.missile_schrabidium && entity.power >= 75000) - { - EntityMissileSchrabidium missile = new EntityMissileSchrabidium(p_149695_1_, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); - if (!p_149695_1_.isRemote) - p_149695_1_.spawnEntityInWorld(missile); - entity.power -= 75000; - - entity.slots[0] = null; - p_149695_1_.playSoundEffect(x, y, z, "hbm:weapon.missileTakeOff", 2.0F, 1.0F); - } - if(entity.slots[0] != null && entity.slots[0].getItem() == ModItems.missile_emp && entity.power >= 75000) - { - EntityMissileEMP missile = new EntityMissileEMP(p_149695_1_, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); - if (!p_149695_1_.isRemote) - p_149695_1_.spawnEntityInWorld(missile); - entity.power -= 75000; - - entity.slots[0] = null; - p_149695_1_.playSoundEffect(x, y, z, "hbm:weapon.missileTakeOff", 2.0F, 1.0F); - } - if(entity.slots[0] != null && entity.slots[0].getItem() == ModItems.missile_emp_strong && entity.power >= 75000) - { - EntityMissileEMPStrong missile = new EntityMissileEMPStrong(p_149695_1_, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); - if (!p_149695_1_.isRemote) - p_149695_1_.spawnEntityInWorld(missile); - entity.power -= 75000; - - entity.slots[0] = null; - p_149695_1_.playSoundEffect(x, y, z, "hbm:weapon.missileTakeOff", 2.0F, 1.0F); - } - } + @Override + public void explode(World world, int x, int y, int z) { - if(entity.slots[0] != null && entity.slots[0].getItem() == ModItems.missile_carrier && entity.power >= 75000) - { - EntityCarrier missile = new EntityCarrier(p_149695_1_); - missile.posX = x + 0.5F; - missile.posY = y + 1F; - missile.posZ = z + 0.5F; - - if(entity.slots[1] != null) - missile.setPayload(entity.slots[1]); - - entity.slots[1] = null; - - if (!p_149695_1_.isRemote) - p_149695_1_.spawnEntityInWorld(missile); - entity.power -= 75000; - - entity.slots[0] = null; - p_149695_1_.playSoundEffect(x, y, z, "hbm:entity.rocketTakeoff", 100.0F, 1.0F); - } + TileEntityLaunchPad entity = (TileEntityLaunchPad) world.getTileEntity(x, y, z); + + if(entity.slots[0] == null || world.isRemote) + return; + + if(entity.slots[1] != null && entity.slots[1].getItem() instanceof IDesignatorItem && entity.power >= 75000) { + + int xCoord = entity.slots[1].stackTagCompound.getInteger("xCoord"); + int zCoord = entity.slots[1].stackTagCompound.getInteger("zCoord"); - if(entity.slots[0] != null && entity.slots[0].getItem() == ModItems.missile_anti_ballistic && entity.power >= 75000) - { - EntityMissileAntiBallistic missile = new EntityMissileAntiBallistic(p_149695_1_); - missile.posX = x + 0.5F; - missile.posY = y + 0.5F; - missile.posZ = z + 0.5F; - - if (!p_149695_1_.isRemote) - p_149695_1_.spawnEntityInWorld(missile); - - entity.power -= 75000; - - entity.slots[0] = null; - p_149695_1_.playSoundEffect(x, y, z, "hbm:weapon.missileTakeOff", 2.0F, 1.0F); - } - } - } + if(xCoord == entity.xCoord && zCoord == entity.zCoord) { + xCoord += 1; + } + + Entity missile = null; + + if(entity.slots[0].getItem() == ModItems.missile_generic) { + missile = new EntityMissileGeneric(world, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); + } + if(entity.slots[0].getItem() == ModItems.missile_incendiary) { + missile = new EntityMissileIncendiary(world, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); + } + if(entity.slots[0].getItem() == ModItems.missile_cluster) { + missile = new EntityMissileCluster(world, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); + } + if(entity.slots[0].getItem() == ModItems.missile_buster) { + missile = new EntityMissileBunkerBuster(world, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); + } + if(entity.slots[0].getItem() == ModItems.missile_strong) { + missile = new EntityMissileStrong(world, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); + } + if(entity.slots[0].getItem() == ModItems.missile_incendiary_strong) { + missile = new EntityMissileIncendiaryStrong(world, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); + } + if(entity.slots[0].getItem() == ModItems.missile_cluster_strong) { + missile = new EntityMissileClusterStrong(world, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); + } + if(entity.slots[0].getItem() == ModItems.missile_buster_strong) { + missile = new EntityMissileBusterStrong(world, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); + } + if(entity.slots[0].getItem() == ModItems.missile_burst) { + missile = new EntityMissileBurst(world, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); + } + if(entity.slots[0].getItem() == ModItems.missile_inferno) { + missile = new EntityMissileInferno(world, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); + } + if(entity.slots[0].getItem() == ModItems.missile_rain) { + missile = new EntityMissileRain(world, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); + } + if(entity.slots[0].getItem() == ModItems.missile_drill) { + missile = new EntityMissileDrill(world, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); + } + if(entity.slots[0].getItem() == ModItems.missile_nuclear) { + missile = new EntityMissileNuclear(world, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); + } + if(entity.slots[0].getItem() == ModItems.missile_endo) { + missile = new EntityMissileEndo(world, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); + } + if(entity.slots[0].getItem() == ModItems.missile_exo) { + missile = new EntityMissileExo(world, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); + } + if(entity.slots[0].getItem() == ModItems.missile_nuclear_cluster) { + missile = new EntityMissileMirv(world, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); + } + if(entity.slots[0].getItem() == ModItems.missile_doomsday) { + missile = new EntityMissileDoomsday(world, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); + } + if(entity.slots[0].getItem() == ModItems.missile_taint) { + missile = new EntityMissileTaint(world, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); + } + if(entity.slots[0].getItem() == ModItems.missile_micro) { + missile = new EntityMissileMicro(world, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); + } + if(entity.slots[0].getItem() == ModItems.missile_bhole) { + missile = new EntityMissileBHole(world, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); + } + if(entity.slots[0].getItem() == ModItems.missile_schrabidium) { + missile = new EntityMissileSchrabidium(world, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); + } + if(entity.slots[0].getItem() == ModItems.missile_emp) { + missile = new EntityMissileEMP(world, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); + } + if(entity.slots[0].getItem() == ModItems.missile_emp_strong) { + missile = new EntityMissileEMPStrong(world, x + 0.5F, y + 2F, z + 0.5F, xCoord, zCoord); + } + + world.spawnEntityInWorld(missile); + world.playSoundEffect(x, y, z, "hbm:weapon.missileTakeOff", 2.0F, 1.0F); + entity.power -= 75000; + entity.slots[0] = null; + + if(GeneralConfig.enableExtendedLogging) + MainRegistry.logger.log(Level.INFO, "[MISSILE] Tried to launch missile at " + x + " / " + y + " / " + z + " to " + xCoord + " / " + zCoord + "!"); + } + + if(entity.slots[0].getItem() == ModItems.missile_carrier && entity.power >= 75000) { + EntityCarrier missile = new EntityCarrier(world); + missile.posX = x + 0.5F; + missile.posY = y + 1F; + missile.posZ = z + 0.5F; + + if(entity.slots[1] != null) + missile.setPayload(entity.slots[1]); + + world.spawnEntityInWorld(missile); + entity.power -= 75000; + + entity.slots[0] = null; + entity.slots[1] = null; + world.playSoundEffect(x, y, z, "hbm:entity.rocketTakeoff", 100.0F, 1.0F); + } + + if(entity.slots[0].getItem() == ModItems.missile_anti_ballistic && entity.power >= 75000) { + EntityMissileAntiBallistic missile = new EntityMissileAntiBallistic(world); + missile.posX = x + 0.5F; + missile.posY = y + 0.5F; + missile.posZ = z + 0.5F; + + world.spawnEntityInWorld(missile); + entity.power -= 75000; + + entity.slots[0] = null; + world.playSoundEffect(x, y, z, "hbm:weapon.missileTakeOff", 2.0F, 1.0F); + } + } } diff --git a/src/main/java/com/hbm/blocks/machine/MachineITER.java b/src/main/java/com/hbm/blocks/machine/MachineITER.java index 22b67a51a..ea3cc0393 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineITER.java +++ b/src/main/java/com/hbm/blocks/machine/MachineITER.java @@ -15,7 +15,6 @@ import net.minecraft.block.material.Material; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; diff --git a/src/main/java/com/hbm/blocks/machine/MachineSILEX.java b/src/main/java/com/hbm/blocks/machine/MachineSILEX.java index abcf8391f..6031babcd 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineSILEX.java +++ b/src/main/java/com/hbm/blocks/machine/MachineSILEX.java @@ -3,6 +3,7 @@ package com.hbm.blocks.machine; import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ModBlocks; import com.hbm.main.MainRegistry; +import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntitySILEX; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; @@ -10,6 +11,7 @@ import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; public class MachineSILEX extends BlockDummyable { @@ -22,6 +24,8 @@ public class MachineSILEX extends BlockDummyable { if(meta >= 12) return new TileEntitySILEX(); + if(meta >= 6) + return new TileEntityProxyCombo(true, false, true); return null; } @@ -37,20 +41,34 @@ public class MachineSILEX extends BlockDummyable { @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { - if(world.isRemote) - { + + if(world.isRemote) { return true; - } else if(!player.isSneaking()) - { - int[] pos = this.findCore(world, x, y, z); + } else if(!player.isSneaking()) { + int[] pos = this.findCore(world, x, y, z); + if(pos == null) return false; - + FMLNetworkHandler.openGui(player, MainRegistry.instance, ModBlocks.guiID_silex, world, pos[0], pos[1], pos[2]); return true; } else { return false; } } + + protected void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { + super.fillSpace(world, x, y, z, dir, o); + + if(dir == ForgeDirection.NORTH || dir == ForgeDirection.SOUTH) { + this.makeExtra(world, x + dir.offsetX * o + 1, y + 1, z + dir.offsetZ * o); + this.makeExtra(world, x + dir.offsetX * o - 1, y + 1, z + dir.offsetZ * o); + } + + if(dir == ForgeDirection.EAST || dir == ForgeDirection.WEST) { + this.makeExtra(world, x + dir.offsetX * o, y + 1, z + dir.offsetZ * o + 1); + this.makeExtra(world, x + dir.offsetX * o, y + 1, z + dir.offsetZ * o - 1); + } + } } diff --git a/src/main/java/com/hbm/handler/FluidTypeHandler.java b/src/main/java/com/hbm/handler/FluidTypeHandler.java index d61e78701..00c552b15 100644 --- a/src/main/java/com/hbm/handler/FluidTypeHandler.java +++ b/src/main/java/com/hbm/handler/FluidTypeHandler.java @@ -76,6 +76,7 @@ public class FluidTypeHandler { BALEFIRE (0x28e02e, 6, 1, 2, 4, 4, 3, EnumSymbol.RADIATION, "hbmfluid.balefire", 1500, FluidTrait.CORROSIVE), MERCURY (0x808080, 7, 1, 2, 2, 0, 0, EnumSymbol.NONE, "hbmfluid.mercury"), + PAIN (0x938541, 15, 1, 2, 2, 0, 1, EnumSymbol.ACID, "hbmfluid.pain", 300, FluidTrait.CORROSIVE), PLASMA_DT (0xF7AFDE, 8, 1, 2, 0, 4, 0, EnumSymbol.RADIATION, "hbmfluid.plasma_dt", 3250, FluidTrait.NO_CONTAINER), PLASMA_HD (0xF0ADF4, 9, 1, 2, 0, 4, 0, EnumSymbol.RADIATION, "hbmfluid.plasma_hd", 2500, FluidTrait.NO_CONTAINER), diff --git a/src/main/java/com/hbm/inventory/MachineRecipes.java b/src/main/java/com/hbm/inventory/MachineRecipes.java index d3a3494e2..08fde22bb 100644 --- a/src/main/java/com/hbm/inventory/MachineRecipes.java +++ b/src/main/java/com/hbm/inventory/MachineRecipes.java @@ -1478,6 +1478,7 @@ public class MachineRecipes { fuels.add(new ItemStack(ModItems.blades_steel)); fuels.add(new ItemStack(ModItems.blades_titanium)); fuels.add(new ItemStack(ModItems.blades_schrabidium)); + fuels.add(new ItemStack(ModItems.blades_desh)); return fuels; } @@ -1754,6 +1755,14 @@ public class MachineRecipes { case SCHRABIDATE: list.add(new ItemStack(ModItems.powder_iron, 1)); break; + case COLTAN_CLEANING: + list.add(new ItemStack(ModItems.powder_coltan_ore, 2)); + list.add(new ItemStack(ModItems.powder_coal, 1)); + break; + case COLTAN_PAIN: + list.add(new ItemStack(ModItems.powder_coltan, 1)); + list.add(new ItemStack(ModItems.fluorite, 1)); + break; default: break; } @@ -1973,6 +1982,18 @@ public class MachineRecipes { case SCHRABIDATE: input[0] = new FluidStack(250, FluidType.SCHRABIDIC); break; + case COLTAN_CLEANING: + input[0] = new FluidStack(250, FluidType.ACID); + input[1] = new FluidStack(500, FluidType.HYDROGEN); + break; + case COLTAN_PAIN: + input[0] = new FluidStack(1000, FluidType.GAS); + input[1] = new FluidStack(500, FluidType.OXYGEN); + break; + case COLTAN_CRYSTAL: + input[0] = new FluidStack(1000, FluidType.PAIN); + input[1] = new FluidStack(500, FluidType.ACID); + break; default: break; } @@ -2114,6 +2135,14 @@ public class MachineRecipes { case SCHRABIDATE: output[0] = new ItemStack(ModItems.powder_schrabidate, 1); break; + case COLTAN_CLEANING: + output[0] = new ItemStack(ModItems.powder_coltan, 1); + output[1] = new ItemStack(ModItems.dust, 2); + break; + case COLTAN_CRYSTAL: + output[0] = new ItemStack(ModItems.gem_tantalium, 1); + output[1] = new ItemStack(ModItems.dust, 3); + break; default: break; } @@ -2243,6 +2272,15 @@ public class MachineRecipes { case SCHRABIDIC: output[0] = new FluidStack(16000, FluidType.SCHRABIDIC); break; + case COLTAN_CLEANING: + output[0] = new FluidStack(500, FluidType.WATER); + break; + case COLTAN_PAIN: + output[0] = new FluidStack(1000, FluidType.PAIN); + break; + case COLTAN_CRYSTAL: + output[0] = new FluidStack(250, FluidType.WATER); + break; default: break; } diff --git a/src/main/java/com/hbm/inventory/OreDictManager.java b/src/main/java/com/hbm/inventory/OreDictManager.java index aa0314210..c3c9303fc 100644 --- a/src/main/java/com/hbm/inventory/OreDictManager.java +++ b/src/main/java/com/hbm/inventory/OreDictManager.java @@ -67,6 +67,7 @@ public class OreDictManager { OreDictionary.registerOre("ingotBoron", ModItems.ingot_boron); OreDictionary.registerOre("ingotTcAlloy", ModItems.ingot_tcalloy); OreDictionary.registerOre("ingotGold198", ModItems.ingot_au198); + OreDictionary.registerOre("ingotColtan", ModItems.fragment_coltan); OreDictionary.registerOre("nuggetLead", ModItems.nugget_lead); OreDictionary.registerOre("nuggetBeryllium", ModItems.nugget_beryllium); @@ -158,6 +159,7 @@ public class OreDictManager { OreDictionary.registerOre("dustBoron", ModItems.powder_boron); OreDictionary.registerOre("dustTcAlloy", ModItems.powder_tcalloy); OreDictionary.registerOre("dustGol198", ModItems.powder_au198); + OreDictionary.registerOre("dustColtan", ModItems.powder_coltan_ore); OreDictionary.registerOre("dustNeptunium", ModItems.powder_neptunium); OreDictionary.registerOre("dustIodine", ModItems.powder_iodine); @@ -207,6 +209,7 @@ public class OreDictManager { OreDictionary.registerOre("oreAustralium", ModBlocks.ore_australium); OreDictionary.registerOre("oreRareEarth", ModBlocks.ore_rare); OreDictionary.registerOre("oreZirconium", ModBlocks.ore_depth_zirconium); + OreDictionary.registerOre("oreColtan", ModBlocks.ore_coltan); OreDictionary.registerOre("oreIron", ModBlocks.ore_gneiss_iron); OreDictionary.registerOre("oreGold", ModBlocks.ore_gneiss_gold); @@ -266,6 +269,7 @@ public class OreDictManager { OreDictionary.registerOre("blockCobalt", ModBlocks.block_cobalt); OreDictionary.registerOre("blockZirconium", ModBlocks.block_zirconium); OreDictionary.registerOre("blockBoron", ModBlocks.block_boron); + OreDictionary.registerOre("blockColtan", ModBlocks.block_coltan); OreDictionary.registerOre("blockThorium", ModBlocks.block_thorium); OreDictionary.registerOre("blockThorium232", ModBlocks.block_thorium); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 9843340f2..d5672d834 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -315,6 +315,8 @@ public class ModItems { public static Item crystal_lithium; public static Item crystal_starmetal; public static Item crystal_trixite; + + public static Item gem_tantalium; public static Item powder_lead; public static Item powder_neptunium; @@ -396,6 +398,9 @@ public class ModItems { public static Item powder_actinium_tiny; public static Item powder_boron_tiny; public static Item powder_meteorite_tiny; + + public static Item powder_coltan_ore; + public static Item powder_coltan; public static Item powder_lanthanium; public static Item powder_actinium; @@ -2647,6 +2652,7 @@ public class ModItems { crystal_lithium = new ItemHazard().addHydroReactivity().toItem().setUnlocalizedName("crystal_lithium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_lithium"); crystal_starmetal = new Item().setUnlocalizedName("crystal_starmetal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_starmetal"); crystal_trixite = new ItemHazard().addRadiation(ItemHazard.trx * ItemHazard.crystal).toItem().setUnlocalizedName("crystal_trixite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":crystal_trixite"); + gem_tantalium = new Item().setUnlocalizedName("gem_tantalium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":gem_tantalium"); powder_lead = new Item().setUnlocalizedName("powder_lead").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_lead"); powder_neptunium = new ItemHazard(ItemHazard.np237 * ItemHazard.powder, true).setUnlocalizedName("powder_neptunium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_neptunium"); @@ -2734,6 +2740,8 @@ public class ModItems { powder_magic = new Item().setUnlocalizedName("powder_magic").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_magic"); powder_cloud = new Item().setUnlocalizedName("powder_cloud").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_cloud"); powder_balefire = new ItemHazard(500F, true).setUnlocalizedName("powder_balefire").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_balefire"); + powder_coltan_ore = new ItemHazard().addAsbestos().toItem().setUnlocalizedName("powder_coltan_ore").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_coltan_ore"); + powder_coltan = new Item().setUnlocalizedName("powder_coltan").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_coltan"); fragment_neodymium = new Item().setUnlocalizedName("fragment_neodymium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fragment_neodymium"); fragment_cobalt = new Item().setUnlocalizedName("fragment_cobalt").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fragment_cobalt"); @@ -5363,6 +5371,8 @@ public class ModItems { GameRegistry.registerItem(powder_steel_tiny, powder_steel_tiny.getUnlocalizedName()); GameRegistry.registerItem(powder_tcalloy, powder_tcalloy.getUnlocalizedName()); GameRegistry.registerItem(powder_lead, powder_lead.getUnlocalizedName()); + GameRegistry.registerItem(powder_coltan_ore, powder_coltan_ore.getUnlocalizedName()); + GameRegistry.registerItem(powder_coltan, powder_coltan.getUnlocalizedName()); GameRegistry.registerItem(powder_yellowcake, powder_yellowcake.getUnlocalizedName()); GameRegistry.registerItem(powder_beryllium, powder_beryllium.getUnlocalizedName()); GameRegistry.registerItem(powder_dura_steel, powder_dura_steel.getUnlocalizedName()); @@ -5456,6 +5466,7 @@ public class ModItems { GameRegistry.registerItem(crystal_lithium, crystal_lithium.getUnlocalizedName()); GameRegistry.registerItem(crystal_starmetal, crystal_starmetal.getUnlocalizedName()); GameRegistry.registerItem(crystal_trixite, crystal_trixite.getUnlocalizedName()); + GameRegistry.registerItem(gem_tantalium, gem_tantalium.getUnlocalizedName()); //Fragments GameRegistry.registerItem(fragment_neodymium, fragment_neodymium.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/machine/ItemChemistryTemplate.java b/src/main/java/com/hbm/items/machine/ItemChemistryTemplate.java index 7be9511ee..126fc7bea 100644 --- a/src/main/java/com/hbm/items/machine/ItemChemistryTemplate.java +++ b/src/main/java/com/hbm/items/machine/ItemChemistryTemplate.java @@ -91,7 +91,10 @@ public class ItemChemistryTemplate extends Item { SATURN, BALEFIRE, SCHRABIDIC, - SCHRABIDATE; + SCHRABIDATE, + COLTAN_CLEANING, + COLTAN_PAIN, + COLTAN_CRYSTAL; public static EnumChemistryTemplate getEnum(int i) { if(i < EnumChemistryTemplate.values().length) @@ -271,6 +274,12 @@ public class ItemChemistryTemplate extends Item { return 100; case SCHRABIDATE: return 600; + case COLTAN_CLEANING: + return 60; + case COLTAN_PAIN: + return 120; + case COLTAN_CRYSTAL: + return 80; default: return 100; } diff --git a/src/main/java/com/hbm/items/tool/ItemDesingator.java b/src/main/java/com/hbm/items/tool/ItemDesingator.java index 293d0fd9d..cac8490f9 100644 --- a/src/main/java/com/hbm/items/tool/ItemDesingator.java +++ b/src/main/java/com/hbm/items/tool/ItemDesingator.java @@ -4,59 +4,58 @@ import java.util.List; import com.hbm.blocks.bomb.LaunchPad; +import api.hbm.item.IDesignatorItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ChatComponentText; +import net.minecraft.util.Vec3; import net.minecraft.world.World; -public class ItemDesingator extends Item { +public class ItemDesingator extends Item implements IDesignatorItem { - @Override - public void onCreated(ItemStack p_77622_1_, World p_77622_2_, EntityPlayer p_77622_3_) { - p_77622_1_.stackTagCompound = new NBTTagCompound(); - p_77622_1_.stackTagCompound.setInteger("xCoord", 0); - p_77622_1_.stackTagCompound.setInteger("zCoord", 0); - } - @Override - public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) - { - if(itemstack.stackTagCompound != null) - { + public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { + if(itemstack.stackTagCompound != null) { list.add("Target Coordinates:"); - list.add("X: " + String.valueOf(itemstack.stackTagCompound.getInteger("xCoord"))); - list.add("Z: " + String.valueOf(itemstack.stackTagCompound.getInteger("zCoord"))); + list.add("X: " + itemstack.stackTagCompound.getInteger("xCoord")); + list.add("Z: " + itemstack.stackTagCompound.getInteger("zCoord")); } else { list.add("Please select a target."); } } - + @Override - public boolean onItemUse(ItemStack p_77648_1_, EntityPlayer p_77648_2_, World p_77648_3_, int p_77648_4_, int p_77648_5_, int p_77648_6_, int p_77648_7_, float p_77648_8_, float p_77648_9_, float p_77648_10_) - { - if(!(p_77648_3_.getBlock(p_77648_4_, p_77648_5_, p_77648_6_) instanceof LaunchPad)) - { - if(p_77648_1_.stackTagCompound != null) - { - p_77648_1_.stackTagCompound.setInteger("xCoord", p_77648_4_); - p_77648_1_.stackTagCompound.setInteger("zCoord", p_77648_6_); - } else { - p_77648_1_.stackTagCompound = new NBTTagCompound(); - p_77648_1_.stackTagCompound.setInteger("xCoord", p_77648_4_); - p_77648_1_.stackTagCompound.setInteger("zCoord", p_77648_6_); - } - if(p_77648_3_.isRemote) - { - p_77648_2_.addChatMessage(new ChatComponentText("Position set!")); + public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ) { + + if(!(world.getBlock(x, y, z) instanceof LaunchPad)) { + + if(stack.stackTagCompound == null) + stack.stackTagCompound = new NBTTagCompound(); + + stack.stackTagCompound.setInteger("xCoord", x); + stack.stackTagCompound.setInteger("zCoord", z); + + if(world.isRemote) { + player.addChatMessage(new ChatComponentText("Position set!")); } - p_77648_3_.playSoundAtEntity(p_77648_2_, "hbm:item.techBleep", 1.0F, 1.0F); - - return true; + world.playSoundAtEntity(player, "hbm:item.techBleep", 1.0F, 1.0F); + + return true; } - - return false; - } + + return false; + } + + @Override + public boolean isReady(World world, ItemStack stack, int x, int y, int z) { + return stack.hasTagCompound(); + } + + @Override + public Vec3 getCoords(World world, ItemStack stack, int x, int y, int z) { + return Vec3.createVectorHelper(stack.stackTagCompound.getInteger("xCoord"), 0, stack.stackTagCompound.getInteger("zCoord")); + } } diff --git a/src/main/java/com/hbm/items/tool/ItemDesingatorManual.java b/src/main/java/com/hbm/items/tool/ItemDesingatorManual.java index 14d1427e7..11820cdd9 100644 --- a/src/main/java/com/hbm/items/tool/ItemDesingatorManual.java +++ b/src/main/java/com/hbm/items/tool/ItemDesingatorManual.java @@ -5,40 +5,42 @@ import java.util.List; import com.hbm.items.ModItems; import com.hbm.main.MainRegistry; +import api.hbm.item.IDesignatorItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.Vec3; import net.minecraft.world.World; -public class ItemDesingatorManual extends Item { +public class ItemDesingatorManual extends Item implements IDesignatorItem { @Override public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { - + if(world.isRemote) player.openGui(MainRegistry.instance, ModItems.guiID_item_designator, world, 0, 0, 0); - + return stack; } - @Override - public void onCreated(ItemStack p_77622_1_, World p_77622_2_, EntityPlayer p_77622_3_) { - p_77622_1_.stackTagCompound = new NBTTagCompound(); - p_77622_1_.stackTagCompound.setInteger("xCoord", 0); - p_77622_1_.stackTagCompound.setInteger("zCoord", 0); - } - @Override - public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) - { - if(stack.stackTagCompound != null) - { + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + if(stack.stackTagCompound != null) { list.add("Target Coordinates:"); - list.add("X: " + String.valueOf(stack.stackTagCompound.getInteger("xCoord"))); - list.add("Z: " + String.valueOf(stack.stackTagCompound.getInteger("zCoord"))); + list.add("X: " + stack.stackTagCompound.getInteger("xCoord")); + list.add("Z: " + stack.stackTagCompound.getInteger("zCoord")); } else { list.add("Please select a target."); } } + + @Override + public boolean isReady(World world, ItemStack stack, int x, int y, int z) { + return stack.hasTagCompound(); + } + + @Override + public Vec3 getCoords(World world, ItemStack stack, int x, int y, int z) { + return Vec3.createVectorHelper(stack.stackTagCompound.getInteger("xCoord"), 0, stack.stackTagCompound.getInteger("zCoord")); + } } diff --git a/src/main/java/com/hbm/items/tool/ItemDesingatorRange.java b/src/main/java/com/hbm/items/tool/ItemDesingatorRange.java index 6c826624c..ac58cdd54 100644 --- a/src/main/java/com/hbm/items/tool/ItemDesingatorRange.java +++ b/src/main/java/com/hbm/items/tool/ItemDesingatorRange.java @@ -5,62 +5,63 @@ import java.util.List; import com.hbm.blocks.bomb.LaunchPad; import com.hbm.lib.Library; +import api.hbm.item.IDesignatorItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.ChatComponentText; import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.Vec3; import net.minecraft.world.World; -public class ItemDesingatorRange extends Item { +public class ItemDesingatorRange extends Item implements IDesignatorItem { - @Override - public void onCreated(ItemStack p_77622_1_, World p_77622_2_, EntityPlayer p_77622_3_) { - p_77622_1_.stackTagCompound = new NBTTagCompound(); - p_77622_1_.stackTagCompound.setInteger("xCoord", 0); - p_77622_1_.stackTagCompound.setInteger("zCoord", 0); - } - @Override - public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) - { - if(itemstack.stackTagCompound != null) - { + public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { + if(itemstack.stackTagCompound != null) { list.add("Target Coordinates:"); - list.add("X: " + String.valueOf(itemstack.stackTagCompound.getInteger("xCoord"))); - list.add("Z: " + String.valueOf(itemstack.stackTagCompound.getInteger("zCoord"))); + list.add("X: " + itemstack.stackTagCompound.getInteger("xCoord")); + list.add("Z: " + itemstack.stackTagCompound.getInteger("zCoord")); } else { list.add("Please select a target."); } } - + @Override - public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) - { + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { MovingObjectPosition pos = Library.rayTrace(player, 300, 1); int x = pos.blockX; int y = pos.blockY; int z = pos.blockZ; - - if(!(world.getBlock(x, y, z) instanceof LaunchPad)) - { + + if(!(world.getBlock(x, y, z) instanceof LaunchPad)) { + if(stack.stackTagCompound == null) stack.stackTagCompound = new NBTTagCompound(); - + stack.stackTagCompound.setInteger("xCoord", x); stack.stackTagCompound.setInteger("zCoord", z); - - if(world.isRemote) - { - player.addChatMessage(new ChatComponentText("Position set to X:" + x + ", Z:" + z)); + + if(world.isRemote) { + player.addChatMessage(new ChatComponentText("Position set to X:" + x + ", Z:" + z)); } - - world.playSoundAtEntity(player, "hbm:item.techBleep", 1.0F, 1.0F); - - return stack; + + world.playSoundAtEntity(player, "hbm:item.techBleep", 1.0F, 1.0F); + + return stack; } - - return stack; - } + + return stack; + } + + @Override + public boolean isReady(World world, ItemStack stack, int x, int y, int z) { + return stack.hasTagCompound(); + } + + @Override + public Vec3 getCoords(World world, ItemStack stack, int x, int y, int z) { + return Vec3.createVectorHelper(stack.stackTagCompound.getInteger("xCoord"), 0, stack.stackTagCompound.getInteger("zCoord")); + } } diff --git a/src/main/java/com/hbm/items/weapon/ItemGunDart.java b/src/main/java/com/hbm/items/weapon/ItemGunDart.java index b034d7a50..695c0432c 100644 --- a/src/main/java/com/hbm/items/weapon/ItemGunDart.java +++ b/src/main/java/com/hbm/items/weapon/ItemGunDart.java @@ -2,6 +2,7 @@ package com.hbm.items.weapon; import com.hbm.handler.GunConfiguration; +import api.hbm.item.IDesignatorItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -9,9 +10,10 @@ import net.minecraft.server.MinecraftServer; import net.minecraft.util.ChatComponentText; import net.minecraft.util.ChatStyle; import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.Vec3; import net.minecraft.world.World; -public class ItemGunDart extends ItemGunBase { +public class ItemGunDart extends ItemGunBase implements IDesignatorItem { public ItemGunDart(GunConfiguration config) { super(config); @@ -57,4 +59,16 @@ public class ItemGunDart extends ItemGunBase { } } } + + @Override + public boolean isReady(World world, ItemStack stack, int x, int y, int z) { + EntityPlayer target = readPlayer(stack); + return target != null && target.dimension == world.provider.dimensionId; + } + + @Override + public Vec3 getCoords(World world, ItemStack stack, int x, int y, int z) { + EntityPlayer target = readPlayer(stack); + return Vec3.createVectorHelper(target.posX, target.posY, target.posZ); + } } diff --git a/src/main/java/com/hbm/lib/Library.java b/src/main/java/com/hbm/lib/Library.java index 87e38b8a5..203e0da27 100644 --- a/src/main/java/com/hbm/lib/Library.java +++ b/src/main/java/com/hbm/lib/Library.java @@ -908,7 +908,7 @@ public class Library { { if(consume.getMaxFluidFill(type) - consume.getFluidFill(type) >= part) { - that.setFluidFill(that.getFluidFill(type)-part, type); + that.setFluidFill(that.getFluidFill(type) - part, type); consume.setFluidFill(consume.getFluidFill(type) + part, type); } else { that.setFluidFill(that.getFluidFill(type) - (consume.getMaxFluidFill(type) - consume.getFluidFill(type)), type); diff --git a/src/main/java/com/hbm/render/tileentity/RenderSILEX.java b/src/main/java/com/hbm/render/tileentity/RenderSILEX.java index 5fde53169..bf5dddd31 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderSILEX.java +++ b/src/main/java/com/hbm/render/tileentity/RenderSILEX.java @@ -19,10 +19,10 @@ public class RenderSILEX extends TileEntitySpecialRenderer { GL11.glEnable(GL11.GL_CULL_FACE); switch(tileEntity.getBlockMetadata() - BlockDummyable.offset) { - case 4: GL11.glRotatef(90, 0F, 1F, 0F); break; - case 3: GL11.glRotatef(180, 0F, 1F, 0F); break; - case 5: GL11.glRotatef(270, 0F, 1F, 0F); break; - case 2: GL11.glRotatef(0, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(0, 0F, 1F, 0F); break; + case 2: GL11.glRotatef(90, 0F, 1F, 0F); break; } GL11.glShadeModel(GL11.GL_SMOOTH); diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java index 2f7766391..d58ef65d7 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityCompactLauncher.java @@ -22,6 +22,7 @@ import com.hbm.packet.AuxGaugePacket; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.TEMissileMultipartPacket; +import api.hbm.item.IDesignatorItem; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -319,9 +320,8 @@ public class TileEntityCompactLauncher extends TileEntity implements ISidedInven public boolean hasDesignator() { - if(slots[1] != null) { - - return (slots[1].getItem() == ModItems.designator || slots[1].getItem() == ModItems.designator_range || slots[1].getItem() == ModItems.designator_manual) && slots[1].hasTagCompound(); + if(slots[1] != null && slots[1].getItem() instanceof IDesignatorItem && ((IDesignatorItem)slots[1].getItem()).isReady(worldObj, slots[1], xCoord, yCoord, zCoord)) { + return true; } return false; diff --git a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java index 19b6a3616..acd8e5760 100644 --- a/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java +++ b/src/main/java/com/hbm/tileentity/bomb/TileEntityLaunchTable.java @@ -22,6 +22,7 @@ import com.hbm.packet.AuxGaugePacket; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.TEMissileMultipartPacket; +import api.hbm.item.IDesignatorItem; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -300,9 +301,8 @@ public class TileEntityLaunchTable extends TileEntity implements ISidedInventory public boolean hasDesignator() { - if(slots[1] != null) { - - return (slots[1].getItem() == ModItems.designator || slots[1].getItem() == ModItems.designator_range || slots[1].getItem() == ModItems.designator_manual) && slots[1].hasTagCompound(); + if(slots[1] != null && slots[1].getItem() instanceof IDesignatorItem && ((IDesignatorItem)slots[1].getItem()).isReady(worldObj, slots[1], xCoord, yCoord, zCoord)) { + return true; } return false; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntitySILEX.java b/src/main/java/com/hbm/tileentity/machine/TileEntitySILEX.java index c309d705b..124b47397 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntitySILEX.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntitySILEX.java @@ -216,6 +216,20 @@ public class TileEntitySILEX extends TileEntityMachineBase implements IFluidAcce } } } + + @Override + public int[] getAccessibleSlotsFromSide(int p_94128_1_) { + return new int[] { 0 }; + } + + @Override + public boolean isItemValidForSlot(int i, ItemStack itemStack) { + + if(i == 0) + return SILEXRecipes.getOutput(itemStack) != null; + + return false; + } @Override public void readFromNBT(NBTTagCompound nbt) { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java b/src/main/java/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java index 268c7737c..d8daf9d12 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntitySoyuzLauncher.java @@ -16,6 +16,7 @@ import com.hbm.main.MainRegistry; import com.hbm.sound.AudioWrapper; import com.hbm.tileentity.TileEntityMachineBase; +import api.hbm.item.IDesignatorItem; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.inventory.ISidedInventory; @@ -268,10 +269,13 @@ public class TileEntitySoyuzLauncher extends TileEntityMachineBase implements IS //2: designator present public int designator() { - if(mode == 0) + if(mode == 0) { return 0; - if(slots[1] != null && (slots[1].getItem() == ModItems.designator || slots[1].getItem() == ModItems.designator_range || slots[1].getItem() == ModItems.designator_manual) && slots[1].hasTagCompound()) + } + if(slots[1] != null && slots[1].getItem() instanceof IDesignatorItem && ((IDesignatorItem)slots[1].getItem()).isReady(worldObj, slots[1], xCoord, yCoord, zCoord)) { return 2; + } + return 1; } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index d14d183a5..99473eb2c 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -404,6 +404,7 @@ hbmfluid.nitan=NITAN© 100 Oktan Supertreibstoff hbmfluid.none=Nichts hbmfluid.oil=Rohöl hbmfluid.oxygen=Flüssiger Sauerstoff +hbmfluid.pain=Pandemonium(III)tantalit-Lösung hbmfluid.petroil=Gemisch hbmfluid.petroleum=Petroleumgas hbmfluid.plasma_bf=Balefire-Plasma @@ -1179,6 +1180,7 @@ item.gas_mask_m65.name=M65-Z Gasmaske item.gas_mask_mono.name=Kohlenstoffmonoxidmaske item.gas_petroleum.name=Petroleumgastank item.geiger_counter.name=Mobiler Geigerzähler +item.gem_tantalium.name=Tantal-Polykristall item.generator_front.name=Generatorfront item.generator_steel.name=Generator item.glitch.name=Glitch @@ -1920,6 +1922,8 @@ item.powder_coal.name=Kohlestaub item.powder_coal_tiny.name=Kleiner Haufen Kohlestaub item.powder_cobalt.name=Kobaltstaub item.powder_cobalt_tiny.name=Kleiner Haufen Cobaltstaub +item.powder_coltan.name=Gereinigtes Tantalit +item.powder_coltan_ore.name=Gebrochenes Coltan item.powder_combine_steel.name=CMB-Stahlstaub item.powder_copper.name=Kupferstaub item.powder_cs137.name=Caesium-137-Staub diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index e67d3068c..b2ff69b51 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -472,6 +472,7 @@ hbmfluid.nitan=NITAN© 100 Octane Super Fuel hbmfluid.none=None hbmfluid.oil=Crude Oil hbmfluid.oxygen=Liquid Oxygen +hbmfluid.pain=Pandemonium(III)tantalite Solution hbmfluid.petroil=Petroil hbmfluid.petroleum=Petroleum Gas hbmfluid.plasma_bf=Balefire Plasma @@ -1247,6 +1248,7 @@ item.gas_mask_m65.name=M65-Z Gas Mask item.gas_mask_mono.name=Carbon Monoxide Mask item.gas_petroleum.name=Petroleum Gas Tank item.geiger_counter.name=Handheld Geiger Counter +item.gem_tantalium.name=Tantalium Polycrystal item.generator_front.name=Generator Front item.generator_steel.name=Generator Body item.glitch.name=Glitch @@ -1988,6 +1990,8 @@ item.powder_coal.name=Coal Powder item.powder_coal_tiny.name=Tiny Pile of Coal Powder item.powder_cobalt.name=Cobalt Powder item.powder_cobalt_tiny.name=Tiny Pile of Cobalt Powder +item.powder_coltan.name=Purified Tantalite +item.powder_coltan_ore.name=Crushed Coltan item.powder_combine_steel.name=CMB Steel Powder item.powder_copper.name=Copper Powder item.powder_cs137.name=Caesium-137 Powder diff --git a/src/main/resources/assets/hbm/textures/gui/fluids2.png b/src/main/resources/assets/hbm/textures/gui/fluids2.png index 09d07681d5bb9d62f9a999d41c4e284a5824d2eb..e49e7126588344c2f66d33d2fbdb8988e4f3b664 100755 GIT binary patch literal 19419 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 D`$ss0 diff --git a/src/main/resources/assets/hbm/textures/items/ammo_fireext_diesel.png b/src/main/resources/assets/hbm/textures/items/ammo_fireext_diesel.png new file mode 100644 index 0000000000000000000000000000000000000000..0e6809825645af4abf59859ab4074663daf4ff13 GIT binary patch literal 319 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf%rp4^I@I`~9S5&xiGoU*;|NepuSp!$$Dpc8yCbJM0{kpQJ<= zX)U^*=wa=CK4o;L;?9+8JPZp==G2w!)s1WLeDLYo>iY~OA^SIpeX#n??BKql^4OJC8-rr^ zR50$(zrtjCl1=FA?+MFXx>+~Hy^njCF7)G@W2Ua_yx^$UUmbmGzWiXC>k=sC*>3+B P7y=BQu6{1-oD!M6P)4e-6u|NS)0ubOOSH#|iPcJd2p@uCCranC3CRnKv_U3`@q57rj3R zCJ--jlG9)SR+hp0UbO8ju4##}zyPa@u=su5a91>d^eiJ87ubua`H#Jep%;A!44#iG zIOh4{BfRjU4ZzHcoEK4NEdc+lU`M>po?O%BoX5_xb_MDCjLmy3+}aIJv#h>?J@LBU zbmZ}z2G9VQm&R|Lgkb)vU?g7EIzD_$2`7mG80>b{Oo1sRC&BD?yPAZWXB>&wN7nHv zD=@%Ty9L)b7~mFH78r@wmUWzEDW{>pFTLpG$2Jc(pVr>hY8ijbQeKttffxNb*{0v` z-==gp99E9KQpU$6Jn*6$&fZPz^?LOcT;`F>JXWwAdUfs#pVN%vBp5(DoeqEQ4mEwS zBVN~^HTj;tWt@bCom!c&CthbQN2c!x$?K)syz-g8=8@?v65cF_0e%5N=dVlGj8)+P O0000Zq}7==Ho+@Lq$1gIIRZf2`0CiV^;D-sFITQg^7K%AnI z7f{!*MI9Qkz=%(fGq_7ZBox%Bd7FRvz4!e#TvO@Rx0iZu{#)7yq+8!U+}&PG@n-`2 zqx1P<*bcCIeFm`W&CcnJ-DThR=LwegPou^(O_5Rppp-%gaYC^e9=<+5SU$e9dV8TL z3XCzdZA+3QNGWk$_jiKzX6Nh=NA`zfj~N63ZQEju0qDcRFdR{gB!sYeo_AZ=x~{Dd z!U`d59LIJTF!>9{7>c5xX&Ry^BFi$AQdCvdmyF(^Q(2Y{V8bx%XWcrU=k+0z0Yj74 w8l@D*7_`>I0sx#z_W<*Z>_oE!bH=Ob8;?De^`RW?e*gdg07*qoM6N<$f|DDRK>z>% literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/chem_icon_COLTAN_PAIN.png b/src/main/resources/assets/hbm/textures/items/chem_icon_COLTAN_PAIN.png new file mode 100644 index 0000000000000000000000000000000000000000..9b1dbd746b97b592dab367ba0cde11961cf8bfab GIT binary patch literal 338 zcmV-Y0j>UtP)6opShnT^;FNYv^VG3JuW>e(?^)gGG%UIPGLUmh_;VFYy72=Asxle?Z#`zVUy=xqD1wGm?T kSZ@uOCwzPV?Dd_kU%66o_SBrhfdBvi07*qoM6N<$g1L;1zyJUM literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/gem_tantalium.png b/src/main/resources/assets/hbm/textures/items/gem_tantalium.png new file mode 100644 index 0000000000000000000000000000000000000000..938986d55fce853809a8cf2056e277f46922d273 GIT binary patch literal 354 zcmV-o0iFJdP)Zq}7)Bo{QpQ{X*kIxa&Yp>DAO^$*(i1Qsu0fU@AVqi3iBihJbzM`IB~cW;H#i=TG)+U2B%DqsR|2>) ztu<9uy;%4Fx7*DFEI=5B)OF2lWQ^f{zi%3R%!eQd&inly&+{0DfoYn^^PIMAiQ|~d z<-+6fAj>kwaXj~Z|LF{#EtZ+}(=#l)sBZRP9U-$pz3kg=b7qdkgA^-pY07*qoM6N<$f;&@= AjsO4v literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/powder_coltan.png b/src/main/resources/assets/hbm/textures/items/powder_coltan.png new file mode 100644 index 0000000000000000000000000000000000000000..a1494bfdd9eeef131dac081827c5638d11e65a18 GIT binary patch literal 309 zcmV-50m}Y~P)n-9k~bBRe?qy(KOAbWL3~n8{S?@=;IUE z-f?=aHYE$e2&+5++dJ5LyuW6f60rue^-#H-Bxk-sWfJT>KEJLo#!Q@?!*x|a{7S^JannuR*V42EC3ct2@7$qrk^ft+CSDTn_K8e2-mb z4#UtiPtUPbYrM^6>5#&UgI>q1w8n980i_hGa)QxQ45#5?Hk*NSzTvU+<|y#dXKg$V zuR#dGoO*B?9w?<-2?{IxL|(t#f)D~qDWsG*Br8OLzY%DL6NaJbcDr~U-Js9f*dq?^ z7BwVE0x2czk15hXulNJfK%ErbZ&fgkW3*1rFtrKPLS<&xbz$wyw+5OKq-ajVgX_Ae z$_d8FZiWv4`$ixZ39MQZLI`lqt-=);W2SC@0sxK<>Uh;vXsrPNLWry{y@r)e-}XtO qz&Gz-m4fL{l)uJ?7-QwdoW23I9hSn%z;-tP0000 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/turrets/brandon.png b/src/main/resources/assets/hbm/textures/models/turrets/brandon.png new file mode 100644 index 0000000000000000000000000000000000000000..d01dbc0440345a58fdaafe364b43c86c66bc22b8 GIT binary patch literal 914 zcmV;D18w|?P)c#16o!8WzJY=wBKpRVA+vwDf1 zp)ugS@M7(S&%h2cBZ;CUOX8C#n;&4nGwN*yLqsVRC>FPzq`J_*^dtq%*+Budk5(c z$C~f!jyJz=8Q(mw(mpniFDUC-tyTblG)+rw5k*e3gsy}LW@a(<1q_9V1U6FPa4vTo z&cN^3dGy9t&yM$%F6*;w_5x!g6*g4Yt2jjNLa+!&#CwR?l92>~nVG*uc!rq|&tKro zW9^friTxKq!84Y!aYon5rFt`Knces)cDrI_j<4bRIbBeHCs<80g?J<~i&#p9B@G=* z*`ippmQX%K7&qc``5qU8t)a+Ls`byfw);^;E;4$WHpDKzDX8Mh<#lo4T;N+G)E7^d zTPV4OG9OGfZaKyVO9anJWKENReZ>VBE#h889wIKl?7?#vd8oL+2oJeAimbia#aN?c z5mSkrB#BCrWYS;WXldFUBiRL`F7}*ah&B<2Oh$-EtyU|fX^P@|-S_81)ayRFF#1Ge ztVoU~E_P}rS+3-YrTil;?l7F=vIQbR)R$^lRxB! z?(DhLZ#a2m+-DJ0tEgJfN#w_vznHJ{oD$a&EP|Oll5}p`mts^Fxp6H*V^(wZ4DHvS z1VG2Bu)5xpsJS*|xiHXwqS2HC17RjtsYt}e|Mj)C+u#>?VEUGC2aS51Tpzh(5j>a~ z?<_(*Q@P~+oR&)NzAZ<#;hn%A6=9-T30X(52xh#C;I`d3!6F6{EF#be{+Zl^6C#+I oATTpQU}l2A%mjg%2?8_oALZYKC=OmtKmY&$07*qoM6N<$f^iPBf&c&j literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/turrets/brandon_drum.png b/src/main/resources/assets/hbm/textures/models/turrets/brandon_drum.png new file mode 100644 index 0000000000000000000000000000000000000000..df132ec20218733a200090ebc658e13e880bd167 GIT binary patch literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^IzX(z!3HEV-DXt*DVAa<&kznEsNqQI0P^R0x;TbJ zw7#7Y$km`A;Bx$hLfPeyYGs@Ag5n+RPi@jpG35VqJMy8Se3DY7(gDvVh8Jh<-(*rb z{pZo1=cd#TbwK&kh~e!iDH zXW1?$kj#@0V)yAOTzRN>St6`G8YndVvBBBX8_e^6O=;ly{ke*NJ4EtdZoB^Ehh~|# TuFbUvI+VfF)z4*}Q$iB}2@zb# literal 0 HcmV?d00001