From f077b6f39f760f7d534453c30f811a0892d4dfff Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 12 Sep 2021 21:39:04 +0200 Subject: [PATCH] mostly finished new gas mask funnies, improved mask filters --- src/main/java/api/hbm/item/IGasMask.java | 5 +- src/main/java/com/hbm/blocks/ModBlocks.java | 7 +- .../com/hbm/blocks/gas/BlockGasClorine.java | 26 +- .../com/hbm/blocks/gas/BlockGasExplosive.java | 2 +- .../com/hbm/blocks/gas/BlockGasMonoxide.java | 14 +- .../hbm/blocks/gas/BlockGasRadonDense.java | 17 +- .../com/hbm/blocks/generic/BlockAshes.java | 4 +- .../com/hbm/blocks/generic/BlockGeneric.java | 4 +- .../com/hbm/blocks/generic/BlockPorous.java | 2 +- .../hbm/blocks/machine/MachineTowerLarge.java | 33 + src/main/java/com/hbm/config/WorldConfig.java | 6 +- .../java/com/hbm/crafting/ArmorRecipes.java | 110 +- .../com/hbm/crafting/ConsumableRecipes.java | 11 +- .../com/hbm/explosion/ExplosionChaos.java | 373 +---- .../com/hbm/handler/EntityEffectHandler.java | 13 + .../handler/guncfg/BulletConfigFactory.java | 15 +- src/main/java/com/hbm/items/ModItems.java | 37 +- .../com/hbm/items/armor/ArmorGasMask.java | 11 +- .../com/hbm/items/armor/ArmorHazmatMask.java | 5 +- .../hbm/items/armor/ArmorLiquidatorMask.java | 51 + .../java/com/hbm/items/armor/ArmorModel.java | 44 +- .../com/hbm/items/armor/ItemModGasmask.java | 69 +- .../java/com/hbm/items/armor/ModArmor.java | 6 + .../java/com/hbm/items/food/ItemPill.java | 1 + .../java/com/hbm/items/special/ItemRag.java | 45 + .../java/com/hbm/items/tool/ItemFilter.java | 45 +- src/main/java/com/hbm/lib/HbmWorldGen.java | 5 +- src/main/java/com/hbm/lib/RefStrings.java | 2 +- src/main/java/com/hbm/main/ClientProxy.java | 1 + .../java/com/hbm/main/CraftingManager.java | 31 +- .../java/com/hbm/main/ModEventHandler.java | 15 +- .../com/hbm/main/ModEventHandlerClient.java | 14 +- .../java/com/hbm/main/ResourceManager.java | 6 + .../com/hbm/modules/ItemHazardModule.java | 18 +- .../weapon/ItemRenderRevolverInverted.java | 95 +- .../java/com/hbm/render/model/ModelM65.java | 3 +- .../render/tileentity/RenderLargeTower.java | 28 + .../java/com/hbm/tileentity/TileMappings.java | 1 + .../machine/TileEntityTowerLarge.java | 34 + src/main/java/com/hbm/util/ArmorRegistry.java | 62 +- src/main/java/com/hbm/util/ArmorUtil.java | 262 ++-- .../java/com/hbm/util/ContaminationUtil.java | 15 +- src/main/resources/assets/hbm/lang/de_DE.lang | 25 +- src/main/resources/assets/hbm/lang/en_US.lang | 25 +- .../hbm/models/machines/tower_large.obj | 1343 +++++++++++++++++ src/main/resources/assets/hbm/sounds.json | 2 +- .../hbm/sounds/{entity => player}/vomit.ogg | Bin .../assets/hbm/textures/armor/mask_olde.png | Bin 0 -> 708 bytes .../assets/hbm/textures/armor/rag_damp.png | Bin 0 -> 214 bytes .../assets/hbm/textures/armor/rag_piss.png | Bin 0 -> 308 bytes .../assets/hbm/textures/blocks/gas_coal.png | Bin 0 -> 133 bytes .../hbm/textures/blocks/gas_explosive.png | Bin 0 -> 175 bytes .../textures/items/gas_mask_filter_combo.png | Bin 0 -> 274 bytes .../hbm/textures/items/gas_mask_olde.png | Bin 0 -> 385 bytes .../assets/hbm/textures/items/mask_piss.png | Bin 0 -> 299 bytes .../assets/hbm/textures/items/mask_rag.png | Bin 0 -> 294 bytes .../hbm/textures/items/robes_helmet.png | Bin 294 -> 187 bytes .../assets/hbm/textures/items/robes_plate.png | Bin 259 -> 195 bytes .../textures/models/machines/tower_large.png | Bin 0 -> 26666 bytes .../textures/models/machines/tower_small.png | Bin 0 -> 1556 bytes src/main/resources/mcmod.info | 2 +- 61 files changed, 2263 insertions(+), 682 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/machine/MachineTowerLarge.java create mode 100644 src/main/java/com/hbm/items/armor/ArmorLiquidatorMask.java create mode 100644 src/main/java/com/hbm/items/special/ItemRag.java create mode 100644 src/main/java/com/hbm/render/tileentity/RenderLargeTower.java create mode 100644 src/main/java/com/hbm/tileentity/machine/TileEntityTowerLarge.java create mode 100644 src/main/resources/assets/hbm/models/machines/tower_large.obj rename src/main/resources/assets/hbm/sounds/{entity => player}/vomit.ogg (100%) create mode 100644 src/main/resources/assets/hbm/textures/armor/mask_olde.png create mode 100644 src/main/resources/assets/hbm/textures/armor/rag_damp.png create mode 100644 src/main/resources/assets/hbm/textures/armor/rag_piss.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/gas_coal.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/gas_explosive.png create mode 100644 src/main/resources/assets/hbm/textures/items/gas_mask_filter_combo.png create mode 100644 src/main/resources/assets/hbm/textures/items/gas_mask_olde.png create mode 100644 src/main/resources/assets/hbm/textures/items/mask_piss.png create mode 100644 src/main/resources/assets/hbm/textures/items/mask_rag.png create mode 100644 src/main/resources/assets/hbm/textures/models/machines/tower_large.png create mode 100644 src/main/resources/assets/hbm/textures/models/machines/tower_small.png diff --git a/src/main/java/api/hbm/item/IGasMask.java b/src/main/java/api/hbm/item/IGasMask.java index 0366f0a17..841368277 100644 --- a/src/main/java/api/hbm/item/IGasMask.java +++ b/src/main/java/api/hbm/item/IGasMask.java @@ -1,11 +1,10 @@ package api.hbm.item; -import java.util.List; +import java.util.ArrayList; import com.hbm.util.ArmorRegistry.HazardClass; import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; public interface IGasMask { @@ -16,7 +15,7 @@ public interface IGasMask { * @param entity * @return an empty list if there's no blacklist */ - public List getBlacklist(ItemStack stack, EntityLivingBase entity); + public ArrayList getBlacklist(ItemStack stack, EntityLivingBase entity); /** * Returns the loaded filter, if there is any diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index d117b407b..fa11e2615 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -859,8 +859,9 @@ public class ModBlocks { public static Block machine_large_turbine; public static final int guiID_machine_large_turbine = 100; - + public static Block machine_chungus; + public static Block machine_tower_large; public static Block machine_deaerator; public static final int guiID_machine_deaerator = 74; @@ -1264,7 +1265,7 @@ public class ModBlocks { stone_depth_nether = new BlockDepth().setBlockName("stone_depth_nether").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":stone_depth_nether"); 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_porous = new BlockPorous().setBlockName("stone_porous").setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":stone_porous"); 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"); @@ -1964,6 +1965,7 @@ public class ModBlocks { machine_turbine = new MachineTurbine(Material.iron).setBlockName("machine_turbine").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_turbine"); machine_large_turbine = new MachineLargeTurbine(Material.iron).setBlockName("machine_large_turbine").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_large_turbine"); machine_chungus = new MachineChungus(Material.iron).setBlockName("machine_chungus").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_chungus"); + machine_tower_large = new MachineTowerLarge(Material.iron).setBlockName("machine_tower_large").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_tower_large"); anvil_iron = new NTMAnvil(Material.iron, 1).setBlockName("anvil_iron").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":anvil_iron"); anvil_lead = new NTMAnvil(Material.iron, 1).setBlockName("anvil_lead").setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":anvil_lead"); @@ -2798,6 +2800,7 @@ public class ModBlocks { GameRegistry.registerBlock(machine_turbine, machine_turbine.getUnlocalizedName()); GameRegistry.registerBlock(machine_large_turbine, machine_large_turbine.getUnlocalizedName()); GameRegistry.registerBlock(machine_chungus, machine_chungus.getUnlocalizedName()); + GameRegistry.registerBlock(machine_tower_large, machine_tower_large.getUnlocalizedName()); GameRegistry.registerBlock(machine_deaerator, machine_deaerator.getUnlocalizedName()); GameRegistry.registerBlock(machine_waste_drum, machine_waste_drum.getUnlocalizedName()); GameRegistry.registerBlock(machine_storage_drum, machine_storage_drum.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/gas/BlockGasClorine.java b/src/main/java/com/hbm/blocks/gas/BlockGasClorine.java index a16bf2ab9..52dc30b48 100644 --- a/src/main/java/com/hbm/blocks/gas/BlockGasClorine.java +++ b/src/main/java/com/hbm/blocks/gas/BlockGasClorine.java @@ -2,6 +2,8 @@ package com.hbm.blocks.gas; import java.util.Random; +import com.hbm.util.ArmorRegistry; +import com.hbm.util.ArmorRegistry.HazardClass; import com.hbm.util.ArmorUtil; import cpw.mods.fml.relauncher.Side; @@ -33,17 +35,21 @@ public class BlockGasClorine extends BlockGasBase { @Override public void onEntityCollidedWithBlock(World world, int p_149670_2_, int p_149670_3_, int p_149670_4_, Entity entity) { - if(entity instanceof EntityPlayer && ArmorUtil.checkForGasMask((EntityPlayer) entity)) { + + if(!(entity instanceof EntityLivingBase)) + return; + + EntityLivingBase entityLiving = (EntityLivingBase) entity; + + if(ArmorRegistry.hasAllProtection(entityLiving, 3, HazardClass.GAS_CHLORINE)) { + ArmorUtil.damageGasMaskFilter(entityLiving, 1); - if(world.rand.nextInt(25) == 0) - ArmorUtil.damageSuit((EntityPlayer) entity, 3, world.rand.nextInt(2)); - - } else if(entity instanceof EntityLivingBase) { - ((EntityLivingBase) entity).addPotionEffect(new PotionEffect(Potion.blindness.getId(), 5 * 20, 0)); - ((EntityLivingBase) entity).addPotionEffect(new PotionEffect(Potion.poison.getId(), 20 * 20, 2)); - ((EntityLivingBase) entity).addPotionEffect(new PotionEffect(Potion.wither.getId(), 1 * 20, 1)); - ((EntityLivingBase) entity).addPotionEffect(new PotionEffect(Potion.moveSlowdown.getId(), 30 * 20, 1)); - ((EntityLivingBase) entity).addPotionEffect(new PotionEffect(Potion.digSlowdown.getId(), 30 * 20, 2)); + } else { + entityLiving.addPotionEffect(new PotionEffect(Potion.blindness.getId(), 5 * 20, 0)); + entityLiving.addPotionEffect(new PotionEffect(Potion.poison.getId(), 20 * 20, 2)); + entityLiving.addPotionEffect(new PotionEffect(Potion.wither.getId(), 1 * 20, 1)); + entityLiving.addPotionEffect(new PotionEffect(Potion.moveSlowdown.getId(), 30 * 20, 1)); + entityLiving.addPotionEffect(new PotionEffect(Potion.digSlowdown.getId(), 30 * 20, 2)); } } diff --git a/src/main/java/com/hbm/blocks/gas/BlockGasExplosive.java b/src/main/java/com/hbm/blocks/gas/BlockGasExplosive.java index a8673404e..2e941f3b8 100644 --- a/src/main/java/com/hbm/blocks/gas/BlockGasExplosive.java +++ b/src/main/java/com/hbm/blocks/gas/BlockGasExplosive.java @@ -1,11 +1,11 @@ package com.hbm.blocks.gas; -import net.minecraft.init.Blocks; import net.minecraft.world.World; public class BlockGasExplosive extends BlockGasFlammable { protected void combust(World world, int x, int y, int z) { + super.combust(world, x, y, z); world.newExplosion(null, x + 0.5, y + 0.5, z + 0.5, 3F, true, false); } } diff --git a/src/main/java/com/hbm/blocks/gas/BlockGasMonoxide.java b/src/main/java/com/hbm/blocks/gas/BlockGasMonoxide.java index f0cf4dc22..1cf3f1511 100644 --- a/src/main/java/com/hbm/blocks/gas/BlockGasMonoxide.java +++ b/src/main/java/com/hbm/blocks/gas/BlockGasMonoxide.java @@ -3,6 +3,9 @@ package com.hbm.blocks.gas; import java.util.Random; import com.hbm.lib.ModDamageSource; +import com.hbm.util.ArmorRegistry; +import com.hbm.util.ArmorRegistry.HazardClass; +import com.hbm.util.ArmorUtil; import com.hbm.util.ContaminationUtil; import com.hbm.util.ContaminationUtil.ContaminationType; import com.hbm.util.ContaminationUtil.HazardType; @@ -21,8 +24,15 @@ public class BlockGasMonoxide extends BlockGasBase { @Override public void onEntityCollidedWithBlock(World world, int p_149670_2_, int p_149670_3_, int p_149670_4_, Entity entity) { - if(entity instanceof EntityLivingBase) - ContaminationUtil.contaminate((EntityLivingBase) entity, HazardType.MONOXIDE, ContaminationType.GAS_NON_REACTIVE, 1F); + if(!(entity instanceof EntityLivingBase)) + return; + + EntityLivingBase entityLiving = (EntityLivingBase) entity; + + if(ArmorRegistry.hasAllProtection(entityLiving, 3, HazardClass.GAS_MONOXIDE)) + ArmorUtil.damageGasMaskFilter(entityLiving, 1); + else + entityLiving.attackEntityFrom(ModDamageSource.monoxide, 1); } @Override diff --git a/src/main/java/com/hbm/blocks/gas/BlockGasRadonDense.java b/src/main/java/com/hbm/blocks/gas/BlockGasRadonDense.java index 073f43bc4..780672e67 100644 --- a/src/main/java/com/hbm/blocks/gas/BlockGasRadonDense.java +++ b/src/main/java/com/hbm/blocks/gas/BlockGasRadonDense.java @@ -3,8 +3,12 @@ package com.hbm.blocks.gas; import java.util.Random; import com.hbm.blocks.ModBlocks; +import com.hbm.lib.ModDamageSource; import com.hbm.potion.HbmPotion; +import com.hbm.util.ArmorRegistry; +import com.hbm.util.ArmorUtil; import com.hbm.util.ContaminationUtil; +import com.hbm.util.ArmorRegistry.HazardClass; import com.hbm.util.ContaminationUtil.ContaminationType; import com.hbm.util.ContaminationUtil.HazardType; @@ -26,9 +30,16 @@ public class BlockGasRadonDense extends BlockGasBase { @Override public void onEntityCollidedWithBlock(World world, int p_149670_2_, int p_149670_3_, int p_149670_4_, Entity entity) { - if(entity instanceof EntityLivingBase) { - ContaminationUtil.contaminate((EntityLivingBase)entity, HazardType.RADIATION, ContaminationType.GAS, 0.5F); - ((EntityLivingBase) entity).addPotionEffect(new PotionEffect(HbmPotion.radiation.id, 15 * 20, 0)); + if(!(entity instanceof EntityLivingBase)) + return; + + EntityLivingBase entityLiving = (EntityLivingBase) entity; + + if(ArmorRegistry.hasAllProtection(entityLiving, 3, HazardClass.PARTICLE_FINE)) { + ArmorUtil.damageGasMaskFilter(entityLiving, 1); + } else { + ContaminationUtil.contaminate((EntityLivingBase)entity, HazardType.RADIATION, ContaminationType.CREATIVE, 0.5F); + entityLiving.addPotionEffect(new PotionEffect(HbmPotion.radiation.id, 15 * 20, 0)); } } diff --git a/src/main/java/com/hbm/blocks/generic/BlockAshes.java b/src/main/java/com/hbm/blocks/generic/BlockAshes.java index 88deb5af6..3e0787959 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockAshes.java +++ b/src/main/java/com/hbm/blocks/generic/BlockAshes.java @@ -4,7 +4,9 @@ import java.util.Random; import com.hbm.items.ModItems; import com.hbm.main.MainRegistry; +import com.hbm.util.ArmorRegistry; import com.hbm.util.ArmorUtil; +import com.hbm.util.ArmorRegistry.HazardClass; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -31,7 +33,7 @@ public class BlockAshes extends BlockFalling { if(ashes < 256 * 0.25) { ashes++; } - } else if(ArmorUtil.checkForGoggles(MainRegistry.proxy.me())) { + } else if(ArmorRegistry.hasAnyProtection(MainRegistry.proxy.me(), 3, HazardClass.SAND, HazardClass.LIGHT)) { if(ashes < 256 * 0.75) { ashes++; } diff --git a/src/main/java/com/hbm/blocks/generic/BlockGeneric.java b/src/main/java/com/hbm/blocks/generic/BlockGeneric.java index 49d01c824..99a1a000b 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockGeneric.java +++ b/src/main/java/com/hbm/blocks/generic/BlockGeneric.java @@ -5,8 +5,8 @@ import net.minecraft.block.material.Material; public class BlockGeneric extends Block { - public BlockGeneric(Material p_i45394_1_) { - super(p_i45394_1_); + public BlockGeneric(Material material) { + super(material); } } diff --git a/src/main/java/com/hbm/blocks/generic/BlockPorous.java b/src/main/java/com/hbm/blocks/generic/BlockPorous.java index dceb64422..74cef2a24 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockPorous.java +++ b/src/main/java/com/hbm/blocks/generic/BlockPorous.java @@ -39,7 +39,7 @@ public class BlockPorous extends BlockStone { @Override public void updateTick(World world, int x, int y, int z, Random rand) { ChunkRadiationManager.proxy.decrementRad(world, x, y, z, 10F); - world.scheduleBlockUpdate(x, y, z, this, this.tickRate(world)); + //world.scheduleBlockUpdate(x, y, z, this, this.tickRate(world)); } @Override diff --git a/src/main/java/com/hbm/blocks/machine/MachineTowerLarge.java b/src/main/java/com/hbm/blocks/machine/MachineTowerLarge.java new file mode 100644 index 000000000..744e32ebe --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/MachineTowerLarge.java @@ -0,0 +1,33 @@ +package com.hbm.blocks.machine; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.tileentity.machine.TileEntityTowerLarge; + +import net.minecraft.block.material.Material; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public class MachineTowerLarge extends BlockDummyable { + + public MachineTowerLarge(Material mat) { + super(mat); + } + + @Override + public TileEntity createNewTileEntity(World p_149915_1_, int meta) { + + if(meta >= 12) + return new TileEntityTowerLarge(); + return null; + } + + @Override + public int[] getDimensions() { + return new int[] {12, 0, 4, 4, 4, 4}; + } + + @Override + public int getOffset() { + return 4; + } +} diff --git a/src/main/java/com/hbm/config/WorldConfig.java b/src/main/java/com/hbm/config/WorldConfig.java index e22fe4381..3a4598f32 100644 --- a/src/main/java/com/hbm/config/WorldConfig.java +++ b/src/main/java/com/hbm/config/WorldConfig.java @@ -27,7 +27,8 @@ public class WorldConfig { public static int cinnebarSpawn = 1; public static int oilcoalSpawn = 128; public static int gassshaleSpawn = 5; - public static int gasbubbleSpawn = 64; + public static int gasbubbleSpawn = 4; + public static int explosivebubbleSpawn = 8; public static int cobaltSpawn = 2; public static int ironClusterSpawn = 4; @@ -100,9 +101,10 @@ public class WorldConfig { rareSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.14_rareEarthSpawnRate", "Amount of rare earth ore veins per chunk", 6); oilcoalSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.15_oilCoalSpawnRate", "Spawns an oily coal vein every nTH chunk", 128); gassshaleSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.16_gasShaleSpawnRate", "Amount of oil shale veins per chunk", 5); - gasbubbleSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.17_gasBubbleSpawnRate", "Spawns a gas bubble every nTH chunk", 64); + gasbubbleSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.17_gasBubbleSpawnRate", "Spawns a gas bubble every nTH chunk", 4); cinnebarSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.18_cinnebarSpawnRate", "Amount of cinnebar ore veins per chunk", 1); cobaltSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.18_cobaltSpawnRate", "Amount of cobalt ore veins per chunk", 2); + explosivebubbleSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.19_explosiveBubbleSpawnRate", "Spawns an explosive gas bubble every nTH chunk", 8); ironClusterSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.C00_ironClusterSpawn", "Amount of iron cluster veins per chunk", 4); titaniumClusterSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.C01_titaniumClusterSpawn", "Amount of titanium cluster veins per chunk", 2); diff --git a/src/main/java/com/hbm/crafting/ArmorRecipes.java b/src/main/java/com/hbm/crafting/ArmorRecipes.java index c61463b1d..13555cf65 100644 --- a/src/main/java/com/hbm/crafting/ArmorRecipes.java +++ b/src/main/java/com/hbm/crafting/ArmorRecipes.java @@ -27,30 +27,35 @@ public class ArmorRecipes { GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.machine_armor_table, 1), new Object[] { "PPP", "TCT", "TST", 'P', "plateSteel", 'T', "ingotTungsten", 'C', Blocks.crafting_table, 'S', "blockSteel" })); //Regular armor - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.steel_helmet, 1), new Object[] { "EEE", "E E", 'E', "ingotSteel" })); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.steel_plate, 1), new Object[] { "E E", "EEE", "EEE", 'E', "ingotSteel" })); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.steel_legs, 1), new Object[] { "EEE", "E E", "E E", 'E', "ingotSteel" })); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.steel_boots, 1), new Object[] { "E E", "E E", 'E', "ingotSteel" })); - GameRegistry.addRecipe(new ItemStack(ModItems.titanium_helmet, 1), new Object[] { "EEE", "E E", 'E', ModItems.ingot_titanium }); - GameRegistry.addRecipe(new ItemStack(ModItems.titanium_plate, 1), new Object[] { "E E", "EEE", "EEE", 'E', ModItems.ingot_titanium }); - GameRegistry.addRecipe(new ItemStack(ModItems.titanium_legs, 1), new Object[] { "EEE", "E E", "E E", 'E', ModItems.ingot_titanium }); - GameRegistry.addRecipe(new ItemStack(ModItems.titanium_boots, 1), new Object[] { "E E", "E E", 'E', ModItems.ingot_titanium }); - GameRegistry.addRecipe(new ItemStack(ModItems.alloy_helmet, 1), new Object[] { "EEE", "E E", 'E', ModItems.ingot_advanced_alloy }); - GameRegistry.addRecipe(new ItemStack(ModItems.alloy_plate, 1), new Object[] { "E E", "EEE", "EEE", 'E', ModItems.ingot_advanced_alloy }); - GameRegistry.addRecipe(new ItemStack(ModItems.alloy_legs, 1), new Object[] { "EEE", "E E", "E E", 'E', ModItems.ingot_advanced_alloy }); - GameRegistry.addRecipe(new ItemStack(ModItems.alloy_boots, 1), new Object[] { "E E", "E E", 'E', ModItems.ingot_advanced_alloy }); - GameRegistry.addRecipe(new ItemStack(ModItems.cmb_helmet, 1), new Object[] { "EEE", "E E", 'E', ModItems.ingot_combine_steel }); - GameRegistry.addRecipe(new ItemStack(ModItems.cmb_plate, 1), new Object[] { "E E", "EEE", "EEE", 'E', ModItems.ingot_combine_steel }); - GameRegistry.addRecipe(new ItemStack(ModItems.cmb_legs, 1), new Object[] { "EEE", "E E", "E E", 'E', ModItems.ingot_combine_steel }); - GameRegistry.addRecipe(new ItemStack(ModItems.cmb_boots, 1), new Object[] { "E E", "E E", 'E', ModItems.ingot_combine_steel }); + addHelmet( "ingotSteel", ModItems.steel_helmet); + addChest( "ingotSteel", ModItems.steel_plate); + addLegs( "ingotSteel", ModItems.steel_legs); + addBoots( "ingotSteel", ModItems.steel_boots); + addHelmet( "ingotTitanium", ModItems.titanium_helmet); + addChest( "ingotTitanium", ModItems.titanium_plate); + addLegs( "ingotTitanium", ModItems.titanium_legs); + addBoots( "ingotTitanium", ModItems.titanium_boots); + addHelmet( ModItems.ingot_advanced_alloy, ModItems.alloy_helmet); + addChest( ModItems.ingot_advanced_alloy, ModItems.alloy_plate); + addLegs( ModItems.ingot_advanced_alloy, ModItems.alloy_legs); + addBoots( ModItems.ingot_advanced_alloy, ModItems.alloy_boots); + addHelmet( ModItems.ingot_combine_steel, ModItems.cmb_helmet); + addChest( ModItems.ingot_combine_steel, ModItems.cmb_plate); + addLegs( ModItems.ingot_combine_steel, ModItems.cmb_legs); + addBoots( ModItems.ingot_combine_steel, ModItems.cmb_boots); + addHelmet( "ingotCobalt", ModItems.cobalt_helmet); + addChest( "ingotCobalt", ModItems.cobalt_plate); + addLegs( "ingotCobalt", ModItems.cobalt_legs); + addBoots( "ingotCobalt", ModItems.cobalt_boots); + addHelmet( ModItems.rag, ModItems.robes_helmet); + addChest( ModItems.rag, ModItems.robes_plate); + addLegs( ModItems.rag, ModItems.robes_legs); + addBoots( ModItems.plate_polymer, ModItems.robes_boots); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.security_helmet, 1), new Object[] { "SSS", "IGI", 'S', "plateSteel", 'I', ModItems.plate_polymer, 'G', "paneGlass" })); GameRegistry.addRecipe(new ItemStack(ModItems.security_plate, 1), new Object[] { "KWK", "IKI", "WKW", 'K', ModItems.plate_kevlar, 'I', ModItems.ingot_polymer, 'W', new ItemStack(Blocks.wool, 1, OreDictionary.WILDCARD_VALUE) }); GameRegistry.addRecipe(new ItemStack(ModItems.security_legs, 1), new Object[] { "IWI", "K K", "W W", 'K', ModItems.plate_kevlar, 'I', ModItems.ingot_polymer, 'W', new ItemStack(Blocks.wool, 1, OreDictionary.WILDCARD_VALUE) }); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.security_boots, 1), new Object[] { "P P", "I I", 'P', "plateSteel", 'I', ModItems.plate_polymer })); - GameRegistry.addRecipe(new ItemStack(ModItems.cobalt_helmet, 1), new Object[] { "EEE", "E E", 'E', ModItems.ingot_cobalt }); - GameRegistry.addRecipe(new ItemStack(ModItems.cobalt_plate, 1), new Object[] { "E E", "EEE", "EEE", 'E', ModItems.ingot_cobalt }); - GameRegistry.addRecipe(new ItemStack(ModItems.cobalt_legs, 1), new Object[] { "EEE", "E E", "E E", 'E', ModItems.ingot_cobalt }); - GameRegistry.addRecipe(new ItemStack(ModItems.cobalt_boots, 1), new Object[] { "E E", "E E", 'E', ModItems.ingot_cobalt }); GameRegistry.addRecipe(new ItemStack(ModItems.dnt_helmet, 1), new Object[] { "EEE", "EE ", 'E', ModItems.ingot_dineutronium }); GameRegistry.addRecipe(new ItemStack(ModItems.dnt_plate, 1), new Object[] { "EE ", "EEE", "EEE", 'E', ModItems.ingot_dineutronium }); GameRegistry.addRecipe(new ItemStack(ModItems.dnt_legs, 1), new Object[] { "EE ", "EEE", "E E", 'E', ModItems.ingot_dineutronium }); @@ -101,15 +106,15 @@ public class ArmorRecipes { GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.jetpack_boost, 1), new Object[] { "PCP", "DJD", "PAP", 'C', ModItems.circuit_targeting_tier4, 'P', ModItems.plate_saturnite, 'D', "ingotDesh", 'J', ModItems.jetpack_vector, 'A', ModItems.board_copper })); //Hazmat - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.hazmat_helmet, 1), new Object[] { "EEE", "EIE", "FPF", 'E', ModItems.hazmat_cloth, 'I', "paneGlass", 'P', "plateSteel", 'F', ModItems.filter_coal })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.hazmat_helmet, 1), new Object[] { "EEE", "EIE", " P ", 'E', ModItems.hazmat_cloth, 'I', "paneGlass", 'P', "plateIron" })); GameRegistry.addRecipe(new ItemStack(ModItems.hazmat_plate, 1), new Object[] { "E E", "EEE", "EEE", 'E', ModItems.hazmat_cloth }); GameRegistry.addRecipe(new ItemStack(ModItems.hazmat_legs, 1), new Object[] { "EEE", "E E", "E E", 'E', ModItems.hazmat_cloth }); GameRegistry.addRecipe(new ItemStack(ModItems.hazmat_boots, 1), new Object[] { "E E", "E E", 'E', ModItems.hazmat_cloth }); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.hazmat_helmet_red, 1), new Object[] { "EEE", "IEI", "EFE", 'E', ModItems.hazmat_cloth_red, 'I', "paneGlass", 'P', "plateSteel", 'F', ModItems.gas_mask_filter })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.hazmat_helmet_red, 1), new Object[] { "EEE", "IEI", "EFE", 'E', ModItems.hazmat_cloth_red, 'I', "paneGlass", 'F', "plateIron" })); GameRegistry.addRecipe(new ItemStack(ModItems.hazmat_plate_red, 1), new Object[] { "E E", "EEE", "EEE", 'E', ModItems.hazmat_cloth_red }); GameRegistry.addRecipe(new ItemStack(ModItems.hazmat_legs_red, 1), new Object[] { "EEE", "E E", "E E", 'E', ModItems.hazmat_cloth_red }); GameRegistry.addRecipe(new ItemStack(ModItems.hazmat_boots_red, 1), new Object[] { "E E", "E E", 'E', ModItems.hazmat_cloth_red }); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.hazmat_helmet_grey, 1), new Object[] { "EEE", "IEI", "EFE", 'E', ModItems.hazmat_cloth_grey, 'I', "paneGlass", 'P', "plateSteel", 'F', ModItems.gas_mask_filter })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.hazmat_helmet_grey, 1), new Object[] { "EEE", "IEI", "EFE", 'E', ModItems.hazmat_cloth_grey, 'I', "paneGlass", 'F', "plateIron" })); GameRegistry.addRecipe(new ItemStack(ModItems.hazmat_plate_grey, 1), new Object[] { "E E", "EEE", "EEE", 'E', ModItems.hazmat_cloth_grey }); GameRegistry.addRecipe(new ItemStack(ModItems.hazmat_legs_grey, 1), new Object[] { "EEE", "E E", "E E", 'E', ModItems.hazmat_cloth_grey }); GameRegistry.addRecipe(new ItemStack(ModItems.hazmat_boots_grey, 1), new Object[] { "E E", "E E", 'E', ModItems.hazmat_cloth_grey }); @@ -117,7 +122,7 @@ public class ArmorRecipes { GameRegistry.addRecipe(new ItemStack(ModItems.asbestos_plate, 1), new Object[] { "E E", "EEE", "EEE", 'E', ModItems.asbestos_cloth }); GameRegistry.addRecipe(new ItemStack(ModItems.asbestos_legs, 1), new Object[] { "EEE", "E E", "E E", 'E', ModItems.asbestos_cloth }); GameRegistry.addRecipe(new ItemStack(ModItems.asbestos_boots, 1), new Object[] { "E E", "E E", 'E', ModItems.asbestos_cloth }); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.hazmat_paa_helmet, 1), new Object[] { "EEE", "IEI", "FPF", 'E', ModItems.plate_paa, 'I', "paneGlass", 'P', "plateSteel", 'F', ModItems.filter_coal })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.hazmat_paa_helmet, 1), new Object[] { "EEE", "IEI", " P ", 'E', ModItems.plate_paa, 'I', "paneGlass", 'P', "plateIron" })); GameRegistry.addRecipe(new ItemStack(ModItems.hazmat_paa_plate, 1), new Object[] { "E E", "EEE", "EEE", 'E', ModItems.plate_paa }); GameRegistry.addRecipe(new ItemStack(ModItems.hazmat_paa_legs, 1), new Object[] { "EEE", "E E", "E E", 'E', ModItems.plate_paa }); GameRegistry.addRecipe(new ItemStack(ModItems.hazmat_paa_boots, 1), new Object[] { "E E", "E E", 'E', ModItems.plate_paa }); @@ -126,18 +131,21 @@ public class ArmorRecipes { GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.paa_boots, 1), new Object[] { "E E", "N N", 'E', ModItems.plate_paa, 'N', OreDictManager.getReflector() })); //Liquidator Suit - GameRegistry.addRecipe(new ItemStack(ModItems.liquidator_helmet, 1), new Object[] { "III", "CBC", "IFI", 'I', ModItems.plate_polymer, 'C', ModItems.cladding_lead, 'B', ModItems.hazmat_helmet_grey, 'F', ModItems.gas_mask_filter_mono }); + GameRegistry.addRecipe(new ItemStack(ModItems.liquidator_helmet, 1), new Object[] { "III", "CBC", "III", 'I', ModItems.plate_polymer, 'C', ModItems.cladding_lead, 'B', ModItems.hazmat_helmet_grey }); GameRegistry.addRecipe(new ItemStack(ModItems.liquidator_plate, 1), new Object[] { "ICI", "TBT", "ICI", 'I', ModItems.plate_polymer, 'C', ModItems.cladding_lead, 'B', ModItems.hazmat_plate_grey, 'T', ModItems.gas_empty }); GameRegistry.addRecipe(new ItemStack(ModItems.liquidator_legs, 1), new Object[] { "III", "CBC", "I I", 'I', ModItems.plate_polymer, 'C', ModItems.cladding_lead, 'B', ModItems.hazmat_legs_grey }); GameRegistry.addRecipe(new ItemStack(ModItems.liquidator_boots, 1), new Object[] { "ICI", "IBI", 'I', ModItems.plate_polymer, 'C', ModItems.cladding_lead, 'B', ModItems.hazmat_boots_grey }); //Masks GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.goggles, 1), new Object[] { "P P", "GPG", 'G', "paneGlass", 'P', "plateSteel" })); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.gas_mask, 1), new Object[] { "PPP", "GPG", " F ", 'G', "paneGlass", 'P', "plateSteel", 'F', ModItems.gas_mask_filter })); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.gas_mask_m65, 1), new Object[] { "PPP", "GPG", " F ", 'G', "paneGlass", 'P', ModItems.plate_polymer, 'F', ModItems.gas_mask_filter })); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.gas_mask_mono, 1), new Object[] { " P ", "PPP", " F ", 'P', ModItems.plate_polymer, 'F', ModItems.gas_mask_filter_mono })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.gas_mask, 1), new Object[] { "PPP", "GPG", " F ", 'G', "paneGlass", 'P', "plateSteel", 'F', "plateIron" })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.gas_mask_m65, 1), new Object[] { "PPP", "GPG", " F ", 'G', "paneGlass", 'P', ModItems.plate_polymer, 'F', "plateIron" })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.gas_mask_olde, 1), new Object[] { "PPP", "GPG", " F ", 'G', "paneGlass", 'P', Items.leather, 'F', "ingotIron" })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.gas_mask_mono, 1), new Object[] { " P ", "PPP", " F ", 'P', ModItems.plate_polymer, 'F', "plateIron" })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.mask_of_infamy, 1), new Object[] { "III", "III", " I ", 'I', "plateIron" })); GameRegistry.addRecipe(new ItemStack(ModItems.ashglasses, 1), new Object[] { "I I", "GPG", 'I', ModItems.plate_polymer, 'G', ModBlocks.glass_ash, 'P', ModItems.ingot_polymer }); + GameRegistry.addRecipe(new ItemStack(ModItems.mask_rag, 1), new Object[] { "RRR", 'R', ModItems.rag_damp }); + GameRegistry.addRecipe(new ItemStack(ModItems.mask_piss, 1), new Object[] { "RRR", 'R', ModItems.rag_piss }); //Capes GameRegistry.addRecipe(new ItemStack(ModItems.cape_radiation, 1), new Object[] { "W W", "WIW", "WDW", 'W', new ItemStack(Item.getItemFromBlock(Blocks.wool), 1, 11), 'D', new ItemStack(Items.dye, 1, 11), 'I', ModItems.nuclear_waste }); @@ -146,14 +154,14 @@ public class ArmorRecipes { //Configged if(GeneralConfig.enableBabyMode) { - GameRegistry.addRecipe(new ItemStack(ModItems.starmetal_helmet, 1), new Object[] { "EEE", "E E", 'E', ModItems.ingot_starmetal }); - GameRegistry.addRecipe(new ItemStack(ModItems.starmetal_plate, 1), new Object[] { "E E", "EEE", "EEE", 'E', ModItems.ingot_starmetal }); - GameRegistry.addRecipe(new ItemStack(ModItems.starmetal_legs, 1), new Object[] { "EEE", "E E", "E E", 'E', ModItems.ingot_starmetal }); - GameRegistry.addRecipe(new ItemStack(ModItems.starmetal_boots, 1), new Object[] { "E E", "E E", 'E', ModItems.ingot_starmetal }); - GameRegistry.addRecipe(new ItemStack(ModItems.schrabidium_helmet, 1), new Object[] { "EEE", "E E", 'E', ModItems.ingot_schrabidium }); - GameRegistry.addRecipe(new ItemStack(ModItems.schrabidium_plate, 1), new Object[] { "E E", "EEE", "EEE", 'E', ModItems.ingot_schrabidium }); - GameRegistry.addRecipe(new ItemStack(ModItems.schrabidium_legs, 1), new Object[] { "EEE", "E E", "E E", 'E', ModItems.ingot_schrabidium }); - GameRegistry.addRecipe(new ItemStack(ModItems.schrabidium_boots, 1), new Object[] { "E E", "E E", 'E', ModItems.ingot_schrabidium }); + addHelmet( ModItems.ingot_starmetal, ModItems.starmetal_helmet); + addChest( ModItems.ingot_starmetal, ModItems.starmetal_plate); + addLegs( ModItems.ingot_starmetal, ModItems.starmetal_legs); + addBoots( ModItems.ingot_starmetal, ModItems.starmetal_boots); + addHelmet( ModItems.ingot_schrabidium, ModItems.schrabidium_helmet); + addChest( ModItems.ingot_schrabidium, ModItems.schrabidium_plate); + addLegs( ModItems.ingot_schrabidium, ModItems.schrabidium_legs); + addBoots( ModItems.ingot_schrabidium, ModItems.schrabidium_boots); } else { GameRegistry.addRecipe(new ItemStack(ModItems.starmetal_helmet, 1), new Object[] { "EEE", "ECE", 'E', ModItems.ingot_starmetal, 'C', ModItems.cobalt_helmet }); GameRegistry.addRecipe(new ItemStack(ModItems.starmetal_plate, 1), new Object[] { "ECE", "EEE", "EEE", 'E', ModItems.ingot_starmetal, 'C', ModItems.cobalt_plate }); @@ -165,4 +173,34 @@ public class ArmorRecipes { GameRegistry.addRecipe(new ItemStack(ModItems.schrabidium_boots, 1), new Object[] { "EPE", "ESE", 'E', ModItems.ingot_schrabidium, 'S', ModItems.starmetal_boots, 'P', ModItems.pellet_charged }); } } + + public static void addHelmet(Object ingot, Item pick) { + addArmor(ingot, pick, patternHelmet); + } + public static void addChest(Object ingot, Item axe) { + addArmor(ingot, axe, patternChetplate); + } + public static void addLegs(Object ingot, Item shovel) { + addArmor(ingot, shovel, patternLeggings); + } + public static void addBoots(Object ingot, Item hoe) { + addArmor(ingot, hoe, patternBoots); + } + + public static void addArmor(Object ingot, Item armor, String[] pattern) { + if(ingot instanceof Item) addToolRec(ingot, armor, pattern); + if(ingot instanceof ItemStack) addToolRec(ingot, armor, pattern); + if(ingot instanceof String) addToolDict(ingot, armor, pattern); + } + public static void addToolRec(Object ingot, Item tool, String[] pattern) { + GameRegistry.addRecipe(new ItemStack(tool), new Object[] { pattern, 'X', ingot }); + } + public static void addToolDict(Object ingot, Item tool, String[] pattern) { + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(tool), new Object[] { pattern, 'X', ingot })); + } + + public static final String[] patternHelmet = new String[] {"XXX", "X X"}; + public static final String[] patternChetplate = new String[] {"X X", "XXX", "XXX"}; + public static final String[] patternLeggings = new String[] {"XXX", "X X", "X X"}; + public static final String[] patternBoots = new String[] {"X X", "X X"}; } diff --git a/src/main/java/com/hbm/crafting/ConsumableRecipes.java b/src/main/java/com/hbm/crafting/ConsumableRecipes.java index ab27f0b60..58bfca048 100644 --- a/src/main/java/com/hbm/crafting/ConsumableRecipes.java +++ b/src/main/java/com/hbm/crafting/ConsumableRecipes.java @@ -155,8 +155,8 @@ public class ConsumableRecipes { GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.servo_set_desh, 1), new Object[] { "MBM", "PSP", "MBM", 'M', ModItems.motor_desh, 'B', ModItems.bolt_dura_steel, 'P', "plateAdvanced", 'S', ModItems.servo_set })); //Helmet Mods - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.attachment_mask, 1), new Object[] { "DID", "IGI", " F ", 'D', ModItems.ducttape, 'I', ModItems.plate_polymer, 'G', "paneGlass", 'F', ModItems.gas_mask_filter })); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.attachment_mask_mono, 1), new Object[] { "DID", "IGI", " F ", 'D', ModItems.ducttape, 'I', ModItems.plate_polymer, 'G', "paneGlass", 'F', ModItems.gas_mask_filter_mono })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.attachment_mask, 1), new Object[] { "DID", "IGI", " F ", 'D', ModItems.ducttape, 'I', ModItems.plate_polymer, 'G', "paneGlass", 'F', "plateIron" })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.attachment_mask_mono, 1), new Object[] { " D ", "DID", " F ", 'D', ModItems.ducttape, 'I', ModItems.plate_polymer, 'F', "plateIron" })); //Boot Mods GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.pads_rubber, 1), new Object[] { "P P", "IDI", "P P", 'P', ModItems.plate_polymer, 'I', "plateIron", 'D', ModItems.ducttape })); @@ -180,5 +180,12 @@ public class ConsumableRecipes { //Stealth boy GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.stealth_boy, 1), new Object[] { " B", "LI", "LC", 'B', Item.getItemFromBlock(Blocks.stone_button), 'L', Items.leather, 'I', "ingotSteel", 'C', ModItems.circuit_red_copper })); + + //RD40 Filters + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.gas_mask_filter, 1), new Object[] { "I", "F", 'F', ModItems.filter_coal, 'I', "plateIron" })); + GameRegistry.addRecipe(new ItemStack(ModItems.gas_mask_filter_mono, 1), new Object[] { "ZZZ", "ZCZ", "ZZZ", 'Z', ModItems.nugget_zirconium, 'C', ModItems.catalyst_clay }); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.gas_mask_filter_combo, 1), new Object[] { "ZCZ", "CFC", "ZCZ", 'Z', "ingotZirconium", 'C', ModItems.catalyst_clay, 'F', ModItems.gas_mask_filter })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.gas_mask_filter_rag, 1), new Object[] { "I", "F", 'F', ModItems.rag_damp, 'I', "ingotIron" })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.gas_mask_filter_piss, 1), new Object[] { "I", "F", 'F', ModItems.rag_piss, 'I', "ingotIron" })); } } diff --git a/src/main/java/com/hbm/explosion/ExplosionChaos.java b/src/main/java/com/hbm/explosion/ExplosionChaos.java index 4306977dc..2c2c49107 100644 --- a/src/main/java/com/hbm/explosion/ExplosionChaos.java +++ b/src/main/java/com/hbm/explosion/ExplosionChaos.java @@ -21,7 +21,9 @@ import com.hbm.entity.projectile.EntityRubble; import com.hbm.entity.projectile.EntitySchrab; import com.hbm.lib.ModDamageSource; import com.hbm.potion.HbmPotion; +import com.hbm.util.ArmorRegistry; import com.hbm.util.ArmorUtil; +import com.hbm.util.ArmorRegistry.HazardClass; import net.minecraft.block.Block; import net.minecraft.entity.Entity; @@ -403,55 +405,8 @@ public class ExplosionChaos { public static void pDestruction(World world, int x, int y, int z) { - EntityFallingBlock entityfallingblock = new EntityFallingBlock(world, (double)((float)x + 0.5F), (double)((float)y + 0.5F), (double)((float)z + 0.5F), world.getBlock(x, y, z), world.getBlockMetadata(x, y, z)); - world.spawnEntityInWorld(entityfallingblock); - - /* - if (Blocks.air.getBlockHardness(world, x, y, z) != Float.POSITIVE_INFINITY) { - Block b = world.getBlock(x, y, z); - TileEntity t = world.getTileEntity(x, y, z); - - if (b == Blocks.sandstone || b == Blocks.sandstone_stairs) - world.setBlock(x, y, z, Blocks.sand); - else if (t != null && t instanceof ISource) - world.setBlock(x, y, z, ModBlocks.block_electrical_scrap); - else if (t != null && t instanceof IConductor) - world.setBlock(x, y, z, ModBlocks.block_electrical_scrap); - else if (t != null && t instanceof IConsumer) - world.setBlock(x, y, z, ModBlocks.block_electrical_scrap); - else if (b == Blocks.sand) - world.setBlock(x, y, z, Blocks.sand); - else if (b == Blocks.gravel) - world.setBlock(x, y, z, Blocks.gravel); - else if (b == ModBlocks.gravel_obsidian) - world.setBlock(x, y, z, ModBlocks.gravel_obsidian); - else if (b == ModBlocks.block_electrical_scrap) - world.setBlock(x, y, z, ModBlocks.block_electrical_scrap); - else if (b == ModBlocks.block_scrap) - world.setBlock(x, y, z, ModBlocks.block_scrap); - else if (b == ModBlocks.brick_obsidian) - world.setBlock(x, y, z, ModBlocks.gravel_obsidian); - else if (b.getMaterial() == Material.anvil) - world.setBlock(x, y, z, Blocks.gravel); - else if (b.getMaterial() == Material.clay) - world.setBlock(x, y, z, Blocks.sand); - else if (b.getMaterial() == Material.grass) - world.setBlock(x, y, z, Blocks.sand); - else if (b.getMaterial() == Material.ground) - world.setBlock(x, y, z, Blocks.sand); - else if (b.getMaterial() == Material.iron) - world.setBlock(x, y, z, Blocks.gravel); - else if (b.getMaterial() == Material.piston) - world.setBlock(x, y, z, Blocks.gravel); - else if (b.getMaterial() == Material.rock) - world.setBlock(x, y, z, Blocks.gravel); - else if (b.getMaterial() == Material.sand) - world.setBlock(x, y, z, Blocks.sand); - else if (b.getMaterial() == Material.tnt) - world.setBlock(x, y, z, ModBlocks.block_scrap); - else - world.setBlock(x, y, z, Blocks.air); - }*/ + EntityFallingBlock entityfallingblock = new EntityFallingBlock(world, (double) ((float) x + 0.5F), (double) ((float) y + 0.5F), (double) ((float) z + 0.5F), world.getBlock(x, y, z), world.getBlockMetadata(x, y, z)); + world.spawnEntityInWorld(entityfallingblock); } public static void cluster(World world, int x, int y, int z, int count, int gravity) { @@ -573,190 +528,68 @@ public class ExplosionChaos { } } - public static void anvil(World world, int x, int y, int z, int count) { - - double d1 = 0; - double d2 = 0; - double d3 = 0; - EntityFallingBlock fragment; - - for (int i = 0; i < count; i++) { - d1 = rand.nextDouble(); - d2 = rand.nextDouble(); - d3 = rand.nextDouble(); - ; - - if (rand.nextInt(2) == 0) { - d1 *= -1; + public static void poison(World world, double x, double y, double z, double range) { + + List affected = world.getEntitiesWithinAABB(EntityLivingBase.class, AxisAlignedBB.getBoundingBox(x - range, y - range, z - range, x + range, y + range, z + range)); + + for(EntityLivingBase entity : affected) { + + if(entity.getDistance(x, y, z) > range) + continue; + + if(ArmorRegistry.hasAnyProtection(entity, 3, HazardClass.GAS_CHLORINE, HazardClass.GAS_CORROSIVE)) { + ArmorUtil.damageGasMaskFilter(entity, 1); + } else { + entity.addPotionEffect(new PotionEffect(Potion.blindness.getId(), 5 * 20, 0)); + entity.addPotionEffect(new PotionEffect(Potion.poison.getId(), 20 * 20, 2)); + entity.addPotionEffect(new PotionEffect(Potion.wither.getId(), 1 * 20, 1)); + entity.addPotionEffect(new PotionEffect(Potion.moveSlowdown.getId(), 30 * 20, 1)); + entity.addPotionEffect(new PotionEffect(Potion.digSlowdown.getId(), 30 * 20, 2)); } - - if (rand.nextInt(2) == 0) { - d3 *= -1; - } - - world.setBlock(x, y, z, Blocks.anvil); - fragment = new EntityFallingBlock(world, x + 0.5, y + 0.5, z + 0.5, Blocks.anvil); - world.setBlock(x, y, z, Blocks.air); - - fragment.motionX = d1; - fragment.motionY = d2; - fragment.motionZ = d3; - - world.spawnEntityInWorld(fragment); } } - public static void poison(World world, int x, int y, int z, int bombStartStrength) { - float f = bombStartStrength; - int i; - int j; - int k; - double d5; - double d6; - double d7; - double wat = bombStartStrength * 2; - - bombStartStrength *= 2.0F; - i = MathHelper.floor_double(x - wat - 1.0D); - j = MathHelper.floor_double(x + wat + 1.0D); - k = MathHelper.floor_double(y - wat - 1.0D); - int i2 = MathHelper.floor_double(y + wat + 1.0D); - int l = MathHelper.floor_double(z - wat - 1.0D); - int j2 = MathHelper.floor_double(z + wat + 1.0D); - List list = world.getEntitiesWithinAABBExcludingEntity(null, AxisAlignedBB.getBoundingBox(i, k, l, j, i2, j2)); - - for (int i1 = 0; i1 < list.size(); ++i1) { - Entity entity = (Entity) list.get(i1); - double d4 = entity.getDistance(x, y, z) / bombStartStrength; - - if (d4 <= 1.0D) { - d5 = entity.posX - x; - d6 = entity.posY + entity.getEyeHeight() - y; - d7 = entity.posZ - z; - double d9 = MathHelper.sqrt_double(d5 * d5 + d6 * d6 + d7 * d7); - if (d9 < wat) { - if (entity instanceof EntityPlayer && ArmorUtil.checkForGasMask((EntityPlayer) entity)) { - ArmorUtil.damageSuit((EntityPlayer)entity, 3, rand.nextInt(2)); - - } else if (entity instanceof EntityLivingBase) { - ((EntityLivingBase) entity) - .addPotionEffect(new PotionEffect(Potion.blindness.getId(), 5 * 20, 0)); - ((EntityLivingBase) entity) - .addPotionEffect(new PotionEffect(Potion.poison.getId(), 20 * 20, 2)); - ((EntityLivingBase) entity) - .addPotionEffect(new PotionEffect(Potion.wither.getId(), 1 * 20, 1)); - ((EntityLivingBase) entity) - .addPotionEffect(new PotionEffect(Potion.moveSlowdown.getId(), 30 * 20, 1)); - ((EntityLivingBase) entity) - .addPotionEffect(new PotionEffect(Potion.digSlowdown.getId(), 30 * 20, 2)); - } - } - } + public static void pc(World world, double x, double y, double z, double range) { + + List affected = world.getEntitiesWithinAABB(EntityLivingBase.class, AxisAlignedBB.getBoundingBox(x - range, y - range, z - range, x + range, y + range, z + range)); + + for(EntityLivingBase entity : affected) { + + if(entity.getDistance(x, y, z) > range) + continue; + + ArmorUtil.damageSuit(entity, 0, 25); + ArmorUtil.damageSuit(entity, 1, 25); + ArmorUtil.damageSuit(entity, 2, 25); + ArmorUtil.damageSuit(entity, 3, 25); + entity.attackEntityFrom(ModDamageSource.pc, 5); } - - bombStartStrength = (int) f; } - public static void pc(World world, int x, int y, int z, int bombStartStrength) { - float f = bombStartStrength; - int i; - int j; - int k; - double d5; - double d6; - double d7; - double wat = bombStartStrength * 2; - - bombStartStrength *= 2.0F; - i = MathHelper.floor_double(x - wat - 1.0D); - j = MathHelper.floor_double(x + wat + 1.0D); - k = MathHelper.floor_double(y - wat - 1.0D); - int i2 = MathHelper.floor_double(y + wat + 1.0D); - int l = MathHelper.floor_double(z - wat - 1.0D); - int j2 = MathHelper.floor_double(z + wat + 1.0D); - List list = world.getEntitiesWithinAABBExcludingEntity(null, AxisAlignedBB.getBoundingBox(i, k, l, j, i2, j2)); - - for (int i1 = 0; i1 < list.size(); ++i1) { - Entity entity = (Entity) list.get(i1); - double d4 = entity.getDistance(x, y, z) / bombStartStrength; - - if (d4 <= 1.0D) { - d5 = entity.posX - x; - d6 = entity.posY + entity.getEyeHeight() - y; - d7 = entity.posZ - z; - double d9 = MathHelper.sqrt_double(d5 * d5 + d6 * d6 + d7 * d7); - if (d9 < wat) { - - if (entity instanceof EntityPlayer) { - - ArmorUtil.damageSuit((EntityPlayer)entity, 0, 25); - ArmorUtil.damageSuit((EntityPlayer)entity, 1, 25); - ArmorUtil.damageSuit((EntityPlayer)entity, 2, 25); - ArmorUtil.damageSuit((EntityPlayer)entity, 3, 25); - - } - - entity.attackEntityFrom(ModDamageSource.pc, 5); - } + public static void c(World world, double x, double y, double z, double range) { + + List affected = world.getEntitiesWithinAABB(EntityLivingBase.class, AxisAlignedBB.getBoundingBox(x - range, y - range, z - range, x + range, y + range, z + range)); + + for(EntityLivingBase entity : affected) { + + if(entity.getDistance(x, y, z) > range) + continue; + + ArmorUtil.damageSuit(entity, 0, 25); + ArmorUtil.damageSuit(entity, 1, 25); + ArmorUtil.damageSuit(entity, 2, 25); + ArmorUtil.damageSuit(entity, 3, 25); + + if(ArmorUtil.checkForHazmat(entity)) + continue; + + if(entity.isPotionActive(HbmPotion.taint.id)) { + entity.removePotionEffect(HbmPotion.taint.id); + entity.addPotionEffect(new PotionEffect(HbmPotion.mutation.id, 1 * 60 * 60 * 20, 0, false)); } + + entity.attackEntityFrom(ModDamageSource.cloud, 5); } - - bombStartStrength = (int) f; - } - - public static void c(World world, int x, int y, int z, int bombStartStrength) { - float f = bombStartStrength; - int i; - int j; - int k; - double d5; - double d6; - double d7; - double wat = bombStartStrength * 2; - - bombStartStrength *= 2.0F; - i = MathHelper.floor_double(x - wat - 1.0D); - j = MathHelper.floor_double(x + wat + 1.0D); - k = MathHelper.floor_double(y - wat - 1.0D); - int i2 = MathHelper.floor_double(y + wat + 1.0D); - int l = MathHelper.floor_double(z - wat - 1.0D); - int j2 = MathHelper.floor_double(z + wat + 1.0D); - List list = world.getEntitiesWithinAABBExcludingEntity(null, AxisAlignedBB.getBoundingBox(i, k, l, j, i2, j2)); - - for (int i1 = 0; i1 < list.size(); ++i1) { - Entity entity = (Entity) list.get(i1); - double d4 = entity.getDistance(x, y, z) / bombStartStrength; - - if (d4 <= 1.0D) { - d5 = entity.posX - x; - d6 = entity.posY + entity.getEyeHeight() - y; - d7 = entity.posZ - z; - double d9 = MathHelper.sqrt_double(d5 * d5 + d6 * d6 + d7 * d7); - if (d9 < wat) { - - if (entity instanceof EntityPlayer) { - - ArmorUtil.damageSuit((EntityPlayer)entity, 0, 5); - ArmorUtil.damageSuit((EntityPlayer)entity, 1, 5); - ArmorUtil.damageSuit((EntityPlayer)entity, 2, 5); - ArmorUtil.damageSuit((EntityPlayer)entity, 3, 5); - - } - - if (entity instanceof EntityPlayer && ArmorUtil.checkForHazmat((EntityPlayer) entity)) { } else { - - if(entity instanceof EntityLivingBase && ((EntityLivingBase)entity).isPotionActive(HbmPotion.taint.id)) { - ((EntityLivingBase)entity).removePotionEffect(HbmPotion.taint.id); - ((EntityLivingBase)entity).addPotionEffect(new PotionEffect(HbmPotion.mutation.id, 1 * 60 * 60 * 20, 0, false)); - } else { - entity.attackEntityFrom(ModDamageSource.cloud, 3); - } - } - } - } - } - - bombStartStrength = (int) f; } public static void floater(World world, int x, int y, int z, int radi, int height) { @@ -927,98 +760,6 @@ public class ExplosionChaos { radius = (int) f; } - public static void mirv(World world, double x, double y, double z) { - double modifier = 2.5; - double zeta = Math.sqrt(2) / 2; - EntityMIRV mirv1 = new EntityMIRV(world); - EntityMIRV mirv2 = new EntityMIRV(world); - EntityMIRV mirv3 = new EntityMIRV(world); - EntityMIRV mirv4 = new EntityMIRV(world); - // double vx1 = rand.nextDouble(); - // double vy1 = rand.nextDouble() * -1; - // double vz1 = Math.sqrt(Math.pow(1, 2) - Math.pow(vx1, 2)); - double vx1 = 1; - double vy1 = rand.nextDouble() * -1; - double vz1 = 0; - - mirv1.posX = x; - mirv1.posY = y; - mirv1.posZ = z; - mirv1.motionY = vy1; - mirv2.posX = x; - mirv2.posY = y; - mirv2.posZ = z; - mirv2.motionY = vy1; - mirv3.posX = x; - mirv3.posY = y; - mirv3.posZ = z; - mirv3.motionY = vy1; - mirv4.posX = x; - mirv4.posY = y; - mirv4.posZ = z; - mirv4.motionY = vy1; - - mirv1.motionX = vx1 * modifier; - mirv1.motionZ = vz1 * modifier; - world.spawnEntityInWorld(mirv1); - - mirv2.motionX = -vz1 * modifier; - mirv2.motionZ = vx1 * modifier; - world.spawnEntityInWorld(mirv2); - - mirv3.motionX = -vx1 * modifier; - mirv3.motionZ = -vz1 * modifier; - world.spawnEntityInWorld(mirv3); - - mirv4.motionX = vz1 * modifier; - mirv4.motionZ = -vx1 * modifier; - world.spawnEntityInWorld(mirv4); - - EntityMIRV mirv5 = new EntityMIRV(world); - EntityMIRV mirv6 = new EntityMIRV(world); - EntityMIRV mirv7 = new EntityMIRV(world); - EntityMIRV mirv8 = new EntityMIRV(world); - // double vx2 = vx1 < theta ? vx1 + theta : vx1 - theta; - // double vy2 = vy1; - // double vz2 = Math.sqrt(Math.pow(1, 2) - Math.pow(vx2, 2)); - double vx2 = zeta; - double vy2 = vy1; - double vz2 = zeta; - - mirv5.posX = x; - mirv5.posY = y; - mirv5.posZ = z; - mirv5.motionY = vy2; - mirv6.posX = x; - mirv6.posY = y; - mirv6.posZ = z; - mirv6.motionY = vy2; - mirv7.posX = x; - mirv7.posY = y; - mirv7.posZ = z; - mirv7.motionY = vy2; - mirv8.posX = x; - mirv8.posY = y; - mirv8.posZ = z; - mirv8.motionY = vy2; - - mirv5.motionX = vx2 * modifier; - mirv5.motionZ = vz2 * modifier; - world.spawnEntityInWorld(mirv5); - - mirv6.motionX = -vz2 * modifier; - mirv6.motionZ = vx2 * modifier; - world.spawnEntityInWorld(mirv6); - - mirv7.motionX = -vx2 * modifier; - mirv7.motionZ = -vz2 * modifier; - world.spawnEntityInWorld(mirv7); - - mirv8.motionX = vz2 * modifier; - mirv8.motionZ = -vx2 * modifier; - world.spawnEntityInWorld(mirv8); - } - public static void plasma(World world, int x, int y, int z, int radius) { int r = radius; int r2 = r * r; diff --git a/src/main/java/com/hbm/handler/EntityEffectHandler.java b/src/main/java/com/hbm/handler/EntityEffectHandler.java index 9eaf602b6..ab1dc9504 100644 --- a/src/main/java/com/hbm/handler/EntityEffectHandler.java +++ b/src/main/java/com/hbm/handler/EntityEffectHandler.java @@ -324,6 +324,19 @@ public class EntityEffectHandler { if(entity.worldObj.isRemote) return; + + if(entity instanceof EntityPlayer && ((EntityPlayer) entity).capabilities.isCreativeMode) { + HbmLivingProps.setBlackLung(entity, 0); + HbmLivingProps.setAsbestos(entity, 0); + + return; + } else { + + int bl = HbmLivingProps.getBlackLung(entity); + + if(bl > 0 && bl < HbmLivingProps.maxBlacklung * 0.25) + HbmLivingProps.setBlackLung(entity, HbmLivingProps.getBlackLung(entity) - 1); + } double blacklung = Math.min(HbmLivingProps.getBlackLung(entity), HbmLivingProps.maxBlacklung); double asbestos = Math.min(HbmLivingProps.getAsbestos(entity), HbmLivingProps.maxAsbestos); diff --git a/src/main/java/com/hbm/handler/guncfg/BulletConfigFactory.java b/src/main/java/com/hbm/handler/guncfg/BulletConfigFactory.java index 356fdbd5e..018821428 100644 --- a/src/main/java/com/hbm/handler/guncfg/BulletConfigFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/BulletConfigFactory.java @@ -15,7 +15,8 @@ import com.hbm.lib.Library; import com.hbm.packet.AuxParticlePacketNT; import com.hbm.packet.PacketDispatcher; import com.hbm.potion.HbmPotion; -import com.hbm.util.ArmorUtil; +import com.hbm.util.ArmorRegistry; +import com.hbm.util.ArmorRegistry.HazardClass; import com.hbm.util.BobMathUtil; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; @@ -355,7 +356,9 @@ public class BulletConfigFactory { if(e instanceof EntityLivingBase) { - if(e instanceof EntityPlayer && ArmorUtil.checkForGasMask((EntityPlayer) e)) + EntityLivingBase entity = (EntityLivingBase) e; + + if(ArmorRegistry.hasAllProtection(entity, 3, HazardClass.GAS_CHLORINE)) continue; PotionEffect eff0 = new PotionEffect(Potion.poison.id, duration, 2, true); @@ -366,10 +369,10 @@ public class BulletConfigFactory { eff1.getCurativeItems().clear(); eff2.getCurativeItems().clear(); eff3.getCurativeItems().clear(); - ((EntityLivingBase)e).addPotionEffect(eff0); - ((EntityLivingBase)e).addPotionEffect(eff1); - ((EntityLivingBase)e).addPotionEffect(eff2); - ((EntityLivingBase)e).addPotionEffect(eff3); + entity.addPotionEffect(eff0); + entity.addPotionEffect(eff1); + entity.addPotionEffect(eff2); + entity.addPotionEffect(eff3); } } } diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index cba396605..a36996a54 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -824,6 +824,9 @@ public class ModItems { public static Item stealth_boy; public static Item gas_mask_filter; public static Item gas_mask_filter_mono; + public static Item gas_mask_filter_combo; + public static Item gas_mask_filter_rag; + public static Item gas_mask_filter_piss; public static Item jetpack_tank; public static Item gun_kit_1; public static Item gun_kit_2; @@ -1870,6 +1873,9 @@ public class ModItems { public static Item gas_mask; public static Item gas_mask_m65; public static Item gas_mask_mono; + public static Item gas_mask_olde; + public static Item mask_rag; + public static Item mask_piss; public static Item oxy_mask; public static Item hat; public static Item beta; @@ -2622,7 +2628,7 @@ public class ModItems { coke = new Item().setUnlocalizedName("coke").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coke"); lignite = new Item().setUnlocalizedName("lignite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":lignite"); briquette_lignite = new Item().setUnlocalizedName("briquette_lignite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":briquette_lignite"); - powder_lignite = new ItemHazard().addCoal(10).toItem().setUnlocalizedName("powder_lignite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_lignite"); + powder_lignite = new ItemHazard().addCoal(3).toItem().setUnlocalizedName("powder_lignite").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_lignite"); coal_infernal = new Item().setUnlocalizedName("coal_infernal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":coal_infernal"); cinnebar = new Item().setUnlocalizedName("cinnebar").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":cinnebar"); @@ -2678,7 +2684,7 @@ public class ModItems { hazmat_cloth_red = new Item().setUnlocalizedName("hazmat_cloth_red").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":hazmat_cloth_red"); hazmat_cloth_grey = new Item().setUnlocalizedName("hazmat_cloth_grey").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":hazmat_cloth_grey"); asbestos_cloth = new Item().setUnlocalizedName("asbestos_cloth").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":asbestos_cloth"); - rag = new Item().setUnlocalizedName("rag").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":rag"); + rag = new ItemRag().setUnlocalizedName("rag").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":rag"); rag_damp = new Item().setUnlocalizedName("rag_damp").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":rag_damp"); rag_piss = new Item().setUnlocalizedName("rag_piss").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":rag_piss"); filter_coal = new Item().setUnlocalizedName("filter_coal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":filter_coal"); @@ -2746,7 +2752,7 @@ public class ModItems { fallout = new ItemHazard().addRadiation(ItemHazard.fo * ItemHazard.powder).toItem().setUnlocalizedName("fallout").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":fallout"); powder_advanced_alloy = new Item().setUnlocalizedName("powder_advanced_alloy").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_advanced_alloy"); powder_tcalloy = new Item().setUnlocalizedName("powder_tcalloy").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_tcalloy"); - powder_coal = new ItemHazard().addCoal(10).toItem().setUnlocalizedName("powder_coal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_coal"); + powder_coal = new ItemHazard().addCoal(3).toItem().setUnlocalizedName("powder_coal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_coal"); powder_coal_tiny = new ItemHazard().addCoal(1).toItem().setUnlocalizedName("powder_coal_tiny").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_coal_tiny"); powder_combine_steel = new Item().setUnlocalizedName("powder_combine_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_combine_steel"); powder_diamond = new Item().setUnlocalizedName("powder_diamond").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":powder_diamond"); @@ -3160,8 +3166,11 @@ public class ModItems { pill_iodine = new ItemPill(0).setUnlocalizedName("pill_iodine").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":pill_iodine"); plan_c = new ItemPill(0).setUnlocalizedName("plan_c").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":plan_c"); stealth_boy = new ItemStarterKit().setUnlocalizedName("stealth_boy").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":stealth_boy"); - gas_mask_filter = new ItemFilter().setUnlocalizedName("gas_mask_filter").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":gas_mask_filter"); - gas_mask_filter_mono = new ItemFilter().setUnlocalizedName("gas_mask_filter_mono").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":gas_mask_filter_mono"); + gas_mask_filter = new ItemFilter().setUnlocalizedName("gas_mask_filter").setTextureName(RefStrings.MODID + ":gas_mask_filter"); + gas_mask_filter_mono = new ItemFilter().setUnlocalizedName("gas_mask_filter_mono").setTextureName(RefStrings.MODID + ":gas_mask_filter_mono"); + gas_mask_filter_combo = new ItemFilter().setUnlocalizedName("gas_mask_filter_combo").setTextureName(RefStrings.MODID + ":gas_mask_filter_combo"); + gas_mask_filter_rag = new ItemFilter().setUnlocalizedName("gas_mask_filter_rag").setTextureName(RefStrings.MODID + ":gas_mask_filter_rag"); + gas_mask_filter_piss = new ItemFilter().setUnlocalizedName("gas_mask_filter_piss").setTextureName(RefStrings.MODID + ":gas_mask_filter_piss"); jetpack_tank = new ItemSyringe().setUnlocalizedName("jetpack_tank").setMaxStackSize(1).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":jetpack_tank"); gun_kit_1 = new ItemSyringe().setUnlocalizedName("gun_kit_1").setMaxStackSize(16).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":gun_kit_1"); gun_kit_2 = new ItemSyringe().setUnlocalizedName("gun_kit_2").setMaxStackSize(16).setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":gun_kit_2"); @@ -4562,12 +4571,18 @@ public class ModItems { euphemium_plate = new ArmorEuphemium(MainRegistry.aMatEuph, 6, 1).setUnlocalizedName("euphemium_plate").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":euphemium_plate"); euphemium_legs = new ArmorEuphemium(MainRegistry.aMatEuph, 6, 2).setUnlocalizedName("euphemium_legs").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":euphemium_legs"); euphemium_boots = new ArmorEuphemium(MainRegistry.aMatEuph, 6, 3).setUnlocalizedName("euphemium_boots").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":euphemium_boots"); + + ArmorMaterial aMatRags = EnumHelper.addArmorMaterial("HBM_RAGS", 150, new int[] { 1, 1, 1, 1 }, 0); + aMatRags.customCraftingMaterial = ModItems.rag; goggles = new ArmorModel(ArmorMaterial.IRON, 7, 0).setUnlocalizedName("goggles").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":goggles"); ashglasses = new ArmorAshGlasses(ArmorMaterial.IRON, 7, 0).setUnlocalizedName("ashglasses").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ashglasses"); gas_mask = new ArmorGasMask().setUnlocalizedName("gas_mask").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":gas_mask"); gas_mask_m65 = new ArmorGasMask().setUnlocalizedName("gas_mask_m65").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":gas_mask_m65"); gas_mask_mono = new ArmorGasMask().setUnlocalizedName("gas_mask_mono").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":gas_mask_mono"); + gas_mask_olde = new ArmorGasMask().setUnlocalizedName("gas_mask_olde").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":gas_mask_olde"); + mask_rag = new ModArmor(aMatRags, 7, 0).setUnlocalizedName("mask_rag").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":mask_rag"); + mask_piss = new ModArmor(aMatRags, 7, 0).setUnlocalizedName("mask_piss").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":mask_piss"); hat = new ArmorHat(ArmorMaterial.IRON, 7, 0).setUnlocalizedName("nossy_hat").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":hat"); beta = new ItemDrop().setUnlocalizedName("beta").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":beta"); //oxy_mask = new ArmorModel(ArmorMaterial.IRON, 7, 0).setUnlocalizedName("oxy_mask").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":oxy_mask"); @@ -5085,7 +5100,7 @@ public class ModItems { mask_of_infamy = new MaskOfInfamy(ArmorMaterial.IRON, 8, 0).setUnlocalizedName("mask_of_infamy").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":mask_of_infamy"); - hazmat_helmet = new ArmorHazmat(MainRegistry.aMatHaz, 9, 0, RefStrings.MODID + ":textures/armor/hazmat_1.png").setUnlocalizedName("hazmat_helmet").setTextureName(RefStrings.MODID + ":hazmat_helmet"); + hazmat_helmet = new ArmorHazmatMask(MainRegistry.aMatHaz, 9, 0, RefStrings.MODID + ":textures/armor/hazmat_1.png").setUnlocalizedName("hazmat_helmet").setTextureName(RefStrings.MODID + ":hazmat_helmet"); hazmat_plate = new ArmorHazmat(MainRegistry.aMatHaz, 9, 1, RefStrings.MODID + ":textures/armor/hazmat_1.png").setUnlocalizedName("hazmat_plate").setTextureName(RefStrings.MODID + ":hazmat_plate"); hazmat_legs = new ArmorHazmat(MainRegistry.aMatHaz, 9, 2, RefStrings.MODID + ":textures/armor/hazmat_2.png").setUnlocalizedName("hazmat_legs").setTextureName(RefStrings.MODID + ":hazmat_legs"); hazmat_boots = new ArmorHazmat(MainRegistry.aMatHaz, 9, 3, RefStrings.MODID + ":textures/armor/hazmat_1.png").setUnlocalizedName("hazmat_boots").setTextureName(RefStrings.MODID + ":hazmat_boots"); @@ -5098,7 +5113,7 @@ public class ModItems { hazmat_plate_grey = new ArmorHazmat(MainRegistry.aMatHaz3, 9, 1, RefStrings.MODID + ":textures/armor/hazmat_1_grey.png").cloneStats((ArmorFSB) hazmat_helmet_grey).setUnlocalizedName("hazmat_plate_grey").setTextureName(RefStrings.MODID + ":hazmat_plate_grey"); hazmat_legs_grey = new ArmorHazmat(MainRegistry.aMatHaz3, 9, 2, RefStrings.MODID + ":textures/armor/hazmat_2_grey.png").cloneStats((ArmorFSB) hazmat_helmet_grey).setUnlocalizedName("hazmat_legs_grey").setTextureName(RefStrings.MODID + ":hazmat_legs_grey"); hazmat_boots_grey = new ArmorHazmat(MainRegistry.aMatHaz3, 9, 3, RefStrings.MODID + ":textures/armor/hazmat_1_grey.png").cloneStats((ArmorFSB) hazmat_helmet_grey).setUnlocalizedName("hazmat_boots_grey").setTextureName(RefStrings.MODID + ":hazmat_boots_grey"); - hazmat_paa_helmet = new ArmorHazmat(MainRegistry.aMatPaa, 9, 0, RefStrings.MODID + ":textures/armor/hazmat_paa_1.png") + hazmat_paa_helmet = new ArmorHazmatMask(MainRegistry.aMatPaa, 9, 0, RefStrings.MODID + ":textures/armor/hazmat_paa_1.png") .setFireproof(true).setUnlocalizedName("hazmat_paa_helmet").setTextureName(RefStrings.MODID + ":hazmat_paa_helmet"); hazmat_paa_plate = new ArmorHazmat(MainRegistry.aMatPaa, 9, 1, RefStrings.MODID + ":textures/armor/hazmat_paa_1.png").cloneStats((ArmorFSB) hazmat_paa_helmet).setUnlocalizedName("hazmat_paa_plate").setTextureName(RefStrings.MODID + ":hazmat_paa_plate"); hazmat_paa_legs = new ArmorHazmat(MainRegistry.aMatPaa, 9, 2, RefStrings.MODID + ":textures/armor/hazmat_paa_2.png").cloneStats((ArmorFSB) hazmat_paa_helmet).setUnlocalizedName("hazmat_paa_legs").setTextureName(RefStrings.MODID + ":hazmat_paa_legs"); @@ -5106,7 +5121,7 @@ public class ModItems { ArmorMaterial aMatLiquidator = EnumHelper.addArmorMaterial("HBM_LIQUIDATOR", 750, new int[] { 3, 8, 6, 3 }, 10); aMatLiquidator.customCraftingMaterial = ModItems.plate_lead; - liquidator_helmet = new ArmorLiquidator(aMatLiquidator, 9, 0, RefStrings.MODID + ":textures/armor/liquidator_helmet.png") + liquidator_helmet = new ArmorLiquidatorMask(aMatLiquidator, 9, 0, RefStrings.MODID + ":textures/armor/liquidator_helmet.png") .setThreshold(1.0F) .setBlastProtection(0.25F) .setFireproof(true) @@ -7231,6 +7246,9 @@ public class ModItems { GameRegistry.registerItem(stealth_boy, stealth_boy.getUnlocalizedName()); GameRegistry.registerItem(gas_mask_filter, gas_mask_filter.getUnlocalizedName()); GameRegistry.registerItem(gas_mask_filter_mono, gas_mask_filter_mono.getUnlocalizedName()); + GameRegistry.registerItem(gas_mask_filter_combo, gas_mask_filter_combo.getUnlocalizedName()); + GameRegistry.registerItem(gas_mask_filter_rag, gas_mask_filter_rag.getUnlocalizedName()); + GameRegistry.registerItem(gas_mask_filter_piss, gas_mask_filter_piss.getUnlocalizedName()); GameRegistry.registerItem(jetpack_tank, jetpack_tank.getUnlocalizedName()); GameRegistry.registerItem(gun_kit_1, gun_kit_1.getUnlocalizedName()); GameRegistry.registerItem(gun_kit_2, gun_kit_2.getUnlocalizedName()); @@ -7448,6 +7466,9 @@ public class ModItems { GameRegistry.registerItem(gas_mask, gas_mask.getUnlocalizedName()); GameRegistry.registerItem(gas_mask_m65, gas_mask_m65.getUnlocalizedName()); GameRegistry.registerItem(gas_mask_mono, gas_mask_mono.getUnlocalizedName()); + GameRegistry.registerItem(gas_mask_olde, gas_mask_olde.getUnlocalizedName()); + GameRegistry.registerItem(mask_rag, mask_rag.getUnlocalizedName()); + GameRegistry.registerItem(mask_piss, mask_piss.getUnlocalizedName()); //GameRegistry.registerItem(oxy_mask, oxy_mask.getUnlocalizedName()); GameRegistry.registerItem(hat, hat.getUnlocalizedName()); GameRegistry.registerItem(beta, beta.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/armor/ArmorGasMask.java b/src/main/java/com/hbm/items/armor/ArmorGasMask.java index 2e827d32d..c3c103b40 100644 --- a/src/main/java/com/hbm/items/armor/ArmorGasMask.java +++ b/src/main/java/com/hbm/items/armor/ArmorGasMask.java @@ -72,7 +72,7 @@ public class ArmorGasMask extends ItemArmor implements IGasMask { } } - if(this == ModItems.gas_mask_m65 || this == ModItems.gas_mask_mono) { + if(this == ModItems.gas_mask_m65 || this == ModItems.gas_mask_olde || this == ModItems.gas_mask_mono) { if(armorSlot == 0) { if(this.modelM65 == null) { this.modelM65 = new ModelM65(); @@ -93,6 +93,9 @@ public class ArmorGasMask extends ItemArmor implements IGasMask { if(stack.getItem() == ModItems.gas_mask_m65) { return "hbm:textures/models/ModelM65.png"; } + if(stack.getItem() == ModItems.gas_mask_olde) { + return "hbm:textures/armor/mask_olde.png"; + } if(stack.getItem() == ModItems.gas_mask_mono) { return "hbm:textures/models/ModelM65Mono.png"; } @@ -140,12 +143,12 @@ public class ArmorGasMask extends ItemArmor implements IGasMask { } @Override - public List getBlacklist(ItemStack stack, EntityLivingBase entity) { + public ArrayList getBlacklist(ItemStack stack, EntityLivingBase entity) { if(this == ModItems.gas_mask_mono) { - return Arrays.asList(new HazardClass[] {HazardClass.GAS_CHLORINE, HazardClass.GAS_CORROSIVE, HazardClass.NERVE_AGENT, HazardClass.BACTERIA}); + return new ArrayList(Arrays.asList(new HazardClass[] {HazardClass.GAS_CHLORINE, HazardClass.GAS_CORROSIVE, HazardClass.NERVE_AGENT, HazardClass.BACTERIA})); } else { - return Arrays.asList(new HazardClass[] {HazardClass.GAS_CORROSIVE, HazardClass.NERVE_AGENT}); + return new ArrayList(Arrays.asList(new HazardClass[] {HazardClass.GAS_CORROSIVE, HazardClass.NERVE_AGENT})); } } diff --git a/src/main/java/com/hbm/items/armor/ArmorHazmatMask.java b/src/main/java/com/hbm/items/armor/ArmorHazmatMask.java index ad850dc9c..7d4e61e12 100644 --- a/src/main/java/com/hbm/items/armor/ArmorHazmatMask.java +++ b/src/main/java/com/hbm/items/armor/ArmorHazmatMask.java @@ -3,6 +3,7 @@ package com.hbm.items.armor; import java.util.ArrayList; import java.util.List; +import com.hbm.items.ModItems; import com.hbm.render.model.ModelM65; import com.hbm.util.ArmorRegistry.HazardClass; import com.hbm.util.ArmorUtil; @@ -28,7 +29,7 @@ public class ArmorHazmatMask extends ArmorHazmat implements IGasMask { @SideOnly(Side.CLIENT) public ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, int armorSlot) { - if (armorSlot == 0) { + if(this == ModItems.hazmat_helmet_red || this == ModItems.hazmat_helmet_grey) { if (this.modelM65 == null) { this.modelM65 = new ModelM65(); } @@ -39,7 +40,7 @@ public class ArmorHazmatMask extends ArmorHazmat implements IGasMask { } @Override - public List getBlacklist(ItemStack stack, EntityLivingBase entity) { + public ArrayList getBlacklist(ItemStack stack, EntityLivingBase entity) { return new ArrayList(); // full hood has no restrictions } diff --git a/src/main/java/com/hbm/items/armor/ArmorLiquidatorMask.java b/src/main/java/com/hbm/items/armor/ArmorLiquidatorMask.java new file mode 100644 index 000000000..c99ae83e1 --- /dev/null +++ b/src/main/java/com/hbm/items/armor/ArmorLiquidatorMask.java @@ -0,0 +1,51 @@ +package com.hbm.items.armor; + +import java.util.ArrayList; +import java.util.List; + +import com.hbm.util.ArmorUtil; +import com.hbm.util.ArmorRegistry.HazardClass; + +import api.hbm.item.IGasMask; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; + +public class ArmorLiquidatorMask extends ArmorLiquidator implements IGasMask { + + public ArmorLiquidatorMask(ArmorMaterial material, int layer, int slot, String texture) { + super(material, layer, slot, texture); + } + + @Override + public ArrayList getBlacklist(ItemStack stack, EntityLivingBase entity) { + return new ArrayList(); // full hood has no restrictions + } + + @Override + public ItemStack getFilter(ItemStack stack, EntityLivingBase entity) { + return ArmorUtil.getGasMaskFilter(stack); + } + + @Override + public void installFilter(ItemStack stack, EntityLivingBase entity, ItemStack filter) { + ArmorUtil.installGasMaskFilter(stack, filter); + } + + @Override + public void damageFilter(ItemStack stack, EntityLivingBase entity, int damage) { + ArmorUtil.damageGasMaskFilter(stack, damage); + } + + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + ArmorUtil.addGasMaskTooltip(stack, player, list, ext); + } + + @Override + public boolean isFilterApplicable(ItemStack stack, EntityLivingBase entity, ItemStack filter) { + return true; + } +} diff --git a/src/main/java/com/hbm/items/armor/ArmorModel.java b/src/main/java/com/hbm/items/armor/ArmorModel.java index ce142d1b6..3703eff81 100644 --- a/src/main/java/com/hbm/items/armor/ArmorModel.java +++ b/src/main/java/com/hbm/items/armor/ArmorModel.java @@ -118,7 +118,7 @@ public class ArmorModel extends ItemArmor { @SideOnly(Side.CLIENT) public void renderHelmetOverlay(ItemStack stack, EntityPlayer player, ScaledResolution resolution, float partialTicks, boolean hasScreen, int mouseX, int mouseY){ - if(this != ModItems.goggles && this != ModItems.gas_mask && this != ModItems.gas_mask_m65 && this != ModItems.hazmat_helmet_red && this != ModItems.hazmat_helmet_grey) + if(this != ModItems.goggles && this != ModItems.hazmat_helmet_red && this != ModItems.hazmat_helmet_grey) return; GL11.glDisable(GL11.GL_DEPTH_TEST); @@ -126,25 +126,29 @@ public class ArmorModel extends ItemArmor { OpenGlHelper.glBlendFunc(770, 771, 1, 0); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); GL11.glDisable(GL11.GL_ALPHA_TEST); - - if(this == ModItems.hazmat_helmet_red || this == ModItems.hazmat_helmet_grey) { - switch((int)((double)stack.getItemDamage() / (double)stack.getMaxDamage() * 6D)) { - case 0: - Minecraft.getMinecraft().getTextureManager().bindTexture(goggleBlur0); break; - case 1: - Minecraft.getMinecraft().getTextureManager().bindTexture(goggleBlur1); break; - case 2: - Minecraft.getMinecraft().getTextureManager().bindTexture(goggleBlur2); break; - case 3: - Minecraft.getMinecraft().getTextureManager().bindTexture(goggleBlur3); break; - case 4: - Minecraft.getMinecraft().getTextureManager().bindTexture(goggleBlur4); break; - case 5: - Minecraft.getMinecraft().getTextureManager().bindTexture(goggleBlur5); break; - default: - Minecraft.getMinecraft().getTextureManager().bindTexture(goggleBlur5); break; - } - } + switch((int) ((double) stack.getItemDamage() / (double) stack.getMaxDamage() * 6D)) { + case 0: + Minecraft.getMinecraft().getTextureManager().bindTexture(goggleBlur0); + break; + case 1: + Minecraft.getMinecraft().getTextureManager().bindTexture(goggleBlur1); + break; + case 2: + Minecraft.getMinecraft().getTextureManager().bindTexture(goggleBlur2); + break; + case 3: + Minecraft.getMinecraft().getTextureManager().bindTexture(goggleBlur3); + break; + case 4: + Minecraft.getMinecraft().getTextureManager().bindTexture(goggleBlur4); + break; + case 5: + Minecraft.getMinecraft().getTextureManager().bindTexture(goggleBlur5); + break; + default: + Minecraft.getMinecraft().getTextureManager().bindTexture(goggleBlur5); + break; + } Tessellator tessellator = Tessellator.instance; tessellator.startDrawingQuads(); diff --git a/src/main/java/com/hbm/items/armor/ItemModGasmask.java b/src/main/java/com/hbm/items/armor/ItemModGasmask.java index 37dbcdad2..2fa405c47 100644 --- a/src/main/java/com/hbm/items/armor/ItemModGasmask.java +++ b/src/main/java/com/hbm/items/armor/ItemModGasmask.java @@ -1,16 +1,23 @@ package com.hbm.items.armor; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import com.hbm.handler.ArmorModHandler; import com.hbm.items.ModItems; import com.hbm.render.model.ModelM65; +import com.hbm.util.ArmorUtil; +import com.hbm.util.I18nUtil; +import com.hbm.util.ArmorRegistry.HazardClass; +import api.hbm.item.IGasMask; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.Minecraft; import net.minecraft.client.model.ModelBiped; import net.minecraft.client.renderer.entity.RenderPlayer; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; @@ -18,7 +25,7 @@ import net.minecraft.util.MathHelper; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.event.RenderPlayerEvent; -public class ItemModGasmask extends ItemArmorMod { +public class ItemModGasmask extends ItemArmorMod implements IGasMask { private ModelM65 modelM65; private ResourceLocation tex = new ResourceLocation("hbm:textures/models/ModelM65.png"); @@ -27,26 +34,31 @@ public class ItemModGasmask extends ItemArmorMod { public ItemModGasmask() { super(ArmorModHandler.helmet_only, true, false, false, false); } - + @Override - public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { - - if(this == ModItems.attachment_mask) - list.add(EnumChatFormatting.GREEN + "Gas protection"); - if(this == ModItems.attachment_mask_mono) - list.add(EnumChatFormatting.GREEN + "Carbon monoxide protection"); + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + + list.add(EnumChatFormatting.GREEN + "Gas protection"); list.add(""); - super.addInformation(itemstack, player, list, bool); + super.addInformation(stack, player, list, bool); + + ArmorUtil.addGasMaskTooltip(stack, player, list, bool); + + List haz = getBlacklist(stack, player); + + if(!haz.isEmpty()) { + list.add(EnumChatFormatting.RED + "Will never protect against:"); + + for(HazardClass clazz : haz) { + list.add(EnumChatFormatting.DARK_RED + " -" + I18nUtil.resolveKey(clazz.lang)); + } + } } @Override public void addDesc(List list, ItemStack stack, ItemStack armor) { - - if(this == ModItems.attachment_mask) - list.add(EnumChatFormatting.GREEN + " " + stack.getDisplayName() + " (gas protection)"); - if(this == ModItems.attachment_mask_mono) - list.add(EnumChatFormatting.GREEN + " " + stack.getDisplayName() + " (carbon monoxide protection)"); + list.add(EnumChatFormatting.GREEN + " " + stack.getDisplayName() + " (gas protection)"); } @Override @@ -78,4 +90,33 @@ public class ItemModGasmask extends ItemArmorMod { modelM65.render(event.entityPlayer, 0.0F, 0.0F, yawWrapped, yaw, pitch, 0.0625F); } + @Override + public ArrayList getBlacklist(ItemStack stack, EntityLivingBase entity) { + + if(this == ModItems.attachment_mask_mono) { + return new ArrayList(Arrays.asList(new HazardClass[] {HazardClass.GAS_CHLORINE, HazardClass.GAS_CORROSIVE, HazardClass.NERVE_AGENT, HazardClass.BACTERIA})); + } else { + return new ArrayList(Arrays.asList(new HazardClass[] {HazardClass.GAS_CORROSIVE, HazardClass.NERVE_AGENT})); + } + } + + @Override + public ItemStack getFilter(ItemStack stack, EntityLivingBase entity) { + return ArmorUtil.getGasMaskFilter(stack); + } + + @Override + public void installFilter(ItemStack stack, EntityLivingBase entity, ItemStack filter) { + ArmorUtil.installGasMaskFilter(stack, filter); + } + + @Override + public void damageFilter(ItemStack stack, EntityLivingBase entity, int damage) { + ArmorUtil.damageGasMaskFilter(stack, damage); + } + + @Override + public boolean isFilterApplicable(ItemStack stack, EntityLivingBase entity, ItemStack filter) { + return true; + } } diff --git a/src/main/java/com/hbm/items/armor/ModArmor.java b/src/main/java/com/hbm/items/armor/ModArmor.java index d62eac910..56c42ef64 100644 --- a/src/main/java/com/hbm/items/armor/ModArmor.java +++ b/src/main/java/com/hbm/items/armor/ModArmor.java @@ -63,6 +63,12 @@ public class ModArmor extends ItemArmor { if(stack.getItem().equals(ModItems.security_legs)) { return (RefStrings.MODID + ":textures/armor/security_2.png"); } + if(stack.getItem().equals(ModItems.mask_rag)) { + return (RefStrings.MODID + ":textures/armor/rag_damp.png"); + } + if(stack.getItem().equals(ModItems.mask_piss)) { + return (RefStrings.MODID + ":textures/armor/rag_piss.png"); + } else return null; } diff --git a/src/main/java/com/hbm/items/food/ItemPill.java b/src/main/java/com/hbm/items/food/ItemPill.java index dc241935d..e0668ebdf 100644 --- a/src/main/java/com/hbm/items/food/ItemPill.java +++ b/src/main/java/com/hbm/items/food/ItemPill.java @@ -54,6 +54,7 @@ public class ItemPill extends ItemFood { if(this == ModItems.siox) { HbmLivingProps.setAsbestos(player, 0); + HbmLivingProps.setBlackLung(player, Math.min(HbmLivingProps.getBlackLung(player), HbmLivingProps.maxBlacklung / 5)); } if(this == ModItems.xanax) { diff --git a/src/main/java/com/hbm/items/special/ItemRag.java b/src/main/java/com/hbm/items/special/ItemRag.java new file mode 100644 index 000000000..bb883f6eb --- /dev/null +++ b/src/main/java/com/hbm/items/special/ItemRag.java @@ -0,0 +1,45 @@ +package com.hbm.items.special; + +import java.util.List; + +import com.hbm.items.ModItems; + +import net.minecraft.block.material.Material; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public class ItemRag extends Item { + + @Override + public boolean onEntityItemUpdate(EntityItem entityItem) { + + if(entityItem != null && !entityItem.worldObj.isRemote) { + + if(entityItem.worldObj.getBlock((int)Math.floor(entityItem.posX), (int)Math.floor(entityItem.posY), (int)Math.floor(entityItem.posZ)).getMaterial() == Material.water) { + ItemStack stack = entityItem.getEntityItem(); + entityItem.setEntityItemStack(new ItemStack(ModItems.rag_damp, stack.stackSize)); + return true; + } + } + + return false; + } + + @Override + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { + + stack.stackSize--; + player.inventory.addItemStackToInventory(new ItemStack(ModItems.rag_piss)); + + return stack; + } + + @Override + public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { + list.add("Drop into water to make damp cloth."); + list.add("Right-click to urinate on the cloth."); + } +} diff --git a/src/main/java/com/hbm/items/tool/ItemFilter.java b/src/main/java/com/hbm/items/tool/ItemFilter.java index 3abd3a1eb..a9919349d 100644 --- a/src/main/java/com/hbm/items/tool/ItemFilter.java +++ b/src/main/java/com/hbm/items/tool/ItemFilter.java @@ -1,5 +1,7 @@ package com.hbm.items.tool; +import com.hbm.handler.ArmorModHandler; +import com.hbm.main.MainRegistry; import com.hbm.util.ArmorUtil; import api.hbm.item.IGasMask; @@ -10,6 +12,12 @@ import net.minecraft.world.World; public class ItemFilter extends Item { + public ItemFilter() { + this.setMaxDamage(20000); + this.setCreativeTab(MainRegistry.consumableTab); + this.setMaxStackSize(1); + } + @Override public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { @@ -18,26 +26,47 @@ public class ItemFilter extends Item { if(helmet == null) return stack; - if(!(helmet.getItem() instanceof IGasMask)) - return stack; + if(!(helmet.getItem() instanceof IGasMask)) { + + if(ArmorModHandler.hasMods(helmet)) { + ItemStack[] mods = ArmorModHandler.pryMods(helmet); + + if(mods[ArmorModHandler.helmet_only] != null) { + ItemStack mask = mods[ArmorModHandler.helmet_only]; + + ItemStack ret = installFilterOn(mask, stack, world, player); + ArmorModHandler.applyMod(helmet, mask); + return ret; + } + } + } + + return installFilterOn(helmet, stack, world, player); + } + + private ItemStack installFilterOn(ItemStack helmet, ItemStack filter, World world, EntityPlayer player) { + + if(!(helmet.getItem() instanceof IGasMask)) { + return filter; + } IGasMask mask = (IGasMask) helmet.getItem(); - if(!mask.isFilterApplicable(helmet, player, stack)) - return stack; + if(!mask.isFilterApplicable(helmet, player, filter)) + return filter; - ItemStack copy = stack.copy(); + ItemStack copy = filter.copy(); ItemStack current = ArmorUtil.getGasMaskFilter(helmet); if(current != null) { - stack = current; + filter = current; } else { - stack.stackSize = 0; + filter.stackSize = 0; } ArmorUtil.installGasMaskFilter(helmet, copy); world.playSoundAtEntity(player, "hbm:item.gasmaskScrew", 1.0F, 1.0F); - return stack; + return filter; } } diff --git a/src/main/java/com/hbm/lib/HbmWorldGen.java b/src/main/java/com/hbm/lib/HbmWorldGen.java index 544f63d26..3ad76fcee 100644 --- a/src/main/java/com/hbm/lib/HbmWorldGen.java +++ b/src/main/java/com/hbm/lib/HbmWorldGen.java @@ -101,6 +101,9 @@ public class HbmWorldGen implements IWorldGenerator { if(WorldConfig.gasbubbleSpawn > 0 && rand.nextInt(WorldConfig.gasbubbleSpawn) == 0) DungeonToolbox.generateOre(world, rand, i, j, 1, 32, 30, 10, ModBlocks.gas_flammable); + if(WorldConfig.explosivebubbleSpawn > 0 && rand.nextInt(WorldConfig.explosivebubbleSpawn) == 0) + DungeonToolbox.generateOre(world, rand, i, j, 1, 32, 30, 10, ModBlocks.gas_explosive); + DepthDeposit.generateConditionOverworld(world, i, 0, 3, j, 5, 0.6D, ModBlocks.cluster_depth_iron, rand, 24); DepthDeposit.generateConditionOverworld(world, i, 0, 3, j, 5, 0.6D, ModBlocks.cluster_depth_titanium, rand, 32); DepthDeposit.generateConditionOverworld(world, i, 0, 3, j, 5, 0.6D, ModBlocks.cluster_depth_tungsten, rand, 32); @@ -122,8 +125,8 @@ public class HbmWorldGen implements IWorldGenerator { int range = colRange / r; if(randPosX <= colX + range && randPosX >= colX - range && randPosZ <= colZ + range && randPosZ >= colZ - range) { - (new WorldGenMinable(ModBlocks.stone_porous, 16)).generate(world, rand, randPosX, randPosY, randPosZ); (new WorldGenMinable(ModBlocks.ore_coltan, 4)).generate(world, rand, randPosX, randPosY, randPosZ); + //(new WorldGenMinable(ModBlocks.stone_porous, 16)).generate(world, rand, randPosX, randPosY, randPosZ); } } } diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 9abcc4462..1845269a8 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (3976)"; + public static final String VERSION = "1.0.27 BETA (3990)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 1275459a0..c0b29afe1 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -189,6 +189,7 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySolarBoiler.class, new RenderSolarBoiler()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityStorageDrum.class, new RenderStorageDrum()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityChungus.class, new RenderChungus()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityTowerLarge.class, new RenderLargeTower()); //AMS ClientRegistry.bindTileEntitySpecialRenderer(TileEntityAMSBase.class, new RenderAMSBase()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityAMSEmitter.class, new RenderAMSEmitter()); diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index c26f5814f..39b11e5bf 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -9,9 +9,6 @@ import com.hbm.crafting.*; import com.hbm.crafting.handlers.*; import com.hbm.handler.FluidTypeHandler.FluidType; import com.hbm.inventory.OreDictManager; -import com.hbm.inventory.AnvilRecipes.AnvilConstructionRecipe; -import com.hbm.inventory.AnvilRecipes.AnvilOutput; -import com.hbm.inventory.RecipesCommon.OreDictStack; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemBattery; import com.hbm.items.special.ItemHot; @@ -45,7 +42,6 @@ public class CraftingManager { ConsumableRecipes.register(); PowderRecipes.register(); - GameRegistry.addRecipe(new TestCraftingHandler(new ItemStack(ModItems.lignite), new ItemStack(ModItems.powder_coal, 1))); GameRegistry.addRecipe(new RBMKFuelCraftingHandler()); GameRegistry.addRecipe(new MKUCraftingHandler()); } @@ -308,13 +304,17 @@ public class CraftingManager { GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.blades_combine_steel, 1), new Object[] { "PIP", 'P', "plateCMBSteel", 'I', new ItemStack(ModItems.blades_combine_steel, 1, OreDictionary.WILDCARD_VALUE) })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.blades_schrabidium, 1), new Object[] { "PIP", 'P', "plateSchrabidium", 'I', new ItemStack(ModItems.blades_schrabidium, 1, OreDictionary.WILDCARD_VALUE) })); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.stamp_stone_flat, 1), new Object[] { " R ", "III", "SSS", 'R', "dustRedstone", 'I', "ingotBrick", 'S', "stone" })); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.stamp_iron_flat, 1), new Object[] { " R ", "III", "SSS", 'R', "dustRedstone", 'I', "ingotBrick", 'S', "ingotIron" })); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.stamp_steel_flat, 1), new Object[] { " R ", "III", "SSS", 'R', "dustRedstone", 'I', "ingotBrick", 'S', "ingotSteel" })); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.stamp_titanium_flat, 1), new Object[] { " R ", "III", "SSS", 'R', "dustRedstone", 'I', "ingotBrick", 'S', "ingotTitanium" })); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.stamp_obsidian_flat, 1), new Object[] { " R ", "III", "SSS", 'R', "dustRedstone", 'I', "ingotBrick", 'S', Blocks.obsidian })); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.stamp_schrabidium_flat, 1), new Object[] { " R ", "III", "SSS", 'R', "dustRedstone", 'I', "ingotBrick", 'S', "ingotSchrabidium" })); - + Item[] bricks = new Item[] {Items.brick, Items.netherbrick}; + + for(Item brick : bricks) { + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.stamp_stone_flat, 1), new Object[] { " R ", "III", "SSS", 'R', "dustRedstone", 'I', brick, 'S', "stone" })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.stamp_iron_flat, 1), new Object[] { " R ", "III", "SSS", 'R', "dustRedstone", 'I', brick, 'S', "ingotIron" })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.stamp_steel_flat, 1), new Object[] { " R ", "III", "SSS", 'R', "dustRedstone", 'I', brick, 'S', "ingotSteel" })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.stamp_titanium_flat, 1), new Object[] { " R ", "III", "SSS", 'R', "dustRedstone", 'I', brick, 'S', "ingotTitanium" })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.stamp_obsidian_flat, 1), new Object[] { " R ", "III", "SSS", 'R', "dustRedstone", 'I', brick, 'S', Blocks.obsidian })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.stamp_schrabidium_flat, 1), new Object[] { " R ", "III", "SSS", 'R', "dustRedstone", 'I', brick, 'S', "ingotSchrabidium" })); + } + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.mechanism_revolver_1, 1), new Object[] { " II", "ICA", "IKW", 'I', "plateIron", 'C', "ingotCopper", 'A', "ingotAluminum", 'K', ModItems.wire_copper, 'W', ModItems.wire_aluminium })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.mechanism_revolver_2, 1), new Object[] { " II", "ICA", "IKW", 'I', "plateAdvanced", 'C', "ingotDuraSteel", 'A', "ingotTungsten", 'K', ModItems.bolt_dura_steel, 'W', ModItems.bolt_tungsten })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.mechanism_rifle_1, 1), new Object[] { "ICI", "CMA", "IAM", 'I', "plateIron", 'C', "ingotCopper", 'A', "ingotAluminum", 'M', ModItems.mechanism_revolver_1 })); @@ -491,10 +491,8 @@ public class CraftingManager { GameRegistry.addRecipe(new ItemStack(ModItems.battery_sc_americium), new Object[] { "NBN", "PCP", "NBN", 'N', ModItems.nugget_tantalium, 'B', ModItems.billet_am241, 'P', ModItems.ingot_polymer, 'C', ModItems.battery_sc_gold }); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.wiring_red_copper, 1), new Object[] { "PPP", "PIP", "PPP", 'P', "plateSteel", 'I', "ingotSteel" })); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.tank_waste, 1), new Object[] { "PTP", "PTP", "PTP", 'T', ModItems.tank_steel, 'P', "plateSteel" })); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.gas_mask_filter, 1), new Object[] { "F", "I", "F", 'F', ModItems.filter_coal, 'I', "plateIron" })); - GameRegistry.addRecipe(new ItemStack(ModItems.gas_mask_filter_mono, 1), new Object[] { "ZZZ", "ZCZ", "ZZZ", 'Z', ModItems.nugget_zirconium, 'C', ModItems.catalyst_clay }); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.jetpack_tank, 1), new Object[] { " S ", "BKB", " S ", 'S', "plateSteel", 'B', ModItems.bolt_tungsten, 'K', ModItems.canister_kerosene })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.gun_kit_1, 4), new Object[] { "I ", "LB", "P ", 'I', ModItems.plate_polymer, 'L', ModItems.canister_canola, 'B', ModItems.bolt_tungsten, 'P', "plateIron" })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.gun_kit_2, 1), new Object[] { "III", "GLG", "PPP", 'I', ModItems.plate_polymer, 'L', ModItems.ducttape, 'G', ModItems.gun_kit_1, 'P', "plateIron" })); @@ -811,6 +809,9 @@ public class CraftingManager { GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(Items.name_tag), new Object[] { "SB ", "BPB", " BP", 'S', Items.string, 'B', "slimeball", 'P', Items.paper })); GameRegistry.addRecipe(new ItemStack(Items.name_tag), new Object[] { "SB ", "BPB", " BP", 'S', Items.string, 'B', ModItems.oil_tar, 'P', Items.paper }); + GameRegistry.addRecipe(new ItemStack(ModItems.rag, 4), new Object[] { "SW", "WS", 'S', Items.string, 'W', Blocks.wool }); + + GameRegistry.addRecipe(new ItemStack(ModBlocks.machine_tower_large), new Object[] { "C C", "C C", "CCC", 'C', ModBlocks.concrete_smooth }); if(GeneralConfig.enableBabyMode) { GameRegistry.addShapelessRecipe(new ItemStack(ModItems.cordite, 3), new Object[] { ModItems.ballistite, Items.gunpowder, new ItemStack(Blocks.wool, 1, OreDictionary.WILDCARD_VALUE) }); @@ -973,6 +974,8 @@ public class CraftingManager { GameRegistry.addSmelting(ModItems.combine_scrap, new ItemStack(ModItems.ingot_combine_steel), 1.0F); GameRegistry.addSmelting(ModItems.tank_waste, new ItemStack(ModItems.tank_waste), 0.0F); + GameRegistry.addSmelting(ModItems.rag_damp, new ItemStack(ModItems.rag), 0.1F); + GameRegistry.addSmelting(ModItems.rag_piss, new ItemStack(ModItems.rag), 0.1F); GameRegistry.addSmelting(Items.bone, new ItemStack(Items.slime_ball, 3), 0.0F); GameRegistry.addSmelting(new ItemStack(Items.dye, 1, 15), new ItemStack(Items.slime_ball, 1), 0.0F); diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index 58742d2e1..cf1976d56 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -345,14 +345,14 @@ public class ModEventHandler { EntityLivingBase entity = event.entityLiving; World world = event.world; - if(!MobConfig.enableMobGear || entity.isChild()) + if(!MobConfig.enableMobGear || entity.isChild() || world.isRemote) return; if(entity instanceof EntityZombie) { if(rand.nextInt(64) == 0) entity.setCurrentItemOrArmor(4, new ItemStack(ModItems.gas_mask_m65, 1, world.rand.nextInt(100))); if(rand.nextInt(128) == 0) - entity.setCurrentItemOrArmor(4, new ItemStack(ModItems.gas_mask, 1, world.rand.nextInt(100))); + entity.setCurrentItemOrArmor(4, new ItemStack(ModItems.gas_mask_olde, 1, world.rand.nextInt(100))); if(rand.nextInt(256) == 0) entity.setCurrentItemOrArmor(4, new ItemStack(ModItems.mask_of_infamy, 1, world.rand.nextInt(100))); if(rand.nextInt(1024) == 0) @@ -378,13 +378,10 @@ public class ModEventHandler { entity.setCurrentItemOrArmor(0, new ItemStack(ModItems.chernobylsign)); } if(entity instanceof EntitySkeleton) { - if(rand.nextInt(16) == 0) { + if(rand.nextInt(16) == 0) entity.setCurrentItemOrArmor(4, new ItemStack(ModItems.gas_mask_m65, 1, world.rand.nextInt(100))); - - if(rand.nextInt(32) == 0) { - entity.setCurrentItemOrArmor(0, new ItemStack(ModItems.syringe_poison)); - } - } + if(rand.nextInt(64) == 0) + entity.setCurrentItemOrArmor(3, new ItemStack(ModItems.steel_plate, 1, world.rand.nextInt(ModItems.steel_plate.getMaxDamage()))); } } @@ -1063,7 +1060,7 @@ public class ModEventHandler { event.setExpToDrop(500); } - if(event.block == Blocks.coal_ore || event.block == ModBlocks.ore_lignite) { + if(event.block == Blocks.coal_ore || event.block == Blocks.coal_block || event.block == ModBlocks.ore_lignite) { for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index 544946cdf..3242f82bb 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -469,9 +469,17 @@ public class ModEventHandlerClient { List hazInfo = ArmorRegistry.hazardClasses.get(stack.getItem()); if(hazInfo != null) { - list.add(EnumChatFormatting.GOLD + I18nUtil.resolveKey("hazard.prot")); - for(HazardClass clazz : hazInfo) { - list.add(EnumChatFormatting.YELLOW + " " + I18nUtil.resolveKey(clazz.lang)); + + if(Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)) { + list.add(EnumChatFormatting.GOLD + I18nUtil.resolveKey("hazard.prot")); + for(HazardClass clazz : hazInfo) { + list.add(EnumChatFormatting.YELLOW + " " + I18nUtil.resolveKey(clazz.lang)); + } + } else { + + list.add(EnumChatFormatting.DARK_GRAY + "" + EnumChatFormatting.ITALIC +"Hold <" + + EnumChatFormatting.YELLOW + "" + EnumChatFormatting.ITALIC + "LSHIFT" + + EnumChatFormatting.DARK_GRAY + "" + EnumChatFormatting.ITALIC + "> to display protection info"); } } diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 9557b1d30..8ed3630c8 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -87,6 +87,9 @@ public class ResourceManager { public static final IModelCustom turbine = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/turbine.obj")); public static final IModelCustom chungus = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/chungus.obj")); + //Cooling Tower + public static final IModelCustom tower_large = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/tower_large.obj")); + //IGen public static final IModelCustom igen = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/igen.obj")); @@ -349,6 +352,9 @@ public class ResourceManager { public static final ResourceLocation turbine_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/turbine.png"); public static final ResourceLocation chungus_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/chungus.png"); + //Cooling Tower + public static final ResourceLocation tower_large_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/tower_large.png"); + //IGen public static final ResourceLocation igen_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/igen.png"); public static final ResourceLocation igen_rotor = new ResourceLocation(RefStrings.MODID, "textures/models/machines/igen_rotor.png"); diff --git a/src/main/java/com/hbm/modules/ItemHazardModule.java b/src/main/java/com/hbm/modules/ItemHazardModule.java index 72133d6b0..4835c3822 100644 --- a/src/main/java/com/hbm/modules/ItemHazardModule.java +++ b/src/main/java/com/hbm/modules/ItemHazardModule.java @@ -102,13 +102,19 @@ public class ItemHazardModule { if(this.fire > 0 && !reacher) entity.setFire(this.fire); - if(this.asbestos > 0) + if(this.asbestos > 0) { if(!ArmorRegistry.hasProtection(entity, 3, HazardClass.PARTICLE_FINE)) - HbmLivingProps.incrementAsbestos(entity, (int) (this.asbestos * mod)); + HbmLivingProps.incrementAsbestos(entity, (int) (this.asbestos * Math.min(mod, 10))); + else + ArmorUtil.damageGasMaskFilter(entity, (int) (this.asbestos)); + } - if(this.coal > 0) + if(this.coal > 0) { if(!ArmorRegistry.hasProtection(entity, 3, HazardClass.PARTICLE_COARSE)) - HbmLivingProps.incrementBlackLung(entity, (int) (this.coal * mod)); + HbmLivingProps.incrementBlackLung(entity, (int) (this.coal * Math.min(mod, 10))); + else + ArmorUtil.damageGasMaskFilter(entity, (int) (this.coal)); + } if(this.hydro && currentItem) { @@ -136,7 +142,7 @@ public class ItemHazardModule { } } - if(this.blinding && !(entity instanceof EntityPlayer && ArmorUtil.checkForGoggles((EntityPlayer) entity))) { + if(this.blinding && !ArmorRegistry.hasProtection(entity, 3, HazardClass.LIGHT)) { ((EntityLivingBase) entity).addPotionEffect(new PotionEffect(Potion.blindness.id, 100, 0)); } } @@ -166,7 +172,7 @@ public class ItemHazardModule { } if(this.coal > 0) { - list.add(EnumChatFormatting.BLACK + "[" + I18nUtil.resolveKey("trait.coal") + "]"); + list.add(EnumChatFormatting.DARK_GRAY + "[" + I18nUtil.resolveKey("trait.coal") + "]"); } if(this.hydro) { diff --git a/src/main/java/com/hbm/render/item/weapon/ItemRenderRevolverInverted.java b/src/main/java/com/hbm/render/item/weapon/ItemRenderRevolverInverted.java index bca1b4408..50dad76f9 100644 --- a/src/main/java/com/hbm/render/item/weapon/ItemRenderRevolverInverted.java +++ b/src/main/java/com/hbm/render/item/weapon/ItemRenderRevolverInverted.java @@ -3,13 +3,18 @@ package com.hbm.render.item.weapon; import org.lwjgl.opengl.GL11; import com.hbm.lib.RefStrings; +import com.hbm.main.ResourceManager; import com.hbm.render.model.ModelRevolver; import net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumAction; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.IItemRenderer; +import net.minecraftforge.client.IItemRenderer.ItemRenderType; +import net.minecraftforge.client.IItemRenderer.ItemRendererHelper; public class ItemRenderRevolverInverted implements IItemRenderer { @@ -32,36 +37,86 @@ public class ItemRenderRevolverInverted implements IItemRenderer { @Override public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { - return false; + return type == ItemRenderType.ENTITY && (helper == ItemRendererHelper.ENTITY_ROTATION || helper == ItemRendererHelper.ENTITY_BOBBING); } @Override public void renderItem(ItemRenderType type, ItemStack item, Object... data) { + + boolean inUse = false; + if(data != null && data.length > 1 && data[1] instanceof EntityPlayer) + inUse = (((EntityPlayer)data[1]).getItemInUse() != null && ((EntityPlayer)data[1]).getItemInUse().getItemUseAction() == EnumAction.bow); + + GL11.glPushMatrix(); + + GL11.glEnable(GL11.GL_CULL_FACE); + switch(type) { + case EQUIPPED_FIRST_PERSON: - GL11.glPushMatrix(); - Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/ModelRevolver.png")); - GL11.glRotatef(-135.0F, 0.0F, 0.0F, 1.0F); - GL11.glTranslatef(-0.5F, 0.0F, -0.2F); - //GL11.glScalef(2.0F, 2.0F, 2.0F); - GL11.glScalef(0.5F, 0.5F, 0.5F); - GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F); - swordModel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - GL11.glPopMatrix(); + + double s0 = 1.5D; + GL11.glTranslated(0.75, 0.5, 0); + GL11.glScaled(s0, s0, s0); + GL11.glRotated(100, 0, -1, 0); + GL11.glRotated(25, 1, 0, 0); + + if(inUse) { + GL11.glTranslated(-0.4, 0, 0); + GL11.glRotated(198, 0, 1, 0); + GL11.glRotated(-10, 1, 0, 0); + } + break; + case EQUIPPED: + + double scale = 1.5D; + GL11.glRotated(195, 0, 1, 0); + GL11.glRotated(-10, 0, 0, 1); + GL11.glRotated(-10, 1, 0, 0); + GL11.glTranslated(-0.5, 0.1, -0.25); + GL11.glScaled(scale, scale, scale); + + if(inUse) { + GL11.glTranslated(-0.05, 0, 0); + GL11.glRotated(-15, 0, 0, 1); + GL11.glRotated(160, 0, 1, 0); + } + + break; + case ENTITY: - GL11.glPushMatrix(); - Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/ModelRevolver.png")); - GL11.glRotatef(-200.0F, 0.0F, 0.0F, 1.0F); - GL11.glRotatef(75.0F, 0.0F, 1.0F, 0.0F); - GL11.glRotatef(-30.0F, 1.0F, 0.0F, 0.0F); - GL11.glTranslatef(0.0F, -0.2F, -0.5F); - //GL11.glScalef(2.0F, 2.0F, 2.0F); - GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F); - swordModel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - GL11.glPopMatrix(); + + double s1 = 1D; + GL11.glScaled(s1, s1, s1); + GL11.glRotated(90, 0, 1, 0); + + break; + + case INVENTORY: + + GL11.glEnable(GL11.GL_LIGHTING); + + double s = 17D; + GL11.glTranslated(8, 8, 0); + GL11.glRotated(-135, 0, 0, 1); + GL11.glRotated(90, 0, 1, 0); + GL11.glScaled(s, s, -s); + + break; + default: break; } + + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.ff_gun_bright); + ResourceManager.ff_python.renderPart("Body"); + ResourceManager.ff_python.renderPart("Cylinder"); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.ff_wood); + ResourceManager.ff_python.renderPart("Grip"); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.ff_iron); + ResourceManager.ff_python.renderPart("Hammer"); + + GL11.glPopMatrix(); } } diff --git a/src/main/java/com/hbm/render/model/ModelM65.java b/src/main/java/com/hbm/render/model/ModelM65.java index db162c292..c1eaaab90 100644 --- a/src/main/java/com/hbm/render/model/ModelM65.java +++ b/src/main/java/com/hbm/render/model/ModelM65.java @@ -13,6 +13,7 @@ import com.hbm.util.ArmorUtil; import net.minecraft.client.model.ModelBiped; import net.minecraft.client.model.ModelRenderer; import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; public class ModelM65 extends ModelBiped { @@ -132,7 +133,7 @@ public class ModelM65 extends ModelBiped { GL11.glScaled(1.01D, 1.01D, 1.01D); this.mask.render(par7); - if(!(entity instanceof EntityPlayer) || ArmorUtil.getGasMaskFilter(((EntityPlayer)entity).getCurrentArmor(3)) != null) + if(!(entity instanceof EntityLivingBase) || ArmorUtil.getGasMaskFilterRecursively(((EntityLivingBase)entity).getEquipmentInSlot(4), (EntityLivingBase)entity) != null) this.filter.render(par7); GL11.glPopMatrix(); diff --git a/src/main/java/com/hbm/render/tileentity/RenderLargeTower.java b/src/main/java/com/hbm/render/tileentity/RenderLargeTower.java new file mode 100644 index 000000000..c2ed10706 --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderLargeTower.java @@ -0,0 +1,28 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.main.ResourceManager; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; + +public class RenderLargeTower extends TileEntitySpecialRenderer { + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f) { + + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5D, y, z + 0.5D); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.tower_large_tex); + ResourceManager.tower_large.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glPopMatrix(); + } +} diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 8d0d78a7b..9649cac9f 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -230,6 +230,7 @@ public class TileMappings { private static void putMachines() { //TODO: bring some order into this garbage dump + map.put(TileEntityTowerLarge.class, "tileentity_cooling_tower_larger"); } private static void putPile() { diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityTowerLarge.java b/src/main/java/com/hbm/tileentity/machine/TileEntityTowerLarge.java new file mode 100644 index 000000000..d9a1f0e05 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityTowerLarge.java @@ -0,0 +1,34 @@ +package com.hbm.tileentity.machine; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; + +public class TileEntityTowerLarge extends TileEntity { + + AxisAlignedBB bb = null; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + + if(bb == null) { + bb = AxisAlignedBB.getBoundingBox( + xCoord - 4, + yCoord, + zCoord - 4, + xCoord + 5, + yCoord + 13, + zCoord + 5 + ); + } + + return bb; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } +} diff --git a/src/main/java/com/hbm/util/ArmorRegistry.java b/src/main/java/com/hbm/util/ArmorRegistry.java index 162289d4d..5dd71a79c 100644 --- a/src/main/java/com/hbm/util/ArmorRegistry.java +++ b/src/main/java/com/hbm/util/ArmorRegistry.java @@ -1,19 +1,24 @@ package com.hbm.util; +import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; +import com.hbm.handler.ArmorModHandler; + +import api.hbm.item.IGasMask; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; public class ArmorRegistry { - public static HashMap> hazardClasses = new HashMap(); + public static HashMap> hazardClasses = new HashMap(); public static void registerHazard(Item item, HazardClass... hazards) { - hazardClasses.put(item, Arrays.asList(hazards)); + hazardClasses.put(item, new ArrayList(Arrays.asList(hazards))); } public static boolean hasAllProtection(EntityLivingBase entity, int slot, HazardClass... clazz) { @@ -21,11 +26,7 @@ public class ArmorRegistry { if(ArmorUtil.checkArmorNull(entity, slot)) return false; - List list = hazardClasses.get(entity.getEquipmentInSlot(slot + 1).getItem()); - - if(list == null) - return false; - + List list = getProtectionFromItem(entity.getEquipmentInSlot(slot + 1), entity); return list.containsAll(Arrays.asList(clazz)); } @@ -34,7 +35,7 @@ public class ArmorRegistry { if(ArmorUtil.checkArmorNull(entity, slot)) return false; - List list = hazardClasses.get(entity.getEquipmentInSlot(slot + 1).getItem()); + List list = getProtectionFromItem(entity.getEquipmentInSlot(slot + 1), entity); if(list == null) return false; @@ -51,7 +52,7 @@ public class ArmorRegistry { if(ArmorUtil.checkArmorNull(entity, slot)) return false; - List list = hazardClasses.get(entity.getEquipmentInSlot(slot + 1).getItem()); + List list = getProtectionFromItem(entity.getEquipmentInSlot(slot + 1), entity); if(list == null) return false; @@ -59,6 +60,46 @@ public class ArmorRegistry { return list.contains(clazz); } + public static List getProtectionFromItem(ItemStack stack, EntityLivingBase entity) { + + List prot = new ArrayList(); + + Item item = stack.getItem(); + + //if the item has HazardClasses assigned to it, add those + if(hazardClasses.containsKey(item)) + prot.addAll(hazardClasses.get(item)); + + if(item instanceof IGasMask) { + IGasMask mask = (IGasMask) item; + ItemStack filter = mask.getFilter(stack, entity); + + if(filter != null) { + //add the HazardClasses from the filter, then remove the ones blacklisted by the mask + List filProt = hazardClasses.get(filter.getItem()); + + for(HazardClass c : mask.getBlacklist(stack, entity)) + filProt.remove(c); + + prot.addAll(filProt); + } + } + + if(ArmorModHandler.hasMods(stack)) { + + ItemStack[] mods = ArmorModHandler.pryMods(stack); + + for(ItemStack mod : mods) { + + //recursion! run the exact same procedure on every mod, in case future mods will have filter support + if(mod != null) + prot.addAll(getProtectionFromItem(mod, entity)); + } + } + + return prot; + } + public static enum HazardClass { GAS_CHLORINE("hazard.gasChlorine"), //also attacks eyes -> no half mask GAS_MONOXIDE("hazard.gasMonoxide"), //only affects lungs @@ -68,7 +109,8 @@ public class ArmorRegistry { BACTERIA("hazard.bacteria"), //no half masks NERVE_AGENT("hazard.nerveAgent"), //aggressive nerve agent, also attacks skin GAS_CORROSIVE("hazard.corrosive"), //corrosive substance, also attacks skin - LIGHT("hazard.light"); + SAND("hazard.sand"), //blinding sand particles + LIGHT("hazard.light"); //blinding light public final String lang; diff --git a/src/main/java/com/hbm/util/ArmorUtil.java b/src/main/java/com/hbm/util/ArmorUtil.java index da0cc15a2..beda84500 100644 --- a/src/main/java/com/hbm/util/ArmorUtil.java +++ b/src/main/java/com/hbm/util/ArmorUtil.java @@ -10,6 +10,7 @@ import com.hbm.lib.Library; import com.hbm.potion.HbmPotion; import com.hbm.util.ArmorRegistry.HazardClass; +import api.hbm.item.IGasMask; import cpw.mods.fml.relauncher.ReflectionHelper; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; @@ -28,8 +29,36 @@ public class ArmorUtil { */ public static void register() { + ArmorRegistry.registerHazard(ModItems.gas_mask_filter, HazardClass.PARTICLE_COARSE, HazardClass.PARTICLE_FINE, HazardClass.GAS_CHLORINE, HazardClass.BACTERIA, HazardClass.NERVE_AGENT); ArmorRegistry.registerHazard(ModItems.gas_mask_filter_mono, HazardClass.PARTICLE_COARSE, HazardClass.GAS_MONOXIDE); - ArmorRegistry.registerHazard(ModItems.gas_mask_filter, HazardClass.PARTICLE_COARSE, HazardClass.PARTICLE_FINE, HazardClass.GAS_CHLORINE, HazardClass.BACTERIA); + ArmorRegistry.registerHazard(ModItems.gas_mask_filter_combo, HazardClass.PARTICLE_COARSE, HazardClass.PARTICLE_FINE, HazardClass.GAS_CHLORINE, HazardClass.BACTERIA, HazardClass.GAS_MONOXIDE, HazardClass.NERVE_AGENT); + ArmorRegistry.registerHazard(ModItems.gas_mask_filter_rag, HazardClass.PARTICLE_COARSE); + ArmorRegistry.registerHazard(ModItems.gas_mask_filter_piss, HazardClass.PARTICLE_COARSE, HazardClass.GAS_CHLORINE); + + ArmorRegistry.registerHazard(ModItems.gas_mask, HazardClass.SAND, HazardClass.LIGHT); + ArmorRegistry.registerHazard(ModItems.gas_mask_m65, HazardClass.SAND); + ArmorRegistry.registerHazard(ModItems.mask_rag, HazardClass.PARTICLE_COARSE); + ArmorRegistry.registerHazard(ModItems.mask_piss, HazardClass.PARTICLE_COARSE, HazardClass.GAS_CHLORINE); + + ArmorRegistry.registerHazard(ModItems.goggles, HazardClass.LIGHT, HazardClass.SAND); + ArmorRegistry.registerHazard(ModItems.ashglasses, HazardClass.LIGHT, HazardClass.SAND); + + ArmorRegistry.registerHazard(ModItems.attachment_mask, HazardClass.SAND); + + ArmorRegistry.registerHazard(ModItems.asbestos_helmet, HazardClass.SAND, HazardClass.LIGHT); + ArmorRegistry.registerHazard(ModItems.hazmat_helmet, HazardClass.SAND); + ArmorRegistry.registerHazard(ModItems.hazmat_helmet_red, HazardClass.SAND); + ArmorRegistry.registerHazard(ModItems.hazmat_helmet_grey, HazardClass.SAND); + ArmorRegistry.registerHazard(ModItems.hazmat_paa_helmet, HazardClass.LIGHT, HazardClass.SAND); + ArmorRegistry.registerHazard(ModItems.liquidator_helmet, HazardClass.LIGHT, HazardClass.SAND); + ArmorRegistry.registerHazard(ModItems.t45_helmet, HazardClass.PARTICLE_COARSE, HazardClass.PARTICLE_FINE, HazardClass.GAS_CHLORINE, HazardClass.BACTERIA, HazardClass.GAS_MONOXIDE, HazardClass.LIGHT, HazardClass.SAND); + ArmorRegistry.registerHazard(ModItems.ajr_helmet, HazardClass.PARTICLE_COARSE, HazardClass.PARTICLE_FINE, HazardClass.GAS_CHLORINE, HazardClass.BACTERIA, HazardClass.GAS_MONOXIDE, HazardClass.LIGHT, HazardClass.SAND); + ArmorRegistry.registerHazard(ModItems.ajro_helmet, HazardClass.PARTICLE_COARSE, HazardClass.PARTICLE_FINE, HazardClass.GAS_CHLORINE, HazardClass.BACTERIA, HazardClass.GAS_MONOXIDE, HazardClass.LIGHT, HazardClass.SAND); + ArmorRegistry.registerHazard(ModItems.hev_helmet, HazardClass.PARTICLE_COARSE, HazardClass.PARTICLE_FINE, HazardClass.GAS_CHLORINE, HazardClass.BACTERIA, HazardClass.GAS_MONOXIDE, HazardClass.LIGHT, HazardClass.SAND); + ArmorRegistry.registerHazard(ModItems.fau_helmet, HazardClass.PARTICLE_COARSE, HazardClass.PARTICLE_FINE, HazardClass.GAS_CHLORINE, HazardClass.BACTERIA, HazardClass.GAS_MONOXIDE, HazardClass.LIGHT, HazardClass.SAND); + ArmorRegistry.registerHazard(ModItems.dns_helmet, HazardClass.PARTICLE_COARSE, HazardClass.PARTICLE_FINE, HazardClass.GAS_CHLORINE, HazardClass.BACTERIA, HazardClass.GAS_MONOXIDE, HazardClass.LIGHT, HazardClass.SAND); + ArmorRegistry.registerHazard(ModItems.schrabidium_helmet, HazardClass.PARTICLE_COARSE, HazardClass.PARTICLE_FINE, HazardClass.GAS_CHLORINE, HazardClass.BACTERIA, HazardClass.GAS_MONOXIDE, HazardClass.LIGHT, HazardClass.SAND); + ArmorRegistry.registerHazard(ModItems.euphemium_helmet, HazardClass.PARTICLE_COARSE, HazardClass.PARTICLE_FINE, HazardClass.GAS_CHLORINE, HazardClass.BACTERIA, HazardClass.GAS_MONOXIDE, HazardClass.LIGHT, HazardClass.SAND); } public static boolean checkArmor(EntityLivingBase entity, Item... armor) { @@ -50,16 +79,12 @@ public class ArmorUtil { return player.getEquipmentInSlot(slot + 1) == null; } - public static void damageSuit(EntityPlayer player, int slot, int amount) { + public static void damageSuit(EntityLivingBase entity, int slot, int amount) { - if(player.inventory.armorInventory[slot] == null) + if(entity.getEquipmentInSlot(slot + 1) == null) return; - int j = player.inventory.armorInventory[slot].getItemDamage(); - player.inventory.armorInventory[slot].setItemDamage(j += amount); - - if(player.inventory.armorInventory[slot].getItemDamage() > player.inventory.armorInventory[slot].getMaxDamage()) - player.inventory.armorInventory[slot] = null; + entity.getEquipmentInSlot(slot + 1).damageItem(amount, entity); } public static void resetFlightTime(EntityPlayer player) { @@ -73,7 +98,7 @@ public class ArmorUtil { /* * The more horrifying part */ - public static boolean checkForHazmat(EntityPlayer player) { + public static boolean checkForHazmat(EntityLivingBase player) { if(checkArmor(player, ModItems.hazmat_helmet, ModItems.hazmat_plate, ModItems.hazmat_legs, ModItems.hazmat_boots) || checkArmor(player, ModItems.hazmat_helmet_red, ModItems.hazmat_plate_red, ModItems.hazmat_legs_red, ModItems.hazmat_boots_red) || @@ -91,7 +116,7 @@ public class ArmorUtil { return false; } - public static boolean checkForHaz2(EntityPlayer player) { + public static boolean checkForHaz2(EntityLivingBase player) { if(checkArmor(player, ModItems.hazmat_paa_helmet, ModItems.hazmat_paa_plate, ModItems.hazmat_paa_legs, ModItems.hazmat_paa_boots) || checkArmor(player, ModItems.liquidator_helmet, ModItems.liquidator_plate, ModItems.liquidator_legs, ModItems.liquidator_boots) || @@ -103,7 +128,7 @@ public class ArmorUtil { return false; } - public static boolean checkForAsbestos(EntityPlayer player) { + public static boolean checkForAsbestos(EntityLivingBase player) { if(checkArmor(player, ModItems.asbestos_helmet, ModItems.asbestos_plate, ModItems.asbestos_legs, ModItems.asbestos_boots)) return true; @@ -205,145 +230,6 @@ public class ArmorUtil { return false; } - @Deprecated - public static boolean checkForGasMask(EntityPlayer player) { - - if(checkArmorPiece(player, ModItems.hazmat_helmet, 3)) { - return true; - } - if(checkArmorPiece(player, ModItems.hazmat_helmet_red, 3)) { - return true; - } - if(checkArmorPiece(player, ModItems.hazmat_helmet_grey, 3)) { - return true; - } - if(checkArmorPiece(player, ModItems.hazmat_paa_helmet, 3)) { - return true; - } - if(checkArmorPiece(player, ModItems.liquidator_helmet, 3)) { - return true; - } - if(checkArmorPiece(player, ModItems.gas_mask, 3)) { - return true; - } - if(checkArmorPiece(player, ModItems.gas_mask_m65, 3)) { - return true; - } - if(checkArmorPiece(player, ModItems.t45_helmet, 3)) { - return true; - } - if(checkArmorPiece(player, ModItems.ajr_helmet, 3)) { - return true; - } - if(checkArmorPiece(player, ModItems.ajro_helmet, 3)) { - return true; - } - if(checkArmorPiece(player, ModItems.hev_helmet, 3)) { - return true; - } - if(checkArmorPiece(player, ModItems.fau_helmet, 3)) { - return true; - } - if(checkArmorPiece(player, ModItems.dns_helmet, 3)) { - return true; - } - if(checkArmorPiece(player, ModItems.schrabidium_helmet, 3)) { - return true; - } - if(checkArmorPiece(player, ModItems.euphemium_helmet, 3)) { - return true; - } - - if(player.isPotionActive(HbmPotion.mutation)) - return true; - - ItemStack helmet = player.getCurrentArmor(3); - if(helmet != null && ArmorModHandler.hasMods(helmet)) { - - ItemStack mods[] = ArmorModHandler.pryMods(helmet); - - if(mods[ArmorModHandler.helmet_only] != null && mods[ArmorModHandler.helmet_only].getItem() == ModItems.attachment_mask) - return true; - } - - return false; - } - - @Deprecated - public static boolean checkForMonoMask(EntityPlayer player) { - - if(checkArmorPiece(player, ModItems.gas_mask_mono, 3)) - return true; - - if(checkArmorPiece(player, ModItems.liquidator_helmet, 3)) - return true; - - if(checkArmorPiece(player, ModItems.fau_helmet, 3)) - return true; - - if(checkArmorPiece(player, ModItems.dns_helmet, 3)) - return true; - - if(player.isPotionActive(HbmPotion.mutation)) - return true; - - ItemStack helmet = player.getCurrentArmor(3); - if(helmet != null && ArmorModHandler.hasMods(helmet)) { - - ItemStack mods[] = ArmorModHandler.pryMods(helmet); - - if(mods[ArmorModHandler.helmet_only] != null && mods[ArmorModHandler.helmet_only].getItem() == ModItems.attachment_mask_mono) - return true; - } - - return false; - } - - public static boolean checkForGoggles(EntityPlayer player) { - - if(checkArmorPiece(player, ModItems.goggles, 3)) { - return true; - } - if(checkArmorPiece(player, ModItems.ashglasses, 3)) { - return true; - } - if(checkArmorPiece(player, ModItems.hazmat_helmet_red, 3)) { - return true; - } - if(checkArmorPiece(player, ModItems.hazmat_helmet_grey, 3)) { - return true; - } - if(checkArmorPiece(player, ModItems.liquidator_helmet, 3)) { - return true; - } - if(checkArmorPiece(player, ModItems.gas_mask, 3)) { - return true; - } - if(checkArmorPiece(player, ModItems.t45_helmet, 3)) { - return true; - } - if(checkArmorPiece(player, ModItems.ajr_helmet, 3)) { - return true; - } - if(checkArmorPiece(player, ModItems.ajro_helmet, 3)) { - return true; - } - if(checkArmorPiece(player, ModItems.bj_helmet, 3)) { - return true; - } - if(checkArmorPiece(player, ModItems.hev_helmet, 3)) { - return true; - } - if(checkArmorPiece(player, ModItems.fau_helmet, 3)) { - return true; - } - if(checkArmorPiece(player, ModItems.hev_helmet, 3)) { - return true; - } - - return false; - } - public static boolean checkForFiend(EntityPlayer player) { return checkArmorPiece(player, ModItems.jackt, 2) && Library.checkForHeld(player, ModItems.shimmer_sledge); @@ -384,6 +270,27 @@ public class ArmorUtil { mask.stackTagCompound.removeTag(FILTERK_KEY); } + /** + * Grabs the installed filter or the filter of the attachment, used for attachment rendering + * @param mask + * @param entity + * @return + */ + public static ItemStack getGasMaskFilterRecursively(ItemStack mask, EntityLivingBase entity) { + + ItemStack filter = getGasMaskFilter(mask); + + if(filter == null && ArmorModHandler.hasMods(mask)) { + + ItemStack mods[] = ArmorModHandler.pryMods(mask); + + if(mods[ArmorModHandler.helmet_only] != null && mods[ArmorModHandler.helmet_only].getItem() instanceof IGasMask) + filter = ((IGasMask)mods[ArmorModHandler.helmet_only].getItem()).getFilter(mods[ArmorModHandler.helmet_only], entity); + } + + return filter; + } + public static ItemStack getGasMaskFilter(ItemStack mask) { if(mask == null) @@ -398,10 +305,41 @@ public class ArmorUtil { return filter; } + public static void damageGasMaskFilter(EntityLivingBase entity, int damage) { + + ItemStack mask = entity.getEquipmentInSlot(4); + + if(mask == null) + return; + + if(!(mask.getItem() instanceof IGasMask)) { + + if(ArmorModHandler.hasMods(mask)) { + + ItemStack mods[] = ArmorModHandler.pryMods(mask); + + if(mods[ArmorModHandler.helmet_only] != null && mods[ArmorModHandler.helmet_only].getItem() instanceof IGasMask) + mask = mods[ArmorModHandler.helmet_only]; + } + } + + if(mask != null) + damageGasMaskFilter(mask, damage); + } + public static void damageGasMaskFilter(ItemStack mask, int damage) { ItemStack filter = getGasMaskFilter(mask); - if(filter.getMaxDamage() == 0) + if(filter == null) { + if(ArmorModHandler.hasMods(mask)) { + ItemStack mods[] = ArmorModHandler.pryMods(mask); + + if(mods[ArmorModHandler.helmet_only] != null && mods[ArmorModHandler.helmet_only].getItem() instanceof IGasMask) + filter = getGasMaskFilter(mods[ArmorModHandler.helmet_only]); + } + } + + if(filter == null || filter.getMaxDamage() == 0) return; filter.setItemDamage(filter.getItemDamage() + damage); @@ -414,15 +352,29 @@ public class ArmorUtil { public static void addGasMaskTooltip(ItemStack mask, EntityPlayer player, List list, boolean ext) { - ItemStack filter = getGasMaskFilter(mask); - - if(filter == null) + if(mask == null || !(mask.getItem() instanceof IGasMask)) return; + ItemStack filter = ((IGasMask)mask.getItem()).getFilter(mask, player); + + if(filter == null) { + list.add(EnumChatFormatting.RED + "No filter installed!"); + return; + } + list.add(EnumChatFormatting.GOLD + "Installed filter:"); + int meta = filter.getItemDamage(); + int max = filter.getMaxDamage(); + + String append = ""; + + if(max > 0) { + append = " (" + ((max - meta) * 100 / max) + "%)"; + } + List lore = new ArrayList(); - list.add(" " + filter.getDisplayName()); + list.add(" " + filter.getDisplayName() + append); filter.getItem().addInformation(filter, player, lore, ext); ForgeEventFactory.onItemTooltip(filter, player, lore, ext); lore.forEach(x -> list.add(EnumChatFormatting.YELLOW + " " + x)); diff --git a/src/main/java/com/hbm/util/ContaminationUtil.java b/src/main/java/com/hbm/util/ContaminationUtil.java index f1352ff4e..0a66e73b2 100644 --- a/src/main/java/com/hbm/util/ContaminationUtil.java +++ b/src/main/java/com/hbm/util/ContaminationUtil.java @@ -8,6 +8,7 @@ import com.hbm.handler.HazmatRegistry; import com.hbm.handler.radiation.ChunkRadiationManager; import com.hbm.lib.ModDamageSource; import com.hbm.potion.HbmPotion; +import com.hbm.util.ArmorRegistry.HazardClass; import api.hbm.entity.IRadiationImmune; import net.minecraft.entity.Entity; @@ -122,7 +123,9 @@ public class ContaminationUtil { EntityLivingBase entity = (EntityLivingBase)e; - if(!(entity instanceof EntityPlayer && ArmorUtil.checkForGasMask((EntityPlayer) entity))) + if(ArmorRegistry.hasAllProtection(entity, 3, HazardClass.PARTICLE_FINE)) + ArmorUtil.damageGasMaskFilter(entity, i); + else HbmLivingProps.incrementAsbestos(entity, i); } @@ -245,16 +248,11 @@ public class ContaminationUtil { } public static enum HazardType { - MONOXIDE, RADIATION, - ASBESTOS, DIGAMMA } public static enum ContaminationType { - GAS, //filterable by gas mask - GAS_NON_REACTIVE, //not filterable by gas mask - GOGGLES, //preventable by goggles FARADAY, //preventable by metal armor HAZMAT, //preventable by hazmat HAZMAT2, //preventable by heavy hazmat @@ -281,9 +279,6 @@ public class ContaminationUtil { EntityPlayer player = (EntityPlayer)entity; switch(cont) { - case GAS: if(ArmorUtil.checkForGasMask(player)) return false; break; - case GAS_NON_REACTIVE: if(ArmorUtil.checkForMonoMask(player)) return false; break; - case GOGGLES: if(ArmorUtil.checkForGoggles(player)) return false; break; case FARADAY: if(ArmorUtil.checkForFaraday(player)) return false; break; case HAZMAT: if(ArmorUtil.checkForHazmat(player)) return false; break; case HAZMAT2: if(ArmorUtil.checkForHaz2(player)) return false; break; @@ -302,9 +297,7 @@ public class ContaminationUtil { return false; switch(hazard) { - case MONOXIDE: entity.attackEntityFrom(ModDamageSource.monoxide, amount); break; case RADIATION: HbmLivingProps.incrementRadiation(entity, amount * (cont == ContaminationType.RAD_BYPASS ? 1 : calculateRadiationMod(entity))); break; - case ASBESTOS: HbmLivingProps.incrementAsbestos(entity, (int)amount); break; case DIGAMMA: HbmLivingProps.incrementDigamma(entity, amount); break; } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 52bfe369f..089e92cdd 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -247,6 +247,7 @@ container.nukePrototype=Der Prototyp container.nukeSolinium=Die Blauspülung container.nukeTsar=Tsar Bombe container.oilWell=Ölbohrturm +container.orbus=Schwerer Magnetischer Lagerbehälter container.plasmaHeater=Plasmaerhitzer container.press=Befeuerte Presse container.puf6_tank=PuF6 Tank @@ -398,9 +399,11 @@ hazard.corrosive=Ätzende Dämpfe hazard.gasChlorine=Giftgas hazard.gasInert=Träge Gase / Strickgas hazard.gasMonoxide=Kohlenstoffmonoxid +hazard.light=Starkes Licht hazard.nerveAgent=Nervengift hazard.particleCoarse=Partikel hazard.particleFine=Feinstaub +hazard.sand=Augenreizstoffe hbm.key=NTM Hotkeys hbm.key.toggleBack=Rucksack umschalten @@ -688,7 +691,7 @@ item.assembly_steel.name=Bleipatronensatz item.assembly_template.name=Fertigungsvorlage: item.assembly_uzi.name=.22 LR Patronensatz item.attachment_mask.name=Anfügbare Gasmaske -item.attachment_mask_mono.name=Anfügbare Kohlenstoffmonoxidmaske +item.attachment_mask_mono.name=Anfügbare Halbmaske item.australium_iii.name=Mark III Lebensverlängerer item.australium_iv.name=Mark IV Lebensverlängerer item.australium_v.name=Mark V Lebensverlängerer @@ -719,7 +722,7 @@ item.battery_sc_americium.name=Americium-241-Selbstlader item.battery_sc_gold.name=Gold-198-Selbstlader item.battery_sc_plutonium.name=Plutonium-238-Selbstlader item.battery_sc_polonium.name=Polonium-210-Selbstlader -item.battery_sc_technetium.name=Technerium-98-Selbstlader +item.battery_sc_technetium.name=Technerium-99-Selbstlader item.battery_sc_uranium.name=Uran-238-Selbstlader item.battery_schrabidium.name=Schrabidiumbatterie item.battery_schrabidium_cell.name=Schrabidium-Energiezelle @@ -857,6 +860,7 @@ item.canister_bitumen.name=Bitumenkanister item.canister_canola.name=Schmiermittelkanister item.canister_empty.name=Leerer Kanister item.canister_fuel.name=Dieselkanister +item.canister_gasoline.name=Bleibenzinkanister item.canister_heatingoil.name=Heizölkanister item.canister_heavyoil.name=Schwerölkanister item.canister_kerosene.name=Kerosinkanister @@ -1040,6 +1044,7 @@ item.coil_tungsten.name=Heizspirale item.coin_creeper.name=Nukleare Creeper-Münze item.coin_maskman.name=Maskenmann-Münze item.coin_radiation.name=Strahlungs-Münze +item.coin_siege.name=Belagerungsmünze item.coin_ufo.name=UFO-Münze item.coin_worm.name=Balls-O-Tron-Münze item.coke.name=Koks @@ -1224,9 +1229,13 @@ item.gas_empty.name=Leerer Gastank item.gas_full.name=Gastank item.gas_mask.name=Gasmaske item.gas_mask_filter.name=Gasmaskenfilter +item.gas_mask_filter_combo.name=Kombofilter item.gas_mask_filter_mono.name=Katalytischer Maskenfilter +item.gas_mask_filter_piss.name=Verbesserter selbstgebauter Gasmaskenfilter +item.gas_mask_filter_rag.name=Selbstgebauter Gasmaskenfilter item.gas_mask_m65.name=M65-Z Gasmaske -item.gas_mask_mono.name=Kohlenstoffmonoxidmaske +item.gas_mask_mono.name=Halbmaske +item.gas_mask_olde.name=Ledergasmaske item.gas_petroleum.name=Petroleumgastank item.geiger_counter.name=Mobiler Geigerzähler item.gem_tantalium.name=Tantal-Polykristall @@ -1475,6 +1484,7 @@ item.ingot_meteorite_forged.name=Geschmiedeter Meteoritenbarren item.ingot_mox_fuel.name=MOX-Kernbrennstoffbarren item.ingot_neptunium.name=Neptuniumbarren item.ingot_neptunium_fuel.name=Neptuniumkernbrennstoffbarren +item.ingot_niobium.name=Niobbarren item.ingot_phosphorus.name=Weiße Phosphortafel item.ingot_plutonium.name=Plutoniumbarren item.ingot_plutonium_fuel.name=Plutoniumkernbrennstoffbarren @@ -1570,6 +1580,8 @@ item.man_igniter.name=Zünder item.man_kit.name=Fat Man Kit item.marshmallow.name=Marshmallow am Stiel item.mask_of_infamy.name=Maske der Schande +item.mask_piss.name=Grabenmaske +item.mask_rag.name=Primitive Schutzmaske item.matchstick.name=Streichholz item.mech_key.name=Großer Silberschlüssel item.mechanism_launcher_1.name=Werfermechanismus @@ -2066,6 +2078,9 @@ item.radaway.name=RadAway item.radaway_flush.name=Elite-RadAway item.radaway_strong.name=Starkes RadAway item.radx.name=Rad-X +item.rag.name=Stoff +item.rag_damp.name=Nasser Stoff +item.rag_piss.name=Pisslappen item.rbmk_fuel_balefire.name=Balefire-RBMK-Kernbrennstoff item.rbmk_fuel_balefire_gold.name=Flammgold-RBMK-Kernbrennstoff item.rbmk_fuel_drx.name=§cDigamma-RBMK-Kernbrennstoff @@ -2883,8 +2898,10 @@ tile.fwatz_plasma.name=Destabilisiertes Antischrabidiumplasma tile.fwatz_scaffold.name=Watzwerkstützen tile.fwatz_tank.name=Kühlmitteltank tile.gas_asbestos.name=Asbestpartikel +tile.gas_coal.name=Kohlestaub tile.gas_duct.name=Gasleitung tile.gas_duct_solid.name=Verstärkte Gasleitung +tile.gas_explosive.name=Explosives Gas tile.gas_flammable.name=Flammbares Gas tile.gas_monoxide.name=Koglenmonoxid tile.gas_radon.name=Radongas @@ -3036,6 +3053,7 @@ tile.machine_spp_top.name=NPE-Potentialgenerator (Oberteil) tile.machine_storage_drum.name=Atommüll-Lagertrommel tile.machine_telelinker.name=Geschütz-Telemetrie-Manager tile.machine_teleporter.name=Teleporter +tile.machine_tower_large.name=Kühlturm tile.machine_transformer.name=10k-20Hz-Transformator tile.machine_transformer_20.name=10k-1Hz-Transformator tile.machine_transformer_dnt.name=DNT-20Hz-Transformator @@ -3299,6 +3317,7 @@ tile.yellow_barrel.name=Radioaktives Fass trait.asbestos=Asbest trait.blinding=Blendend trait.breeding=%s Operationen in Brutreaktor +trait.coal=Kohlestaub trait.digamma=Digammastrahlung trait.drop=Gefährlicher Drop trait.explosive=Entzündlich / Explosiv diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 821e6f7cb..433ac19cf 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -315,6 +315,7 @@ container.nukePrototype=The Prototype container.nukeSolinium=The Blue Rinse container.nukeTsar=Tsar Bomba container.oilWell=Oil Derrick +container.orbus=Heavy Antimatter Storage container.plasmaHeater=Plasma Heater container.press=Burner Press container.puf6_tank=PuF6 Tank @@ -466,9 +467,11 @@ hazard.corrosive=Corrosive Fumes hazard.gasChlorine=Chemical Gas hazard.gasInert=Inert Gas / Asphxiants hazard.gasMonoxide=Carbon Monoxide +hazard.light=Bright Lights hazard.nerveAgent=Nerve Agent hazard.particleCoarse=Airborne Particles hazard.particleFine=Particulates +hazard.sand=Eye Irritants hbm.key=NTM Hotkeys hbm.key.toggleBack=Toggle Backpack @@ -756,7 +759,7 @@ item.assembly_steel.name=Lead Bullet Assembly item.assembly_template.name=Assembly Template: item.assembly_uzi.name=.22 LR Assembly item.attachment_mask.name=Gas Mask Attachable -item.attachment_mask_mono.name=Carbon Monoxide Mask Attachable +item.attachment_mask_mono.name=Half Mask Attachable item.australium_iii.name=Mark III Life Extender item.australium_iv.name=Mark IV Life Extender item.australium_v.name=Mark V Life Extender @@ -787,7 +790,7 @@ item.battery_sc_americium.name=Self-Charging Americium-241 Battery item.battery_sc_gold.name=Self-Charging Gold-198 Battery item.battery_sc_plutonium.name=Self-Charging Plutonium-238 Battery item.battery_sc_polonium.name=Self-Charging Polonium-210 Battery -item.battery_sc_technetium.name=Self-Charging Technetium-98 Battery +item.battery_sc_technetium.name=Self-Charging Technetium-99 Battery item.battery_sc_uranium.name=Self-Charging Uranium-238 Battery item.battery_schrabidium.name=Schrabidium Battery item.battery_schrabidium_cell.name=Schrabidium Power Cell @@ -925,6 +928,7 @@ item.canister_bitumen.name=Bitumen Canister item.canister_canola.name=Engine Lubricant item.canister_empty.name=Empty Canister item.canister_fuel.name=Diesel Canister +item.canister_gasoline.name=Leaded Gasoline Canister item.canister_heatingoil.name=Heating Oil Canister item.canister_heavyoil.name=Heavy Oil Canister item.canister_kerosene.name=Kerosene Canister @@ -1108,6 +1112,7 @@ item.coil_tungsten.name=Heating Coil item.coin_creeper.name=Nuclear Creeper Coin item.coin_maskman.name=Maskman Coin item.coin_radiation.name=Radiation Coin +item.coin_siege.name=Siege Coin item.coin_ufo.name=UFO Coin item.coin_worm.name=Balls-O-Tron Coin item.coke.name=Coke @@ -1292,9 +1297,13 @@ item.gas_empty.name=Empty Gas Tank item.gas_full.name=Gas Tank item.gas_mask.name=Gas Mask item.gas_mask_filter.name=Gas Mask Filter +item.gas_mask_filter_combo.name=Gas Mask Combo Filter item.gas_mask_filter_mono.name=Catalytic Mask Filter +item.gas_mask_filter_piss.name=Advanced Makeshift Gas Mask Filter +item.gas_mask_filter_rag.name=Makeshift Gas Mask Filter item.gas_mask_m65.name=M65-Z Gas Mask -item.gas_mask_mono.name=Carbon Monoxide Mask +item.gas_mask_mono.name=Half Mask +item.gas_mask_olde.name=Leather Gas Mask item.gas_petroleum.name=Petroleum Gas Tank item.geiger_counter.name=Handheld Geiger Counter item.gem_tantalium.name=Tantalium Polycrystal @@ -1543,6 +1552,7 @@ item.ingot_meteorite_forged.name=Forged Meteorite Ingot item.ingot_mox_fuel.name=Ingot of MOX Fuel item.ingot_neptunium.name=Neptunium Ingot item.ingot_neptunium_fuel.name=Neptunium Fuel Ingot +item.ingot_niobium.name=Niobium Ingot item.ingot_phosphorus.name=Bar of White Phosphorus item.ingot_plutonium.name=Plutonium Ingot item.ingot_plutonium_fuel.name=Ingot of Plutonium Fuel @@ -1638,6 +1648,8 @@ item.man_igniter.name=Bomb Igniter item.man_kit.name=Fat Man Kit item.marshmallow.name=Marshmallow on a Stick item.mask_of_infamy.name=Mask of Infamy +item.mask_piss.name=Trench Mask +item.mask_rag.name=Crude Protective Mask item.matchstick.name=Matchstick item.mech_key.name=Large Silver Key item.mechanism_launcher_1.name=Launcher Mechanism @@ -2135,6 +2147,9 @@ item.radaway.name=RadAway item.radaway_flush.name=Elite RadAway item.radaway_strong.name=Strong RadAway item.radx.name=Rad-X +item.rag.name=Cloth +item.rag_damp.name=Damp Cloth +item.rag_piss.name=Piss-Soaked Rag item.rbmk_fuel_balefire.name=Balefire RBMK Fuel Rod item.rbmk_fuel_balefire_gold.name=Flashgold RBMK Fuel Rod item.rbmk_fuel_drx.name=§cDigamma RBMK Fuel Rod§r @@ -2966,8 +2981,10 @@ tile.fwatz_plasma.name=Destabilized Antischrabidium Plasma tile.fwatz_scaffold.name=Fusionary Watz Plant Structural Support tile.fwatz_tank.name=Regenerative Coolant Fluid Tank tile.gas_asbestos.name=Airborne Asbestos Particles +tile.gas_coal.name=Airborne Coal Dust tile.gas_duct.name=Gas Pipe tile.gas_duct_solid.name=Coated Gas Pipe +tile.gas_explosive.name=Explosive Gas tile.gas_flammable.name=Flammable Gas tile.gas_monoxide.name=Carbon Monoxide tile.gas_radon.name=Radon Gas @@ -3119,6 +3136,7 @@ tile.machine_spp_top.name=ZPE Potential Generator (Top) tile.machine_storage_drum.name=Nuclear Waste Disposal Drum tile.machine_telelinker.name=Turret Telemetry Linker tile.machine_teleporter.name=Teleporter +tile.machine_tower_large.name=Cooling Tower tile.machine_transformer.name=10k-20Hz Transformer tile.machine_transformer_20.name=10k-1Hz Transformer tile.machine_transformer_dnt.name=DNT-20Hz Transformer @@ -3381,6 +3399,7 @@ tile.yellow_barrel.name=Radioactive Barrel trait.asbestos=Asbestos trait.blinding=Blinding trait.breeding=Worth %s operations in breeding reactor +trait.coal=Coal Dust trait.digamma=Digamma Radiation trait.drop=Dangerous Drop trait.explosive=Flammable / Explosive diff --git a/src/main/resources/assets/hbm/models/machines/tower_large.obj b/src/main/resources/assets/hbm/models/machines/tower_large.obj new file mode 100644 index 000000000..a22e8340f --- /dev/null +++ b/src/main/resources/assets/hbm/models/machines/tower_large.obj @@ -0,0 +1,1343 @@ +# Blender v2.79 (sub 0) OBJ File: 'tower_large.blend' +# www.blender.org +o Cube_Cube.001 +v -4.500000 0.000000 4.500000 +v -4.500000 1.000000 4.500000 +v -4.500000 0.000000 -4.500000 +v -4.500000 1.000000 -4.500000 +v 4.500000 0.000000 4.500000 +v 4.500000 1.000000 4.500000 +v 4.500000 0.000000 -4.500000 +v 4.500000 1.000000 -4.500000 +v 0.000000 2.000000 -4.500000 +v -1.722075 2.000000 -4.157457 +v -3.181980 2.000000 -3.181980 +v -4.157458 2.000000 -1.722075 +v -4.500000 2.000000 0.000000 +v -4.157458 2.000000 1.722075 +v -3.181980 2.000000 3.181980 +v -1.722075 2.000000 4.157458 +v -0.000001 2.000000 4.500000 +v 1.722075 2.000000 4.157458 +v 3.181980 2.000000 3.181982 +v 4.157457 2.000000 1.722076 +v 4.500000 2.000000 0.000000 +v 4.157457 2.000000 -1.722076 +v 3.181979 2.000000 -3.181982 +v 1.722074 2.000000 -4.157459 +v 0.000000 9.000000 -3.000000 +v -1.148050 9.000000 -2.771639 +v -2.121320 9.000000 -2.121321 +v -2.771638 9.000000 -1.148050 +v -3.000000 9.000000 0.000000 +v -2.771638 9.000000 1.148050 +v -2.121320 9.000000 2.121320 +v -1.148050 9.000000 2.771638 +v 0.000000 9.000000 3.000000 +v 1.148049 9.000000 2.771639 +v 2.121320 9.000000 2.121321 +v 2.771639 9.000000 1.148050 +v 3.000000 9.000000 0.000000 +v 2.771639 9.000000 -1.148050 +v 2.121320 9.000000 -2.121321 +v 1.148048 9.000000 -2.771639 +v 0.000000 11.000000 -3.000000 +v -1.148050 11.000000 -2.771639 +v -2.121320 11.000000 -2.121321 +v -2.771638 11.000000 -1.148050 +v -3.000000 11.000000 0.000000 +v -2.771638 11.000000 1.148050 +v -2.121320 11.000000 2.121320 +v -1.148050 11.000000 2.771638 +v 0.000000 11.000000 3.000000 +v 1.148049 11.000000 2.771639 +v 2.121320 11.000000 2.121321 +v 2.771639 11.000000 1.148050 +v 3.000000 11.000000 0.000000 +v 2.771639 11.000000 -1.148050 +v 2.121320 11.000000 -2.121321 +v 1.148048 11.000000 -2.771639 +v 0.000000 13.000000 -3.500000 +v -1.339392 13.000000 -3.233578 +v -2.474874 13.000000 -2.474874 +v -3.233578 13.000000 -1.339392 +v -3.500000 13.000000 0.000000 +v -3.233578 13.000000 1.339393 +v -2.474874 13.000000 2.474874 +v -1.339392 13.000000 3.233578 +v -0.000001 13.000000 3.500000 +v 1.339392 13.000000 3.233579 +v 2.474873 13.000000 2.474874 +v 3.233578 13.000000 1.339393 +v 3.500000 13.000000 0.000000 +v 3.233578 13.000000 -1.339393 +v 2.474873 13.000000 -2.474874 +v 1.339391 13.000000 -3.233580 +v -0.000001 2.000000 4.375000 +v 0.000000 9.000000 2.875000 +v 0.000000 11.000000 2.875000 +v -0.000001 13.000000 3.375000 +v 0.000000 2.000000 -4.375000 +v 0.000000 9.000000 -2.875000 +v 0.000000 11.000000 -2.875000 +v 0.000000 13.000000 -3.375000 +v 4.375000 2.000000 0.000000 +v 2.875000 8.999999 0.000000 +v 2.875000 10.999999 0.000000 +v 3.375000 12.999999 0.000000 +v -4.375000 2.000000 0.000000 +v -2.875000 8.999999 0.000000 +v -2.875000 10.999999 0.000000 +v -3.375000 12.999999 0.000000 +v 3.093592 2.000000 3.093593 +v 2.032932 9.000000 2.032932 +v 2.032932 11.000000 2.032932 +v 2.386485 13.000000 2.386486 +v -3.093592 2.000000 -3.093593 +v -2.032932 9.000000 -2.032932 +v -2.032932 11.000000 -2.032932 +v -2.386485 13.000000 -2.386486 +v 3.093593 2.000000 -3.093592 +v 2.032932 8.999999 -2.032932 +v 2.032932 10.999999 -2.032932 +v 2.386486 12.999999 -2.386485 +v -3.093592 2.000000 3.093592 +v -2.032932 8.999999 2.032932 +v -2.032932 10.999999 2.032932 +v -2.386485 12.999999 2.386485 +v 4.041973 2.000000 1.674240 +v 2.656154 9.000000 1.100215 +v 2.656154 11.000000 1.100215 +v 3.118093 13.000000 1.291557 +v -4.041973 2.000000 -1.674240 +v -2.656154 9.000000 -1.100215 +v -2.656154 11.000000 -1.100215 +v -3.118093 13.000000 -1.291557 +v 1.674240 2.000000 -4.041973 +v 1.100215 8.999999 -2.656154 +v 1.100215 10.999999 -2.656154 +v 1.291557 12.999999 -3.118093 +v -1.674240 2.000000 4.041973 +v -1.100215 8.999999 2.656154 +v -1.100215 10.999999 2.656154 +v -1.291556 12.999999 3.118093 +v 4.041973 2.000000 -1.674239 +v 2.656154 9.000000 -1.100215 +v 2.656154 11.000000 -1.100215 +v 3.118093 13.000000 -1.291555 +v -4.041973 2.000000 1.674240 +v -2.656154 9.000000 1.100215 +v -2.656154 11.000000 1.100215 +v -3.118093 13.000000 1.291556 +v -1.674240 2.000000 -4.041973 +v -1.100215 8.999999 -2.656154 +v -1.100215 10.999999 -2.656154 +v -1.291556 12.999999 -3.118093 +v 1.674240 2.000000 4.041973 +v 1.100215 8.999999 2.656154 +v 1.100215 10.999999 2.656154 +v 1.291556 12.999999 3.118093 +v 0.000000 1.000000 -4.500000 +v -1.722076 1.000000 -4.157457 +v -3.181980 1.000000 -3.181980 +v -4.157458 1.000000 -1.722075 +v -4.500000 1.000000 0.000000 +v -4.157458 1.000000 1.722075 +v -3.181980 1.000000 3.181980 +v -1.722076 1.000000 4.157458 +v -0.000001 1.000000 4.500000 +v 1.722075 1.000000 4.157458 +v 3.181980 1.000000 3.181982 +v 4.157458 1.000000 1.722076 +v 4.500000 1.000000 0.000000 +v 4.157457 1.000000 -1.722076 +v 3.181979 1.000000 -3.181982 +v 1.722073 1.000000 -4.157459 +v 0.000000 2.000000 -4.500000 +v -1.722076 2.000000 -4.157457 +v -3.181980 2.000000 -3.181980 +v -4.157458 2.000000 -1.722075 +v -4.500000 2.000000 0.000000 +v -4.157458 2.000000 1.722075 +v -3.181980 2.000000 3.181980 +v -1.722076 2.000000 4.157458 +v -0.000001 2.000000 4.500000 +v 1.722075 2.000000 4.157458 +v 3.181980 2.000000 3.181982 +v 4.157458 2.000000 1.722076 +v 4.500000 2.000000 0.000000 +v 4.157457 2.000000 -1.722076 +v 3.181979 2.000000 -3.181982 +v 1.722073 2.000000 -4.157459 +v -2.500000 1.000000 2.500000 +v 2.500000 1.000000 2.500000 +v -2.500000 1.000000 -2.500000 +v 2.500000 1.000000 -2.500000 +v -2.500000 0.500000 -2.500000 +v -2.500000 0.500000 2.500000 +v 2.500000 0.500000 2.500000 +v 2.500000 0.500000 -2.500000 +v -1.875000 0.750000 -2.500000 +v -1.875000 0.750000 2.500000 +v -1.698223 0.676777 -2.500000 +v -1.698223 0.676777 2.500000 +v -1.625000 0.500000 -2.500000 +v -1.625000 0.500000 2.500000 +v -2.125000 0.500000 -2.500000 +v -2.125000 0.500000 2.500000 +v -2.051777 0.676777 -2.500000 +v -2.051777 0.676777 2.500000 +v 1.875000 0.750000 -2.500000 +v 1.875000 0.750000 2.500000 +v 2.051777 0.676777 -2.500000 +v 2.051777 0.676777 2.500000 +v 2.125000 0.500000 -2.500000 +v 2.125000 0.500000 2.500000 +v 1.625000 0.500000 -2.500000 +v 1.625000 0.500000 2.500000 +v 1.698223 0.676777 -2.500000 +v 1.698223 0.676777 2.500000 +v 1.250000 0.750000 -2.500000 +v 1.250000 0.750000 2.500000 +v 1.426777 0.676777 -2.500000 +v 1.426777 0.676777 2.500000 +v 1.500000 0.500000 -2.500000 +v 1.500000 0.500000 2.500000 +v 1.000000 0.500000 -2.500000 +v 1.000000 0.500000 2.500000 +v 1.073223 0.676777 -2.500000 +v 1.073223 0.676777 2.500000 +v 0.625000 0.750000 -2.500000 +v 0.625000 0.750000 2.500000 +v 0.801777 0.676777 -2.500000 +v 0.801777 0.676777 2.500000 +v 0.875000 0.500000 -2.500000 +v 0.875000 0.500000 2.500000 +v 0.375000 0.500000 -2.500000 +v 0.375000 0.500000 2.500000 +v 0.448223 0.676777 -2.500000 +v 0.448223 0.676777 2.500000 +v -1.250000 0.750000 -2.500000 +v -1.250000 0.750000 2.500000 +v -1.073223 0.676777 -2.500000 +v -1.073223 0.676777 2.500000 +v -1.000000 0.500000 -2.500000 +v -1.000000 0.500000 2.500000 +v -1.500000 0.500000 -2.500000 +v -1.500000 0.500000 2.500000 +v -1.426777 0.676777 -2.500000 +v -1.426777 0.676777 2.500000 +v -0.625000 0.750000 -2.500000 +v -0.625000 0.750000 2.500000 +v -0.448223 0.676777 -2.500000 +v -0.448223 0.676777 2.500000 +v -0.375000 0.500000 -2.500000 +v -0.375000 0.500000 2.500000 +v -0.875000 0.500000 -2.500000 +v -0.875000 0.500000 2.500000 +v -0.801777 0.676777 -2.500000 +v -0.801777 0.676777 2.500000 +v 0.000000 0.750000 -2.500000 +v 0.000000 0.750000 2.500000 +v 0.176777 0.676777 -2.500000 +v 0.176777 0.676777 2.500000 +v 0.250000 0.500000 -2.500000 +v 0.250000 0.500000 2.500000 +v -0.250000 0.500000 -2.500000 +v -0.250000 0.500000 2.500000 +v -0.176777 0.676777 -2.500000 +v -0.176777 0.676777 2.500000 +v 2.500000 0.750000 -2.500000 +v 2.500000 0.750000 2.500000 +v -2.323223 0.676777 2.500000 +v -2.323223 0.676777 -2.500000 +v -2.500000 0.750000 2.500000 +v -2.500000 0.750000 -2.500000 +v 2.250000 0.500000 -2.500000 +v 2.250000 0.500000 2.500000 +v 2.323223 0.676777 -2.500000 +v 2.323223 0.676777 2.500000 +v -2.250000 0.500000 -2.500000 +v -2.250000 0.500000 2.500000 +v 0.000000 13.000000 -3.500000 +v -1.339392 13.000000 -3.233578 +v -2.474874 13.000000 -2.474874 +v -3.233578 13.000000 -1.339392 +v -3.500000 13.000000 0.000000 +v -3.233578 13.000000 1.339393 +v -2.474874 13.000000 2.474874 +v -1.339392 13.000000 3.233578 +v -0.000001 13.000000 3.500000 +v 1.339392 13.000000 3.233579 +v 2.474873 13.000000 2.474874 +v 3.233578 13.000000 1.339393 +v 3.500000 13.000000 0.000000 +v 3.233578 13.000000 -1.339393 +v 2.474873 13.000000 -2.474874 +v 1.339391 13.000000 -3.233580 +v -0.000001 13.000000 3.375000 +v 0.000000 13.000000 -3.375000 +v 3.375000 12.999999 0.000000 +v -3.375000 12.999999 0.000000 +v 2.386485 13.000000 2.386486 +v -2.386485 13.000000 -2.386486 +v 2.386486 12.999999 -2.386485 +v -2.386485 12.999999 2.386485 +v 3.118093 13.000000 1.291557 +v -3.118093 13.000000 -1.291557 +v 1.291557 12.999999 -3.118093 +v -1.291556 12.999999 3.118093 +v 3.118093 13.000000 -1.291555 +v -3.118093 13.000000 1.291556 +v -1.291556 12.999999 -3.118093 +v 1.291556 12.999999 3.118093 +v 0.000000 2.000000 -4.500000 +v -1.722075 2.000000 -4.157457 +v -3.181980 2.000000 -3.181980 +v -4.157458 2.000000 -1.722075 +v -4.500000 2.000000 0.000000 +v -4.157458 2.000000 1.722075 +v -3.181980 2.000000 3.181980 +v -1.722075 2.000000 4.157458 +v -0.000001 2.000000 4.500000 +v 1.722075 2.000000 4.157458 +v 3.181980 2.000000 3.181982 +v 4.157457 2.000000 1.722076 +v 4.500000 2.000000 0.000000 +v 4.157457 2.000000 -1.722076 +v 3.181979 2.000000 -3.181982 +v 1.722074 2.000000 -4.157459 +v -0.000001 2.000000 4.375000 +v 0.000000 2.000000 -4.375000 +v 4.375000 2.000000 0.000000 +v -4.375000 2.000000 0.000000 +v 3.093592 2.000000 3.093593 +v -3.093592 2.000000 -3.093593 +v 3.093593 2.000000 -3.093592 +v -3.093592 2.000000 3.093592 +v 4.041973 2.000000 1.674240 +v -4.041973 2.000000 -1.674240 +v 1.674240 2.000000 -4.041973 +v -1.674240 2.000000 4.041973 +v 4.041973 2.000000 -1.674239 +v -4.041973 2.000000 1.674240 +v -1.674240 2.000000 -4.041973 +v 1.674240 2.000000 4.041973 +vt 0.756757 0.473684 +vt 1.000000 0.526316 +vt 0.756757 0.526316 +vt 0.756757 0.473684 +vt 1.000000 0.526316 +vt 0.756757 0.526316 +vt 1.000000 0.526316 +vt 0.756757 0.473684 +vt 1.000000 0.473684 +vt 1.000000 0.526316 +vt 0.756757 0.473684 +vt 1.000000 0.473684 +vt 0.756757 -0.000000 +vt 1.000000 -0.000000 +vt 0.810811 0.631579 +vt 0.756757 1.000000 +vt 0.756757 0.526316 +vt 0.331081 0.059211 +vt 0.283784 0.052632 +vt 0.331081 0.052632 +vt 0.236486 0.052632 +vt 0.283784 0.059211 +vt 0.236486 0.059211 +vt 0.189189 0.052632 +vt 0.141892 0.052632 +vt 0.189189 0.059211 +vt 0.141892 0.059211 +vt 0.094595 0.059211 +vt 0.047297 0.052632 +vt 0.047297 0.059211 +vt -0.000000 0.059211 +vt 0.709459 0.059211 +vt 0.756757 0.052632 +vt 0.756757 0.059211 +vt 0.662162 0.059211 +vt 0.709459 0.052632 +vt 0.614865 0.059211 +vt 0.662162 0.052632 +vt 0.567568 0.059211 +vt 0.614865 0.052632 +vt 0.520270 0.059211 +vt 0.567568 0.052632 +vt 0.472973 0.059211 +vt 0.520270 0.052632 +vt 0.425676 0.059211 +vt 0.472973 0.052632 +vt 0.378378 0.059211 +vt 0.425676 0.052632 +vt 0.162162 0.940789 +vt 0.148649 0.677632 +vt 0.162162 0.677632 +vt 0.810811 0.894737 +vt 1.000000 1.000000 +vt 0.945946 0.894737 +vt 0.945946 0.631579 +vt 0.013514 0.677632 +vt 0.148649 0.940789 +vt 0.013514 0.940789 +vt -0.000000 0.677632 +vt -0.000000 0.940789 +vt 0.148649 0.651316 +vt 0.013514 0.651316 +vt 0.013514 0.967105 +vt 0.148649 0.967105 +vt 0.297297 0.644737 +vt 0.260135 0.651316 +vt 0.260135 0.644737 +vt 0.334459 0.651316 +vt 0.334459 0.644737 +vt 0.371622 0.651316 +vt 0.408784 0.651316 +vt 0.371622 0.644737 +vt 0.408784 0.644737 +vt 0.445946 0.651316 +vt 0.483108 0.651316 +vt 0.445946 0.644737 +vt 0.483108 0.644737 +vt 0.520270 0.651316 +vt 0.557432 0.651316 +vt 0.520270 0.644737 +vt 0.557432 0.644737 +vt 0.594595 0.651316 +vt 0.037162 0.651316 +vt -0.000000 0.644737 +vt 0.037162 0.644737 +vt 0.074324 0.651316 +vt 0.111486 0.651316 +vt 0.074324 0.644737 +vt 0.111486 0.644737 +vt 0.148649 0.644737 +vt 0.185811 0.651316 +vt 0.185811 0.644737 +vt 0.222973 0.644737 +vt 0.222973 0.651316 +vt 1.000000 0.473684 +vt 1.000000 0.473684 +vt 0.756757 0.526316 +vt 0.094595 0.052632 +vt 0.000000 0.052632 +vt 0.378378 0.052632 +vt 0.297297 0.651316 +vt 0.594595 0.644737 +vt -0.000000 0.651316 +vt 0.148649 0.651316 +vt 0.331081 0.059211 +vt 0.290541 0.434211 +vt 0.283784 0.059211 +vt 0.378378 0.059211 +vt 0.337838 0.434211 +vt 0.425676 0.059211 +vt 0.385135 0.434211 +vt 0.472973 0.059211 +vt 0.432432 0.434211 +vt 0.520270 0.059211 +vt 0.479730 0.434211 +vt 0.567568 0.059211 +vt 0.527027 0.434211 +vt 0.614865 0.059211 +vt 0.574324 0.434211 +vt 0.662162 0.059211 +vt 0.621622 0.434211 +vt 0.709459 0.059211 +vt 0.668919 0.434211 +vt 0.756757 0.059211 +vt 0.716216 0.434211 +vt 0.047297 0.059211 +vt 0.006757 0.434211 +vt -0.000000 0.059211 +vt 0.094595 0.059211 +vt 0.054054 0.434211 +vt 0.141892 0.059211 +vt 0.101351 0.434211 +vt 0.180743 0.434211 +vt 0.148649 0.434211 +vt 0.236486 0.059211 +vt 0.195946 0.434211 +vt 0.189189 0.059211 +vt 0.243243 0.434211 +vt 0.192568 0.539474 +vt 0.160473 0.434211 +vt 0.192568 0.434211 +vt 0.481419 0.539474 +vt 0.449324 0.434211 +vt 0.481419 0.434211 +vt 0.224662 0.539474 +vt 0.224662 0.434211 +vt 0.513514 0.539474 +vt 0.513514 0.434211 +vt 0.256757 0.539474 +vt 0.256757 0.434211 +vt 0.032095 0.539474 +vt 0.000000 0.434211 +vt 0.032095 0.434211 +vt 0.288851 0.539474 +vt 0.288851 0.434211 +vt 0.064189 0.539474 +vt 0.064189 0.434211 +vt 0.320946 0.539474 +vt 0.320946 0.434211 +vt 0.096284 0.539474 +vt 0.096284 0.434211 +vt 0.353041 0.539474 +vt 0.353041 0.434211 +vt 0.128378 0.539474 +vt 0.128378 0.434211 +vt 0.417230 0.539474 +vt 0.385135 0.434211 +vt 0.417230 0.434211 +vt 0.385135 0.539474 +vt 0.160473 0.539474 +vt 0.449324 0.539474 +vt 0.038851 0.539474 +vt 0.074324 0.644737 +vt 0.037162 0.644737 +vt 0.076014 0.539474 +vt 0.111486 0.644737 +vt 0.113176 0.539474 +vt 0.148649 0.644737 +vt 0.182432 0.539474 +vt 0.150338 0.539474 +vt 0.187500 0.539474 +vt 0.222973 0.644737 +vt 0.185811 0.644737 +vt 0.224662 0.539474 +vt 0.260135 0.644737 +vt 0.261824 0.539474 +vt 0.297297 0.644737 +vt 0.331081 0.539474 +vt 0.298986 0.539474 +vt 0.368243 0.539474 +vt 0.334459 0.644737 +vt 0.336149 0.539474 +vt 0.405405 0.539474 +vt 0.371622 0.644737 +vt 0.373311 0.539474 +vt 0.410473 0.539474 +vt 0.445946 0.644737 +vt 0.408784 0.644737 +vt 0.447635 0.539474 +vt 0.483108 0.644737 +vt 0.516892 0.539474 +vt 0.484797 0.539474 +vt 0.521959 0.539474 +vt 0.557432 0.644737 +vt 0.520270 0.644737 +vt 0.591216 0.539474 +vt 0.559122 0.539474 +vt 0.033784 0.539474 +vt -0.000000 0.644737 +vt 0.001689 0.539474 +vt 0.369932 0.434211 +vt 0.331081 0.059211 +vt 0.378378 0.059211 +vt 0.283784 0.059211 +vt 0.322635 0.434211 +vt 0.290541 0.434211 +vt 0.236486 0.059211 +vt 0.275338 0.434211 +vt 0.243243 0.434211 +vt 0.189189 0.059211 +vt 0.228041 0.434211 +vt 0.195946 0.434211 +vt 0.148649 0.434211 +vt 0.180743 0.434211 +vt 0.094595 0.059211 +vt 0.133446 0.434211 +vt 0.101351 0.434211 +vt 0.047297 0.059211 +vt 0.086149 0.434211 +vt 0.054054 0.434211 +vt 0.006757 0.434211 +vt 0.038851 0.434211 +vt 0.709459 0.059211 +vt 0.748311 0.434211 +vt 0.716216 0.434211 +vt 0.662162 0.059211 +vt 0.701014 0.434211 +vt 0.668919 0.434211 +vt 0.614865 0.059211 +vt 0.653716 0.434211 +vt 0.621622 0.434211 +vt 0.567568 0.059211 +vt 0.606419 0.434211 +vt 0.574324 0.434211 +vt 0.527027 0.434211 +vt 0.559122 0.434211 +vt 0.472973 0.059211 +vt 0.511824 0.434211 +vt 0.479730 0.434211 +vt 0.385135 0.434211 +vt 0.425676 0.059211 +vt 0.417230 0.434211 +vt 0.432432 0.434211 +vt 0.464527 0.434211 +vt 0.320946 0.539474 +vt 0.288851 0.434211 +vt 0.320946 0.434211 +vt 0.334459 0.644737 +vt 0.368243 0.539474 +vt 0.371622 0.644737 +vt 0.256757 0.539474 +vt 0.256757 0.434211 +vt 0.297297 0.644737 +vt 0.331081 0.539474 +vt 0.224662 0.434211 +vt 0.261824 0.539474 +vt 0.293919 0.539474 +vt 0.192568 0.539474 +vt 0.192568 0.434211 +vt 0.222973 0.644737 +vt 0.256757 0.539474 +vt 0.260135 0.644737 +vt 0.160473 0.434211 +vt 0.185811 0.644737 +vt 0.219595 0.539474 +vt 0.353041 0.539474 +vt 0.373311 0.539474 +vt 0.408784 0.644737 +vt 0.385135 0.434211 +vt 0.353041 0.434211 +vt 0.442568 0.539474 +vt 0.445946 0.644737 +vt 0.417230 0.539474 +vt 0.385135 0.539474 +vt 0.447635 0.539474 +vt 0.483108 0.644737 +vt 0.449324 0.539474 +vt 0.417230 0.434211 +vt 0.449324 0.434211 +vt 0.516892 0.539474 +vt 0.520270 0.644737 +vt 0.481419 0.434211 +vt 0.554054 0.539474 +vt 0.557432 0.644737 +vt 0.513514 0.539474 +vt 0.513514 0.434211 +vt 0.594595 0.644737 +vt 0.559122 0.539474 +vt 0.591216 0.539474 +vt 0.032095 0.434211 +vt 0.000000 0.539474 +vt 0.000000 0.434211 +vt -0.000000 0.644737 +vt 0.033784 0.539474 +vt 0.037162 0.644737 +vt 0.064189 0.539474 +vt 0.064189 0.434211 +vt 0.070946 0.539474 +vt 0.074324 0.644737 +vt 0.096284 0.539474 +vt 0.076014 0.539474 +vt 0.111486 0.644737 +vt 0.128378 0.434211 +vt 0.096284 0.434211 +vt 0.145270 0.539474 +vt 0.148649 0.644737 +vt 0.160473 0.539474 +vt 0.128378 0.539474 +vt 0.150338 0.539474 +vt 0.425676 0.000000 +vt 0.378378 0.052632 +vt 0.378378 0.000000 +vt 0.094595 0.000000 +vt 0.047297 0.052632 +vt 0.047297 0.000000 +vt 0.472973 0.000000 +vt 0.425676 0.052632 +vt 0.141892 0.000000 +vt 0.094595 0.052632 +vt 0.520270 0.000000 +vt 0.472973 0.052632 +vt 0.189189 0.000000 +vt 0.141892 0.052632 +vt 0.614865 0.000000 +vt 0.567568 0.052632 +vt 0.567568 0.000000 +vt 0.520270 0.052632 +vt 0.236486 0.000000 +vt 0.189189 0.052632 +vt 0.662162 0.000000 +vt 0.614865 0.052632 +vt 0.283784 0.000000 +vt 0.236486 0.052632 +vt 0.709459 0.000000 +vt 0.662162 0.052632 +vt 0.331081 0.000000 +vt 0.283784 0.052632 +vt 0.756757 0.000000 +vt 0.709459 0.052632 +vt 0.331081 0.052632 +vt -0.000000 0.052632 +vt 0.000000 0.000000 +vt 0.172297 0.914474 +vt 0.167230 0.651316 +vt 0.172297 0.651316 +vt 0.167230 0.914474 +vt 0.162162 0.651316 +vt 0.182432 0.914474 +vt 0.177365 0.651316 +vt 0.182432 0.651316 +vt 0.177365 0.914474 +vt 0.172297 0.914474 +vt 0.167230 0.651316 +vt 0.172297 0.651316 +vt 0.167230 0.914474 +vt 0.162162 0.651316 +vt 0.182432 0.914474 +vt 0.177365 0.651316 +vt 0.182432 0.651316 +vt 0.177365 0.914474 +vt 0.172297 0.914474 +vt 0.167230 0.651316 +vt 0.172297 0.651316 +vt 0.167230 0.914474 +vt 0.162162 0.651316 +vt 0.182432 0.914474 +vt 0.177365 0.651316 +vt 0.182432 0.651316 +vt 0.177365 0.914474 +vt 0.172297 0.914474 +vt 0.167230 0.651316 +vt 0.172297 0.651316 +vt 0.167230 0.914474 +vt 0.162162 0.651316 +vt 0.182432 0.914474 +vt 0.177365 0.651316 +vt 0.182432 0.651316 +vt 0.177365 0.914474 +vt 0.172297 0.914474 +vt 0.167230 0.651316 +vt 0.172297 0.651316 +vt 0.167230 0.914474 +vt 0.162162 0.651316 +vt 0.182432 0.914474 +vt 0.177365 0.651316 +vt 0.182432 0.651316 +vt 0.177365 0.914474 +vt 0.172297 0.914474 +vt 0.167230 0.651316 +vt 0.172297 0.651316 +vt 0.167230 0.914474 +vt 0.162162 0.651316 +vt 0.182432 0.914474 +vt 0.177365 0.651316 +vt 0.182432 0.651316 +vt 0.177365 0.914474 +vt 0.172297 0.914474 +vt 0.167230 0.651316 +vt 0.172297 0.651316 +vt 0.167230 0.914474 +vt 0.162162 0.651316 +vt 0.182432 0.914474 +vt 0.177365 0.651316 +vt 0.182432 0.651316 +vt 0.177365 0.914474 +vt 0.172297 0.914474 +vt 0.167230 0.651316 +vt 0.172297 0.651316 +vt 0.177365 0.914474 +vt 0.177365 0.651316 +vt 0.177365 0.914474 +vt 0.172297 0.651316 +vt 0.177365 0.651316 +vt 0.172297 0.914474 +vt 0.167230 0.651316 +vt 0.322635 0.434211 +vt 0.369932 0.434211 +vt 0.417230 0.434211 +vt 0.464527 0.434211 +vt 0.511824 0.434211 +vt 0.559122 0.434211 +vt 0.606419 0.434211 +vt 0.653716 0.434211 +vt 0.701014 0.434211 +vt 0.748311 0.434211 +vt 0.038851 0.434211 +vt 0.086149 0.434211 +vt 0.133446 0.434211 +vt 0.228041 0.434211 +vt 0.275338 0.434211 +vt 0.000000 0.539474 +vt 0.070946 0.539474 +vt 0.108108 0.539474 +vt 0.145270 0.539474 +vt 0.219595 0.539474 +vt 0.256757 0.539474 +vt 0.293919 0.539474 +vt 0.442568 0.539474 +vt 0.479730 0.539474 +vt 0.554054 0.539474 +vt 0.594595 0.644737 +vt 0.337838 0.434211 +vt 0.141892 0.059211 +vt 0.000000 0.059211 +vt 0.756757 0.059211 +vt 0.520270 0.059211 +vt 0.288851 0.539474 +vt 0.336149 0.539474 +vt 0.298986 0.539474 +vt 0.224662 0.539474 +vt 0.224662 0.539474 +vt 0.187500 0.539474 +vt 0.405405 0.539474 +vt 0.410473 0.539474 +vt 0.479730 0.539474 +vt 0.484797 0.539474 +vt 0.481419 0.539474 +vt 0.521959 0.539474 +vt 0.032095 0.539474 +vt 0.001689 0.539474 +vt 0.038851 0.539474 +vt 0.108108 0.539474 +vt 0.113176 0.539474 +vt 0.182432 0.539474 +vt 0.756757 0.052632 +vt 0.162162 0.914474 +vt 0.162162 0.914474 +vt 0.162162 0.914474 +vt 0.162162 0.914474 +vt 0.162162 0.914474 +vt 0.162162 0.914474 +vt 0.162162 0.914474 +vt 0.167230 0.914474 +vt 0.167230 0.914474 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.9033 0.2095 0.3742 +vn 0.7031 0.1067 0.7031 +vn 0.6914 0.2095 0.6914 +vn 0.9778 0.2095 0.0000 +vn 0.9186 0.1067 0.3805 +vn 0.9033 0.2095 -0.3742 +vn 0.9943 0.1067 0.0000 +vn 0.6914 0.2095 -0.6914 +vn 0.9186 0.1067 -0.3805 +vn 0.3742 0.2095 -0.9033 +vn 0.7031 0.1067 -0.7031 +vn 0.0000 0.2095 -0.9778 +vn 0.3805 0.1067 -0.9186 +vn -0.3742 0.2095 -0.9033 +vn 0.0000 0.1067 -0.9943 +vn -0.6914 0.2095 -0.6914 +vn -0.3805 0.1067 -0.9186 +vn -0.9033 0.2095 -0.3742 +vn -0.7031 0.1067 -0.7031 +vn -0.9778 0.2095 0.0000 +vn -0.9186 0.1067 -0.3805 +vn -0.9033 0.2095 0.3742 +vn -0.9943 0.1067 0.0000 +vn -0.6914 0.2095 0.6914 +vn -0.9186 0.1067 0.3805 +vn -0.3742 0.2095 0.9033 +vn -0.7031 0.1067 0.7031 +vn 0.0000 0.1067 0.9943 +vn -0.3805 0.1067 0.9186 +vn 0.3742 0.2095 0.9033 +vn 0.0000 0.2095 0.9778 +vn 0.3805 0.1067 0.9186 +vn 0.7016 -0.1241 0.7016 +vn -0.9167 -0.1241 -0.3797 +vn 0.9167 -0.1241 0.3797 +vn -0.9922 -0.1241 0.0000 +vn 0.9922 -0.1241 0.0000 +vn -0.9167 -0.1241 0.3797 +vn 0.9167 -0.1241 -0.3797 +vn -0.7016 -0.1241 0.7016 +vn 0.7016 -0.1241 -0.7016 +vn -0.3797 -0.1241 0.9167 +vn 0.3797 -0.1241 -0.9167 +vn 0.0000 -0.1241 0.9922 +vn -0.3797 -0.1241 -0.9167 +vn 0.0000 -0.1241 -0.9922 +vn 0.3797 -0.1241 0.9167 +vn -0.7016 -0.1241 -0.7016 +vn -0.6860 -0.2425 0.6860 +vn -0.8963 -0.2425 0.3713 +vn -0.3712 -0.2425 0.8963 +vn 0.0000 -0.2425 0.9701 +vn 0.6860 -0.2425 0.6860 +vn 0.3712 -0.2425 0.8963 +vn 0.8963 -0.2425 0.3713 +vn 0.9701 -0.2425 0.0000 +vn 0.8963 -0.2425 -0.3713 +vn 0.6860 -0.2425 -0.6860 +vn 0.0000 -0.2425 -0.9701 +vn 0.3712 -0.2425 -0.8963 +vn -0.3712 -0.2425 -0.8963 +vn -0.8963 -0.2425 -0.3712 +vn -0.6860 -0.2425 -0.6860 +vn -0.9701 -0.2425 0.0000 +vn -0.9943 -0.1067 0.0000 +vn -0.9033 -0.2095 0.3742 +vn -0.9778 -0.2095 0.0000 +vn -0.6914 -0.2095 0.6914 +vn -0.9186 -0.1067 0.3805 +vn -0.7031 -0.1067 0.7031 +vn -0.3742 -0.2095 0.9033 +vn -0.3805 -0.1067 0.9186 +vn 0.0000 -0.2095 0.9778 +vn 0.0000 -0.1067 0.9943 +vn 0.3805 -0.1067 0.9186 +vn 0.6914 -0.2095 0.6914 +vn 0.7031 -0.1067 0.7031 +vn 0.9033 -0.2095 0.3742 +vn 0.9186 -0.1067 0.3805 +vn 0.9943 -0.1067 0.0000 +vn 0.9033 -0.2095 -0.3742 +vn 0.9186 -0.1067 -0.3805 +vn 0.6914 -0.2095 -0.6914 +vn 0.7031 -0.1067 -0.7031 +vn 0.3742 -0.2095 -0.9033 +vn 0.3805 -0.1067 -0.9186 +vn 0.0000 -0.2095 -0.9778 +vn 0.0000 -0.1067 -0.9943 +vn -0.3805 -0.1067 -0.9186 +vn -0.6914 -0.2095 -0.6914 +vn -0.7031 -0.1067 -0.7031 +vn -0.9033 -0.2095 -0.3742 +vn -0.9186 -0.1067 -0.3805 +vn -0.7016 0.1241 -0.7016 +vn -0.8963 0.2425 -0.3712 +vn -0.6860 0.2425 -0.6860 +vn -0.9922 0.1241 0.0000 +vn -0.9701 0.2425 0.0000 +vn -0.9167 0.1241 -0.3797 +vn -0.9167 0.1241 0.3797 +vn -0.7016 0.1241 0.7016 +vn -0.6860 0.2425 0.6860 +vn -0.8963 0.2425 0.3712 +vn -0.3712 0.2425 0.8963 +vn -0.3797 0.1241 -0.9167 +vn -0.3712 0.2425 -0.8963 +vn 0.0000 0.1241 -0.9922 +vn 0.0000 0.2425 -0.9701 +vn 0.3797 0.1241 -0.9167 +vn 0.3712 0.2425 -0.8963 +vn 0.7016 0.1241 -0.7016 +vn 0.6860 0.2425 -0.6860 +vn 0.9167 0.1241 -0.3797 +vn 0.8963 0.2425 -0.3712 +vn 0.9922 0.1241 0.0000 +vn 0.9701 0.2425 0.0000 +vn 0.9167 0.1241 0.3797 +vn 0.8963 0.2425 0.3712 +vn 0.7016 0.1241 0.7016 +vn 0.6860 0.2425 0.6860 +vn 0.3797 0.1241 0.9167 +vn 0.3712 0.2425 0.8963 +vn 0.0000 0.1241 0.9922 +vn 0.0000 0.2425 0.9701 +vn -0.3797 0.1241 0.9167 +vn 0.9239 0.0000 -0.3827 +vn -0.7071 0.0000 0.7071 +vn -0.9239 0.0000 0.3827 +vn 0.7071 0.0000 -0.7071 +vn -0.3827 0.0000 0.9239 +vn 0.3827 0.0000 -0.9239 +vn -0.3827 0.0000 -0.9239 +vn 0.3827 0.0000 0.9239 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +vn -0.9239 0.0000 -0.3827 +vn 0.9239 0.0000 0.3827 +vn 0.7071 0.7071 0.0000 +vn 0.9239 0.3827 0.0000 +vn -0.9239 0.3827 0.0000 +vn -0.7071 0.7071 0.0000 +vn 0.3827 0.9239 0.0000 +vn -0.3827 0.9239 0.0000 +vn 0.3742 -0.2095 0.9033 +vn 0.9778 -0.2095 0.0000 +vn -0.3742 -0.2095 -0.9033 +s off +f 2/1/1 3/2/1 1/3/1 +f 4/4/2 7/5/2 3/6/2 +f 8/7/3 5/8/3 7/9/3 +f 6/10/4 1/11/4 5/12/4 +f 7/9/5 1/13/5 3/14/5 +f 170/15/6 2/16/6 6/17/6 +f 302/18/5 311/19/5 315/20/5 +f 322/21/5 301/22/5 300/23/5 +f 300/23/5 307/24/5 322/21/5 +f 318/25/5 299/26/5 298/27/5 +f 297/28/5 318/25/5 298/27/5 +f 320/29/5 297/28/5 296/30/5 +f 295/31/5 320/29/5 296/30/5 +f 294/32/5 310/33/5 295/34/5 +f 293/35/5 316/36/5 294/32/5 +f 292/37/5 312/38/5 293/35/5 +f 291/39/5 321/40/5 292/37/5 +f 306/41/5 308/42/5 291/39/5 +f 305/43/5 317/44/5 306/41/5 +f 304/45/5 313/46/5 305/43/5 +f 303/47/5 319/48/5 304/45/5 +f 315/20/5 303/47/5 302/18/5 +f 171/49/4 176/50/4 172/51/4 +f 169/52/6 4/53/6 2/16/6 +f 171/54/6 8/7/6 4/53/6 +f 172/55/6 6/17/6 8/7/6 +f 175/56/6 173/57/6 174/58/6 +f 170/59/2 174/58/2 169/60/2 +f 172/61/1 175/56/1 170/62/1 +f 169/63/3 173/57/3 171/64/3 +f 271/65/6 283/66/6 270/67/6 +f 287/68/6 271/65/6 272/69/6 +f 272/69/6 281/70/6 287/68/6 +f 285/71/6 273/72/6 274/73/6 +f 274/73/6 276/74/6 285/71/6 +f 289/75/6 259/76/6 260/77/6 +f 260/77/6 280/78/6 289/75/6 +f 284/79/6 261/80/6 262/81/6 +f 262/81/6 278/82/6 284/79/6 +f 288/83/6 263/84/6 264/85/6 +f 264/85/6 282/86/6 288/83/6 +f 286/87/6 265/88/6 266/89/6 +f 267/90/6 286/87/6 266/89/6 +f 290/91/6 267/90/6 268/92/6 +f 269/93/6 290/91/6 268/92/6 +f 270/67/6 279/94/6 269/93/6 +f 2/1/1 4/95/1 3/2/1 +f 4/4/2 8/96/2 7/5/2 +f 8/7/3 6/17/3 5/8/3 +f 6/10/4 2/97/4 1/11/4 +f 7/9/5 5/8/5 1/13/5 +f 170/15/6 169/52/6 2/16/6 +f 302/18/5 301/22/5 311/19/5 +f 322/21/5 311/19/5 301/22/5 +f 300/23/5 299/26/5 307/24/5 +f 318/25/5 307/24/5 299/26/5 +f 297/28/5 314/98/5 318/25/5 +f 320/29/5 314/98/5 297/28/5 +f 295/31/5 310/99/5 320/29/5 +f 294/32/5 316/36/5 310/33/5 +f 293/35/5 312/38/5 316/36/5 +f 292/37/5 321/40/5 312/38/5 +f 291/39/5 308/42/5 321/40/5 +f 306/41/5 317/44/5 308/42/5 +f 305/43/5 313/46/5 317/44/5 +f 304/45/5 319/48/5 313/46/5 +f 303/47/5 309/100/5 319/48/5 +f 315/20/5 309/100/5 303/47/5 +f 171/49/4 173/57/4 176/50/4 +f 169/52/6 171/54/6 4/53/6 +f 171/54/6 172/55/6 8/7/6 +f 172/55/6 170/15/6 6/17/6 +f 175/56/6 176/50/6 173/57/6 +f 170/59/2 175/56/2 174/58/2 +f 172/61/1 176/50/1 175/56/1 +f 169/63/3 174/58/3 173/57/3 +f 271/65/6 277/101/6 283/66/6 +f 287/68/6 277/101/6 271/65/6 +f 272/69/6 273/72/6 281/70/6 +f 285/71/6 281/70/6 273/72/6 +f 274/73/6 259/76/6 276/74/6 +f 289/75/6 276/74/6 259/76/6 +f 260/77/6 261/80/6 280/78/6 +f 284/79/6 280/78/6 261/80/6 +f 262/81/6 263/102/6 278/82/6 +f 288/83/6 278/103/6 263/84/6 +f 264/85/6 265/88/6 282/86/6 +f 286/87/6 282/86/6 265/88/6 +f 267/90/6 275/104/6 286/87/6 +f 290/91/6 275/104/6 267/90/6 +f 269/93/6 279/94/6 290/91/6 +f 270/67/6 283/66/6 279/94/6 +s 1 +f 20/105/7 35/106/8 19/107/9 +f 21/108/10 36/109/11 20/105/7 +f 22/110/12 37/111/13 21/108/10 +f 23/112/14 38/113/15 22/110/12 +f 24/114/16 39/115/17 23/112/14 +f 9/116/18 40/117/19 24/114/16 +f 10/118/20 25/119/21 9/116/18 +f 11/120/22 26/121/23 10/118/20 +f 12/122/24 27/123/25 11/120/22 +f 13/124/26 28/125/27 12/122/24 +f 14/126/28 29/127/29 13/128/26 +f 15/129/30 30/130/31 14/126/28 +f 16/131/32 31/132/33 15/129/30 +f 16/131/32 33/133/34 32/134/35 +f 18/135/36 33/136/34 17/137/37 +f 19/107/9 34/138/38 18/135/36 +f 51/139/39 34/140/38 35/141/8 +f 44/142/40 27/143/25 28/144/27 +f 52/145/41 35/141/8 36/146/11 +f 45/147/42 28/144/27 29/148/29 +f 53/149/43 36/146/11 37/150/13 +f 46/151/44 29/152/29 30/153/31 +f 54/154/45 37/150/13 38/155/15 +f 47/156/46 30/153/31 31/157/33 +f 55/158/47 38/155/15 39/159/17 +f 48/160/48 31/157/33 32/161/35 +f 56/162/49 39/159/17 40/163/19 +f 49/164/50 32/161/35 33/165/34 +f 42/166/51 25/167/21 26/168/23 +f 41/169/52 40/163/19 25/167/21 +f 50/170/53 33/165/34 34/140/38 +f 43/171/54 26/168/23 27/143/25 +f 46/172/44 63/173/55 62/174/56 +f 47/175/46 64/176/57 63/173/55 +f 48/177/48 65/178/58 64/176/57 +f 50/179/53 65/178/58 49/180/50 +f 50/181/53 67/182/59 66/183/60 +f 51/184/39 68/185/61 67/182/59 +f 52/186/41 69/187/62 68/185/61 +f 54/188/45 69/187/62 53/189/43 +f 55/190/47 70/191/63 54/192/45 +f 56/193/49 71/194/64 55/195/47 +f 56/196/49 57/197/65 72/198/66 +f 41/199/52 58/200/67 57/197/65 +f 43/201/54 58/200/67 42/202/51 +f 43/203/54 60/204/68 59/205/69 +f 45/206/42 60/204/68 44/207/40 +f 46/208/44 61/209/70 45/210/42 +f 82/211/71 121/212/72 81/213/73 +f 97/214/74 122/215/75 98/216/76 +f 113/217/77 98/218/76 114/219/78 +f 77/220/79 114/221/78 78/222/80 +f 130/223/81 77/220/79 78/224/80 +f 93/225/82 130/226/81 94/227/83 +f 109/228/84 94/229/83 110/230/85 +f 86/231/86 109/228/84 110/232/85 +f 125/233/87 86/234/86 126/235/88 +f 101/236/89 126/237/88 102/238/90 +f 117/239/91 102/240/90 118/241/92 +f 73/242/93 118/243/92 74/244/94 +f 134/245/95 73/242/93 74/246/94 +f 89/247/96 134/248/95 90/249/97 +f 82/250/71 105/251/98 106/252/99 +f 106/253/99 89/247/96 90/254/97 +f 91/255/100 106/256/99 90/257/97 +f 108/258/101 91/259/100 92/260/102 +f 106/256/99 83/261/103 82/262/71 +f 84/263/104 107/264/105 108/258/101 +f 83/261/103 122/265/75 82/262/71 +f 84/263/104 123/266/106 83/267/103 +f 122/265/75 99/268/107 98/269/76 +f 100/270/108 123/271/106 124/272/109 +f 99/268/107 114/273/78 98/269/76 +f 116/274/110 99/275/107 100/270/108 +f 90/257/97 135/276/111 91/255/100 +f 91/277/100 136/278/112 92/260/102 +f 74/279/94 135/276/111 134/280/95 +f 136/278/112 75/281/113 76/282/114 +f 74/279/94 119/283/115 75/284/113 +f 75/285/113 120/286/116 76/282/114 +f 103/287/117 118/288/92 102/289/90 +f 120/286/116 103/290/117 104/291/118 +f 126/292/88 103/287/117 102/289/90 +f 104/291/118 127/293/119 128/294/120 +f 87/295/121 126/292/88 86/296/86 +f 88/297/122 127/298/119 87/299/121 +f 110/300/85 87/301/121 86/302/86 +f 88/303/122 111/304/123 112/305/124 +f 95/306/125 110/300/85 94/307/83 +f 112/305/124 95/308/125 96/309/126 +f 94/307/83 131/310/127 95/306/125 +f 95/311/125 132/312/128 96/309/126 +f 78/313/80 131/310/127 130/314/81 +f 132/312/128 79/315/129 80/316/130 +f 78/313/80 115/317/131 79/318/129 +f 79/319/129 116/274/110 80/316/130 +f 150/320/132 165/321/3 149/322/3 +f 143/323/133 158/324/134 142/325/134 +f 151/326/135 166/327/132 150/320/132 +f 144/328/136 159/329/133 143/323/133 +f 152/330/137 167/331/135 151/326/135 +f 145/332/4 160/333/136 144/328/136 +f 138/334/138 153/335/2 137/336/2 +f 137/336/2 168/337/137 152/330/137 +f 146/338/139 161/339/4 145/332/4 +f 139/340/140 154/341/138 138/334/138 +f 147/342/141 162/343/139 146/338/139 +f 140/344/142 155/345/140 139/340/140 +f 148/346/143 163/347/141 147/342/141 +f 141/348/1 156/349/142 140/344/142 +f 149/322/3 164/350/143 148/346/143 +f 142/325/134 157/351/1 141/352/1 +f 178/353/6 179/354/144 177/355/6 +f 180/356/144 181/357/145 179/354/144 +f 184/358/146 185/359/147 183/360/146 +f 186/361/147 177/355/6 185/359/147 +f 188/362/6 189/363/144 187/364/6 +f 190/365/144 191/366/145 189/363/144 +f 194/367/146 195/368/147 193/369/146 +f 196/370/147 187/364/6 195/368/147 +f 198/371/6 199/372/144 197/373/6 +f 200/374/144 201/375/145 199/372/144 +f 204/376/146 205/377/147 203/378/146 +f 206/379/147 197/373/6 205/377/147 +f 208/380/6 209/381/144 207/382/6 +f 210/383/144 211/384/145 209/381/144 +f 214/385/146 215/386/147 213/387/146 +f 216/388/147 207/382/6 215/386/147 +f 218/389/6 219/390/144 217/391/6 +f 220/392/144 221/393/145 219/390/144 +f 224/394/146 225/395/147 223/396/146 +f 226/397/147 217/391/6 225/395/147 +f 228/398/6 229/399/144 227/400/6 +f 230/401/144 231/402/145 229/399/144 +f 234/403/146 235/404/147 233/405/146 +f 236/406/147 227/400/6 235/404/147 +f 238/407/6 239/408/144 237/409/6 +f 240/410/144 241/411/145 239/408/144 +f 244/412/146 245/413/147 243/414/146 +f 246/415/147 237/409/6 245/413/147 +f 249/416/144 257/417/145 250/418/144 +f 251/419/148 250/418/144 252/420/148 +f 254/421/146 255/422/147 253/423/146 +f 256/424/147 247/425/149 255/422/147 +f 20/105/7 36/426/11 35/106/8 +f 21/108/10 37/427/13 36/109/11 +f 22/110/12 38/428/15 37/111/13 +f 23/112/14 39/429/17 38/113/15 +f 24/114/16 40/430/19 39/115/17 +f 9/116/18 25/431/21 40/117/19 +f 10/118/20 26/432/23 25/119/21 +f 11/120/22 27/433/25 26/121/23 +f 12/122/24 28/434/27 27/123/25 +f 13/124/26 29/435/29 28/125/27 +f 14/126/28 30/436/31 29/127/29 +f 15/129/30 31/437/33 30/130/31 +f 16/131/32 32/438/35 31/132/33 +f 16/131/32 17/137/37 33/133/34 +f 18/135/36 34/439/38 33/136/34 +f 19/107/9 35/440/8 34/138/38 +f 51/139/39 50/170/53 34/140/38 +f 44/142/40 43/171/54 27/143/25 +f 52/145/41 51/139/39 35/141/8 +f 45/147/42 44/142/40 28/144/27 +f 53/149/43 52/145/41 36/146/11 +f 46/151/44 45/441/42 29/152/29 +f 54/154/45 53/149/43 37/150/13 +f 47/156/46 46/151/44 30/153/31 +f 55/158/47 54/154/45 38/155/15 +f 48/160/48 47/156/46 31/157/33 +f 56/162/49 55/158/47 39/159/17 +f 49/164/50 48/160/48 32/161/35 +f 42/166/51 41/169/52 25/167/21 +f 41/169/52 56/162/49 40/163/19 +f 50/170/53 49/164/50 33/165/34 +f 43/171/54 42/166/51 26/168/23 +f 46/172/44 47/442/46 63/173/55 +f 47/175/46 48/443/48 64/176/57 +f 48/177/48 49/444/50 65/178/58 +f 50/179/53 66/183/60 65/178/58 +f 50/181/53 51/445/39 67/182/59 +f 51/184/39 52/446/41 68/185/61 +f 52/186/41 53/447/43 69/187/62 +f 54/188/45 70/191/63 69/187/62 +f 55/190/47 71/194/64 70/191/63 +f 56/193/49 72/198/66 71/194/64 +f 56/196/49 41/448/52 57/197/65 +f 41/199/52 42/449/51 58/200/67 +f 43/201/54 59/205/69 58/200/67 +f 43/203/54 44/450/40 60/204/68 +f 45/206/42 61/451/70 60/204/68 +f 46/208/44 62/174/56 61/209/70 +f 82/211/71 122/452/75 121/212/72 +f 97/214/74 121/212/72 122/215/75 +f 113/217/77 97/214/74 98/218/76 +f 77/220/79 113/217/77 114/221/78 +f 130/223/81 129/453/150 77/220/79 +f 93/225/82 129/453/150 130/226/81 +f 109/228/84 93/225/82 94/229/83 +f 86/231/86 85/454/151 109/228/84 +f 125/233/87 85/455/151 86/234/86 +f 101/236/89 125/233/87 126/237/88 +f 117/239/91 101/236/89 102/240/90 +f 73/242/93 117/239/91 118/243/92 +f 134/245/95 133/456/152 73/242/93 +f 89/247/96 133/456/152 134/248/95 +f 82/250/71 81/213/73 105/251/98 +f 106/253/99 105/251/98 89/247/96 +f 91/255/100 107/457/105 106/256/99 +f 108/258/101 107/458/105 91/259/100 +f 106/256/99 107/457/105 83/261/103 +f 84/263/104 83/459/103 107/264/105 +f 83/261/103 123/460/106 122/265/75 +f 84/263/104 124/272/109 123/266/106 +f 122/265/75 123/460/106 99/268/107 +f 100/270/108 99/461/107 123/271/106 +f 99/268/107 115/317/131 114/273/78 +f 116/274/110 115/462/131 99/275/107 +f 90/257/97 134/280/95 135/276/111 +f 91/277/100 135/463/111 136/278/112 +f 74/279/94 75/284/113 135/276/111 +f 136/278/112 135/464/111 75/281/113 +f 74/279/94 118/288/92 119/283/115 +f 75/285/113 119/465/115 120/286/116 +f 103/287/117 119/283/115 118/288/92 +f 120/286/116 119/466/115 103/290/117 +f 126/292/88 127/467/119 103/287/117 +f 104/291/118 103/468/117 127/293/119 +f 87/295/121 127/467/119 126/292/88 +f 88/297/122 128/294/120 127/298/119 +f 110/300/85 111/469/123 87/301/121 +f 88/303/122 87/470/121 111/304/123 +f 95/306/125 111/469/123 110/300/85 +f 112/305/124 111/471/123 95/308/125 +f 94/307/83 130/314/81 131/310/127 +f 95/311/125 131/472/127 132/312/128 +f 78/313/80 79/318/129 131/310/127 +f 132/312/128 131/473/127 79/315/129 +f 78/313/80 114/273/78 115/317/131 +f 79/319/129 115/474/131 116/274/110 +f 150/320/132 166/327/132 165/321/3 +f 143/323/133 159/329/133 158/324/134 +f 151/326/135 167/331/135 166/327/132 +f 144/328/136 160/333/136 159/329/133 +f 152/330/137 168/337/137 167/331/135 +f 145/332/4 161/339/4 160/333/136 +f 138/334/138 154/341/138 153/335/2 +f 137/336/2 153/335/2 168/337/137 +f 146/338/139 162/343/139 161/339/4 +f 139/340/140 155/345/140 154/341/138 +f 147/342/141 163/347/141 162/343/139 +f 140/344/142 156/349/142 155/345/140 +f 148/346/143 164/350/143 163/347/141 +f 141/348/1 157/475/1 156/349/142 +f 149/322/3 165/321/3 164/350/143 +f 142/325/134 158/324/134 157/351/1 +f 178/353/6 180/356/144 179/354/144 +f 180/356/144 182/476/145 181/357/145 +f 184/358/146 186/361/147 185/359/147 +f 186/361/147 178/353/6 177/355/6 +f 188/362/6 190/365/144 189/363/144 +f 190/365/144 192/477/145 191/366/145 +f 194/367/146 196/370/147 195/368/147 +f 196/370/147 188/362/6 187/364/6 +f 198/371/6 200/374/144 199/372/144 +f 200/374/144 202/478/145 201/375/145 +f 204/376/146 206/379/147 205/377/147 +f 206/379/147 198/371/6 197/373/6 +f 208/380/6 210/383/144 209/381/144 +f 210/383/144 212/479/145 211/384/145 +f 214/385/146 216/388/147 215/386/147 +f 216/388/147 208/380/6 207/382/6 +f 218/389/6 220/392/144 219/390/144 +f 220/392/144 222/480/145 221/393/145 +f 224/394/146 226/397/147 225/395/147 +f 226/397/147 218/389/6 217/391/6 +f 228/398/6 230/401/144 229/399/144 +f 230/401/144 232/481/145 231/402/145 +f 234/403/146 236/406/147 235/404/147 +f 236/406/147 228/398/6 227/400/6 +f 238/407/6 240/410/144 239/408/144 +f 240/410/144 242/482/145 241/411/145 +f 244/412/146 246/415/147 245/413/147 +f 246/415/147 238/407/6 237/409/6 +f 249/416/144 258/483/145 257/417/145 +f 251/419/148 249/416/144 250/418/144 +f 254/421/146 256/424/147 255/422/147 +f 256/424/147 248/484/149 247/425/149 diff --git a/src/main/resources/assets/hbm/sounds.json b/src/main/resources/assets/hbm/sounds.json index fa6278953..db344e034 100644 --- a/src/main/resources/assets/hbm/sounds.json +++ b/src/main/resources/assets/hbm/sounds.json @@ -183,7 +183,7 @@ "entity.megaquacc": {"category": "hostile", "sounds": [{"name": "entity/megaquacc", "stream": false}]}, "entity.ufoBeam": {"category": "hostile", "sounds": [{"name": "entity/ufoBeamShort", "stream": false}]}, "entity.ufoBlast": {"category": "hostile", "sounds": [{"name": "entity/ufoBlast", "stream": false}]}, - "entity.siegeIdle": {"category": "hostile", "sounds": ["entity/siegeIdle1", "entity/siegeIdle2"]}, + "entity.siegeIdle": {"category": "hostile", "sounds": ["entity/siegeIdle1"]}, "entity.siegeHurt": {"category": "hostile", "sounds": ["entity/siegeHurt1", "entity/siegeHurt2"]}, "entity.siegeDeath": {"category": "hostile", "sounds": ["entity/siegeDeath1", "entity/siegeDeath2", "entity/siegeDeath3"]}, diff --git a/src/main/resources/assets/hbm/sounds/entity/vomit.ogg b/src/main/resources/assets/hbm/sounds/player/vomit.ogg similarity index 100% rename from src/main/resources/assets/hbm/sounds/entity/vomit.ogg rename to src/main/resources/assets/hbm/sounds/player/vomit.ogg diff --git a/src/main/resources/assets/hbm/textures/armor/mask_olde.png b/src/main/resources/assets/hbm/textures/armor/mask_olde.png new file mode 100644 index 0000000000000000000000000000000000000000..870d8e11c15ee496f21d93fd7eb26db195c62248 GIT binary patch literal 708 zcmV;#0z3VQP)LPEe;LogtHlPGWah9tAKE2 zN?TdXv5f({5F~{~+WZkIZiO@KYNyPqycA)Uaou%2gdn5{_rCeQHv^n-!v7BK z*aG*r*EI2F8{Y~SXF>e_^Y@)SQpXZd8x}6kf;dbn4tptZe|t^pdg9IS;p@+%)e8vp zdOd118XE#nt6`5R1aAy_>##^A-<3zWpTt zL@V&=-D{Er9^GkVAxQu@T!9n-gqs8LQU`gZ`7y}EB_`f1AaQkhzNNxMv0xW^y&g%q zqp;TuBw3I&10Ss~k@np28;bQUd<()v!lyrU1^@t@a{>UySfm!j;CbX|u^v{tK;5CZG<8r5o*0ARgdBb`nMCm#$3n%pbn*jw;a2qED6K31z0 zmdhnv*G0Kpj#NxlB4gXO#yKa>Ia!vqA-!punIkB z5JDiI&j-2iUI5Uf#L{0Wt7)1vpU<&aEKn>KF&qx}nsRA{Y$9VRc^I)47={7Q^N`Es z5(iI(v_c~3U#;0}QmIse<2dMcyIU3*h7lARjYhF5s6!}`PN$QVXt&$sI1aU1t&KZs znr5)BR4RMD4~HN%9*@!KbTFN6KDYAZK(dU-AOiroTy86&4&5&4C8P!O`8@ch-hd}t q@UM_^90#3F2cG9WNBr0000tT9-MIS;6d@-dHWjHKYX-WROX1{RVBp)cF(4Qt$fqPUX{Kt z*nhw1kf$A=x`Gl26g90n-v0aLn@4TuKeA@))@d+UJm*k+FemzMY`i2xQcpy7|EoX8 z_)||Z{h9l44s$|zb$IUPUygUT=_bC&xGna+TJL;)g8a{aRqMGAo#&SJrr%bWKYtXVYrO1O-roHk5HM#!e2c}VxT}>@4S?Qe@O1TaS?83{1OOl$ BiLd|w literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/gas_coal.png b/src/main/resources/assets/hbm/textures/blocks/gas_coal.png new file mode 100644 index 0000000000000000000000000000000000000000..78803419906bf0fa6ee9559b27a1f4b14888416e GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf&(GY)N%uz4#B+-1r0>*-)lRrrL zw{TyGah%7<6607RF(Ku^=`|rd&H+a{${3lMf5uhJoXT~*=X4nx5V(15HfD%mmVWYP)S`B(*Pp*N%W~`IL);zpR4yI!6^`(EFzqpvpAM8oA)U0nR8bHAKF-*?W1e-ERGoD96Ih`)J!(eh8e zD_(6Pghb&h_QHVnwrH+cv)MV_6pSdWYB3w!$4-(;6%m3r3?6Q4|$&dmG9Q#^Z7JF?*)H zi}MNddWZFTjcJ;c%VoN0knbTV)d0AAcrvuJOa@-I+CGb!HbO<2?j^q54QmkOF f;_zKG{ZH@(f8T_`>C==I00000NkvXXu0mjfykw}q literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/mask_piss.png b/src/main/resources/assets/hbm/textures/items/mask_piss.png new file mode 100644 index 0000000000000000000000000000000000000000..91585fe1a1082d1407a3dca32c6410cc8a1d90aa GIT binary patch literal 299 zcmV+`0o4A9P)l35p|Fea3U@KH$o16`Czi9{QOkbpX^C4bb~ zau?eh3j7G6GSyl(geoQ6=FUtpbMC-h|CUj2Ja=2}(-f5`oW284)hbbp$4^YAGvm(% z>(yHc@D;`MY@6@h?!rf-ArIXyQu@5lHwHjkFA$dC@N;0X{A^q}CzR4}%v!ooi9%T7 zYF16?^c}LisOA-cX?9SF!gIG}6vYe%kJMdQ0x5m6yl7B1aF-u1Ta4Hf*_=4+gBsrvQEUVZV?oAf0Y0L002ovPDHLkV1mi*d;|ah literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/mask_rag.png b/src/main/resources/assets/hbm/textures/items/mask_rag.png new file mode 100644 index 0000000000000000000000000000000000000000..b628d587f4a5ad101df69631cd31068c8f2911cd GIT binary patch literal 294 zcmV+>0oneEP)r!*Dp@X*3S*F8G+e zmH^xD9jdLc2YciFevgh)Xq_;feFgxbUl2;k>3C$Z_-b6ZCe%7<%!DsYZV07(nAHn+a07*qoM6N<$f*=cf3IG5A literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/robes_helmet.png b/src/main/resources/assets/hbm/textures/items/robes_helmet.png index de8532a3f0f0eb6acd757bfad824239671e9814c..da43a658f96abf7f9f630e507613a74159ef783e 100644 GIT binary patch delta 143 zcmV;A0C4}N0=of_G=FkQL_t(Ijop#k34kyRMQ_9nGDvpF;N2mEWQO`V!*lFjUZELWEI%c0Q#xSQtz%nT73 ximD2Cf5D)nwy3YyKQIL_b9oW~iqwCU4gP&6Y-@phb^rhX00>D%PDHLkV1jX{KYjoJ delta 250 zcmV2E#Du z&jxMVsc52G=F+YL_t(Ijm1*i4Zt7>6ypXC!VV7Z4h+H!_RHjoNYli$_a)pN z4>hH~LG#dB8%Xrt3F9449%)4pU!w8QsH&;fx@a;6s=6&^%~P8_@eW>tR|PzrD-i7; z@!zaqyJJjN%*+Fy%$h~y=5asL(|sV83FZ`D-gZBN3tkR3Q4k&x1PK5D002ovPDHLk FV1o8CK$idj delta 215 zcmV;|04V>%0fPdNG=I8DL_t(Ijjd8a5`-WO3y#l12S2VJe1hKqpO8JcWl8}(?DkY> zl7>>?$8h=(LZIaPzB>zEmW2SYZCkDlEwVj_5GdrX11nGgoh$NnU0vaTy!k1mC!H#W zcgWqbC;TcP*2SUCM-3)f6fL;xV4mk^)Hn3^6%OnGbyq!osZi;=p=VtatSHI6RMimA z^Q>&P#O1Eo10g>R&aU{_0*QdUHOAN#bO7MJCjcDBk=3VZ;&oja*m~Mu;sYyCZw}K002ovPDHLkV1m{7V;%qi diff --git a/src/main/resources/assets/hbm/textures/models/machines/tower_large.png b/src/main/resources/assets/hbm/textures/models/machines/tower_large.png new file mode 100644 index 0000000000000000000000000000000000000000..d90ebb49ad2701cb59b16584ed178229f62caa45 GIT binary patch literal 26666 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/machines/tower_small.png b/src/main/resources/assets/hbm/textures/models/machines/tower_small.png new file mode 100644 index 0000000000000000000000000000000000000000..0a5450a30e43a24afb283d9997914b09d91cc438 GIT binary patch literal 1556 zcmeAS@N?(olHy`uVBq!ia0y~yU@QP)Sq?U!h-k6RZXm@{?Bp530R%N1DIE+9tfxI) z978JRyuEucSK6Jy;o@Bf))g$vn3*hDJcKhFpPMWURS&YXWC>(XOt}Q){={_7Swz=o?sJk?(`;^W!$-Dv%Tv}Z@vF6{(s&1uRHC&ci+u3kN>WjH`zBRCIG}-~^K;qm(ze})=I^)ZjbkcU z`UVj(d2ad(@_yES;cCcEWrtV;wCyQR&C;jOFKRQan@XxxKt~qw%SasMgUA0V$sbJ=x|Hs_>;B;2_n`I7lRz0{y=*tJ6}%{iX&9NA7~6ja_yYP^-tt147vz8 z>e65N%QjWK*K;DL9p0I4Hv8<&%5T5_-b_F9`RB8nZ_8fR??(z8Xy{_4?zJ9rxBk6O z=z$TD8nBuI6*S+zef#3;3&vB$IIvafAR7BmU+K3XZio>_}_>KmMdpJfByW!^uSTE$Ii$1cBkne zg)}gUAQ}4JN%3vntY_`*?fLtrfBE?0{O-GX^Oj{sO?z7K>Zt7Z_&PiP%OSv2V*$0}7pj7_S_>