From d3b3cb64b785fc102c0da8b73d0e4d2584dac6a1 Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 27 Feb 2022 16:32:41 +0100 Subject: [PATCH] more recipe handlers, some fixes, finished RPA, fixed furnace NEI --- .../com/hbm/blocks/IStepTickReceiver.java | 9 + src/main/java/com/hbm/blocks/ModBlocks.java | 7 +- .../com/hbm/blocks/generic/BlockEmitter.java | 243 ++++++++++++++++++ .../com/hbm/blocks/generic/BlockSpeedy.java | 32 ++- .../hbm/blocks/machine/BlockHadronDiode.java | 1 - .../java/com/hbm/crafting/ArmorRecipes.java | 5 + .../java/com/hbm/crafting/WeaponRecipes.java | 1 - .../java/com/hbm/handler/HazmatRegistry.java | 6 + .../java/com/hbm/handler/ToolAbility.java | 24 +- .../com/hbm/handler/nei/CrackingHandler.java | 11 + .../hbm/handler/nei/FractioningHandler.java | 11 + .../hbm/handler/nei/NEIUniversalHandler.java | 12 +- .../java/com/hbm/hazard/HazardRegistry.java | 10 +- .../com/hbm/inventory/OreDictManager.java | 5 +- .../hbm/inventory/recipes/MachineRecipes.java | 4 +- .../inventory/recipes/RefineryRecipes.java | 36 +++ .../inventory/recipes/anvil/AnvilRecipes.java | 11 +- src/main/java/com/hbm/items/ItemEnums.java | 6 + src/main/java/com/hbm/items/ModItems.java | 23 +- .../hbm/items/block/ItemBlockBlastInfo.java | 1 - .../hbm/items/machine/ItemChemistryIcon.java | 6 +- .../com/hbm/items/machine/ItemFluidIcon.java | 6 + src/main/java/com/hbm/lib/RefStrings.java | 2 +- src/main/java/com/hbm/main/ClientProxy.java | 2 + .../java/com/hbm/main/CraftingManager.java | 14 +- .../java/com/hbm/main/ModEventHandler.java | 14 + src/main/java/com/hbm/main/NEIConfig.java | 4 + .../hbm/render/tileentity/RenderEmitter.java | 79 ++++++ .../java/com/hbm/render/util/BeamPronter.java | 18 +- .../java/com/hbm/tileentity/TileMappings.java | 2 + .../machine/TileEntityCoreEmitter.java | 1 - .../machine/TileEntityMachineChemplant.java | 11 + src/main/java/com/hbm/util/ArmorUtil.java | 1 + src/main/java/com/hbm/util/InventoryUtil.java | 6 +- src/main/resources/assets/hbm/lang/de_DE.lang | 21 +- src/main/resources/assets/hbm/lang/en_US.lang | 20 +- src/main/resources/assets/hbm/sounds.json | 1 + .../assets/hbm/sounds/footsteps/powered1.ogg | Bin 0 -> 9576 bytes .../assets/hbm/sounds/footsteps/powered2.ogg | Bin 0 -> 10587 bytes .../assets/hbm/sounds/footsteps/powered3.ogg | Bin 0 -> 8517 bytes .../assets/hbm/textures/blocks/emitter.png | Bin 0 -> 380 bytes .../textures/items/chem_icon_LUBRICANT.png | Bin 0 -> 464 bytes ...endary_1.png => parts_legendary.tier1.png} | Bin ...endary_2.png => parts_legendary.tier2.png} | Bin ...endary_3.png => parts_legendary.tier3.png} | Bin .../assets/hbm/textures/items/rpa_boots.png | Bin 0 -> 169 bytes .../assets/hbm/textures/items/rpa_helmet.png | Bin 0 -> 397 bytes .../assets/hbm/textures/items/rpa_legs.png | Bin 0 -> 249 bytes .../assets/hbm/textures/items/rpa_plate.png | Bin 0 -> 347 bytes src/main/resources/mcmod.info | 2 +- 50 files changed, 610 insertions(+), 58 deletions(-) create mode 100644 src/main/java/com/hbm/blocks/IStepTickReceiver.java create mode 100644 src/main/java/com/hbm/blocks/generic/BlockEmitter.java create mode 100644 src/main/java/com/hbm/handler/nei/CrackingHandler.java create mode 100644 src/main/java/com/hbm/handler/nei/FractioningHandler.java create mode 100644 src/main/java/com/hbm/render/tileentity/RenderEmitter.java create mode 100644 src/main/resources/assets/hbm/sounds/footsteps/powered1.ogg create mode 100644 src/main/resources/assets/hbm/sounds/footsteps/powered2.ogg create mode 100644 src/main/resources/assets/hbm/sounds/footsteps/powered3.ogg create mode 100644 src/main/resources/assets/hbm/textures/blocks/emitter.png create mode 100644 src/main/resources/assets/hbm/textures/items/chem_icon_LUBRICANT.png rename src/main/resources/assets/hbm/textures/items/{parts_legendary_1.png => parts_legendary.tier1.png} (100%) rename src/main/resources/assets/hbm/textures/items/{parts_legendary_2.png => parts_legendary.tier2.png} (100%) rename src/main/resources/assets/hbm/textures/items/{parts_legendary_3.png => parts_legendary.tier3.png} (100%) create mode 100644 src/main/resources/assets/hbm/textures/items/rpa_boots.png create mode 100644 src/main/resources/assets/hbm/textures/items/rpa_helmet.png create mode 100644 src/main/resources/assets/hbm/textures/items/rpa_legs.png create mode 100644 src/main/resources/assets/hbm/textures/items/rpa_plate.png diff --git a/src/main/java/com/hbm/blocks/IStepTickReceiver.java b/src/main/java/com/hbm/blocks/IStepTickReceiver.java new file mode 100644 index 000000000..0c511ab58 --- /dev/null +++ b/src/main/java/com/hbm/blocks/IStepTickReceiver.java @@ -0,0 +1,9 @@ +package com.hbm.blocks; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; + +public interface IStepTickReceiver { + + public void onPlayerStep(World world, int x, int y, int z, EntityPlayer player); +} diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index e838c776f..8fde28704 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -280,6 +280,7 @@ public class ModBlocks { public static Block deco_rbmk; public static Block deco_rbmk_smooth; + public static Block deco_emitter; public static Block deco_loot; public static Block bobblehead; @@ -1477,14 +1478,15 @@ public class ModBlocks { deco_rbmk = new BlockGeneric(Material.iron).setBlockName("deco_rbmk").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_side"); deco_rbmk_smooth = new BlockGeneric(Material.iron).setBlockName("deco_rbmk_smooth").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_top"); + deco_emitter = new BlockEmitter().setBlockName("deco_emitter").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(20.0F).setBlockTextureName(RefStrings.MODID + ":emitter"); deco_loot = new BlockLoot().setBlockName("deco_loot").setCreativeTab(null).setHardness(0.0F).setResistance(0.0F).setBlockTextureName(RefStrings.MODID + ":block_steel"); bobblehead = new BlockBobble().setBlockName("bobblehead").setCreativeTab(MainRegistry.blockTab).setHardness(0.0F).setResistance(0.0F).setBlockTextureName(RefStrings.MODID + ":block_steel"); hazmat = new BlockGeneric(Material.cloth).setBlockName("hazmat").setStepSound(Block.soundTypeCloth).setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(100.0F).setBlockTextureName(RefStrings.MODID + ":hazmat"); gravel_obsidian = new BlockFalling(Material.iron).setBlockName("gravel_obsidian").setCreativeTab(MainRegistry.blockTab).setStepSound(Block.soundTypeGravel).setHardness(5.0F).setResistance(600.0F).setBlockTextureName(RefStrings.MODID + ":gravel_obsidian"); gravel_diamond = new BlockFalling(Material.sand).setBlockName("gravel_diamond").setCreativeTab(MainRegistry.blockTab).setStepSound(Block.soundTypeGravel).setHardness(0.6F).setBlockTextureName(RefStrings.MODID + ":gravel_diamond"); - asphalt = new BlockSpeedy(Material.rock, 1.15).setBlockName("asphalt").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(100.0F).setBlockTextureName(RefStrings.MODID + ":asphalt"); - asphalt_light = new BlockSpeedy(Material.rock, 1.15).setBlockName("asphalt_light").setCreativeTab(MainRegistry.blockTab).setLightLevel(1F).setHardness(15.0F).setResistance(100.0F).setBlockTextureName(RefStrings.MODID + ":asphalt_light"); + asphalt = new BlockSpeedy(Material.rock, 1.5).setBlockName("asphalt").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(100.0F).setBlockTextureName(RefStrings.MODID + ":asphalt"); + asphalt_light = new BlockSpeedy(Material.rock, 1.5).setBlockName("asphalt_light").setCreativeTab(MainRegistry.blockTab).setLightLevel(1F).setHardness(15.0F).setResistance(100.0F).setBlockTextureName(RefStrings.MODID + ":asphalt_light"); reinforced_brick = new BlockGeneric(Material.rock).setBlockName("reinforced_brick").setCreativeTab(MainRegistry.blockTab).setHardness(15.0F).setResistance(8000.0F).setBlockTextureName(RefStrings.MODID + ":reinforced_brick"); reinforced_glass = new BlockNTMGlassCT(0, RefStrings.MODID + ":reinforced_glass", Material.rock).setBlockName("reinforced_glass").setCreativeTab(MainRegistry.blockTab).setLightOpacity(0).setHardness(15.0F).setResistance(200.0F); @@ -2488,6 +2490,7 @@ public class ModBlocks { GameRegistry.registerBlock(deco_lead, deco_lead.getUnlocalizedName()); GameRegistry.registerBlock(deco_beryllium, deco_beryllium.getUnlocalizedName()); GameRegistry.registerBlock(deco_asbestos, deco_asbestos.getUnlocalizedName()); + GameRegistry.registerBlock(deco_emitter, ItemBlockBase.class, deco_emitter.getUnlocalizedName()); GameRegistry.registerBlock(deco_loot, deco_loot.getUnlocalizedName()); GameRegistry.registerBlock(bobblehead, ItemBlockMeta.class, bobblehead.getUnlocalizedName()); GameRegistry.registerBlock(hazmat, hazmat.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/generic/BlockEmitter.java b/src/main/java/com/hbm/blocks/generic/BlockEmitter.java new file mode 100644 index 000000000..4d6b10199 --- /dev/null +++ b/src/main/java/com/hbm/blocks/generic/BlockEmitter.java @@ -0,0 +1,243 @@ +package com.hbm.blocks.generic; + +import java.awt.Color; +import java.util.List; + +import com.hbm.blocks.ITooltipProvider; +import com.hbm.packet.AuxParticlePacketNT; +import com.hbm.packet.NBTPacket; +import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.INBTPacketReceiver; + +import api.hbm.block.IToolable; +import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.BlockPistonBase; +import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemDye; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class BlockEmitter extends BlockContainer implements IToolable, ITooltipProvider { + + public BlockEmitter() { + super(Material.iron); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileEntityEmitter(); + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) { + + int l = BlockPistonBase.determineOrientation(world, x, y, z, player); + world.setBlockMetadataWithNotify(x, y, z, l, 2); + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int i, float fx, float fy, float fz) { + + if(world.isRemote) + return true; + + TileEntityEmitter te = (TileEntityEmitter)world.getTileEntity(x, y, z); + + if(player.getHeldItem() != null) { + + if(player.getHeldItem().getItem() instanceof ItemDye) { + te.color = ItemDye.field_150922_c[player.getHeldItem().getItemDamage()]; + te.markDirty(); + world.markBlockForUpdate(x, y, z); + player.getHeldItem().stackSize--; + return true; + } + } + + return false; + } + + @Override + public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { + + TileEntityEmitter te = (TileEntityEmitter)world.getTileEntity(x, y, z); + + if(tool == ToolType.SCREWDRIVER) { + te.girth += 0.125F; + te.markDirty(); + return true; + } + + if(tool == ToolType.DEFUSER) { + te.girth -= 0.125F; + if(te.girth < 0.125F) te.girth = 0.125F; + te.markDirty(); + return true; + } + + if(tool == ToolType.HAND_DRILL) { + te.effect = (te.effect + 1) % te.effectCount; + te.markDirty(); + return true; + } + + return false; + } + + public static class TileEntityEmitter extends TileEntity implements INBTPacketReceiver { + + public static final int range = 100; + public int color; + public int beam; + public float girth = 0.5F; + public int effect = 0; + public static final int effectCount = 5; + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata()); + + if(worldObj.getTotalWorldTime() % 20 == 0) { + for(int i = 1; i <= range; i++) { + + beam = i; + + int x = xCoord + dir.offsetX * i; + int y = yCoord + dir.offsetY * i; + int z = zCoord + dir.offsetZ * i; + + Block b = worldObj.getBlock(x, y, z); + if(b.isBlockSolid(worldObj, x, y, z, dir.ordinal())) { + break; + } + } + } + + if(effect == 4 && beam > 0) { + + if(worldObj.getTotalWorldTime() % 5 == 0) { + double x = (int) (xCoord + dir.offsetX * (worldObj.getTotalWorldTime() / 5L) % beam) + 0.5; + double y = (int) (yCoord + dir.offsetY * (worldObj.getTotalWorldTime() / 5L) % beam) + 0.5; + double z = (int) (zCoord + dir.offsetZ * (worldObj.getTotalWorldTime() / 5L) % beam) + 0.5; + + int prevColor = color; + if(color == 0) { + color = Color.HSBtoRGB(worldObj.getTotalWorldTime() / 50.0F, 0.5F, 0.25F) & 16777215; + } + + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "plasmablast"); + data.setFloat("r", ((float)((color & 0xff0000) >> 16)) / 256F); + data.setFloat("g", ((float)((color & 0x00ff00) >> 8)) / 256F); + data.setFloat("b", ((float)((color & 0x0000ff))) / 256F); + data.setFloat("scale", girth * 5); + + if(this.getBlockMetadata() == 2) { + data.setFloat("pitch", 90); + } + if(this.getBlockMetadata() == 3) { + data.setFloat("pitch", -90); + } + if(this.getBlockMetadata() == 4) { + data.setFloat("pitch", 90); + data.setFloat("yaw", 90); + } + if(this.getBlockMetadata() == 5) { + data.setFloat("pitch", -90); + data.setFloat("yaw", 90); + } + + PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, x, y, z), + new TargetPoint(worldObj.provider.dimensionId, x, y, z, 100)); + + color = prevColor; + } + } + + NBTTagCompound data = new NBTTagCompound(); + data.setInteger("beam", this.beam); + data.setInteger("color", this.color); + data.setFloat("girth", this.girth); + data.setInteger("effect", this.effect); + PacketDispatcher.wrapper.sendToAllAround(new NBTPacket(data, xCoord, yCoord, zCoord), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 150)); + } + } + + @Override + public Packet getDescriptionPacket() { + NBTTagCompound nbt = new NBTTagCompound(); + this.writeToNBT(nbt); + return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbt); + } + + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { + this.readFromNBT(pkt.func_148857_g()); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.color = nbt.getInteger("color"); + this.girth = nbt.getFloat("girth"); + this.effect = nbt.getInteger("effect"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setInteger("color", this.color); + nbt.setFloat("girth", this.girth); + nbt.setInteger("effect", this.effect); + } + + @Override + public AxisAlignedBB getRenderBoundingBox() { + return TileEntity.INFINITE_EXTENT_AABB; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } + + @Override + public void networkUnpack(NBTTagCompound nbt) { + this.beam = nbt.getInteger("beam"); + this.color = nbt.getInteger("color"); + this.girth = nbt.getFloat("girth"); + this.effect = nbt.getInteger("effect"); + } + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + list.add(EnumChatFormatting.GOLD + "Use screwdriver to widen beam"); + list.add(EnumChatFormatting.GOLD + "Use defuser to narrow beam"); + list.add(EnumChatFormatting.GOLD + "Use hand drill to cycle special effects"); + list.add(EnumChatFormatting.GOLD + "Use dye to change color"); + } +} diff --git a/src/main/java/com/hbm/blocks/generic/BlockSpeedy.java b/src/main/java/com/hbm/blocks/generic/BlockSpeedy.java index 4d0a0e433..3d8427781 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockSpeedy.java +++ b/src/main/java/com/hbm/blocks/generic/BlockSpeedy.java @@ -1,12 +1,19 @@ package com.hbm.blocks.generic; +import java.util.List; + +import com.hbm.blocks.IStepTickReceiver; +import com.hbm.blocks.ITooltipProvider; + +import codechicken.lib.math.MathHelper; import net.minecraft.block.Block; import net.minecraft.block.material.Material; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.world.World; -public class BlockSpeedy extends Block { +public class BlockSpeedy extends Block implements IStepTickReceiver, ITooltipProvider { double speed; @@ -16,12 +23,19 @@ public class BlockSpeedy extends Block { } @Override - public void onEntityWalking(World world, int x, int y, int z, Entity entity) { - - if(entity instanceof EntityLivingBase) { //prevents vehicles from going mach 5 - double tan = Math.atan2(entity.motionX, entity.motionZ); - entity.motionX += Math.sin(tan) * speed; - entity.motionZ += Math.cos(tan) * speed; + public void onPlayerStep(World world, int x, int y, int z, EntityPlayer player) { + + if(!world.isRemote) + return; + + if(player.moveForward != 0 || player.moveStrafing != 0) { + player.motionX *= speed; + player.motionZ *= speed; } } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + list.add(EnumChatFormatting.BLUE + "Increases speed by " + (MathHelper.floor_double((speed - 1) * 100)) + "%"); + } } diff --git a/src/main/java/com/hbm/blocks/machine/BlockHadronDiode.java b/src/main/java/com/hbm/blocks/machine/BlockHadronDiode.java index 30d59b14a..b0ebce2f4 100644 --- a/src/main/java/com/hbm/blocks/machine/BlockHadronDiode.java +++ b/src/main/java/com/hbm/blocks/machine/BlockHadronDiode.java @@ -1,6 +1,5 @@ package com.hbm.blocks.machine; -import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityHadronDiode; import com.hbm.tileentity.machine.TileEntityHadronDiode.DiodeConfig; diff --git a/src/main/java/com/hbm/crafting/ArmorRecipes.java b/src/main/java/com/hbm/crafting/ArmorRecipes.java index 33b1c94e4..358de71d4 100644 --- a/src/main/java/com/hbm/crafting/ArmorRecipes.java +++ b/src/main/java/com/hbm/crafting/ArmorRecipes.java @@ -7,6 +7,7 @@ import com.hbm.inventory.fluid.Fluids; import static com.hbm.inventory.OreDictManager.*; import com.hbm.items.ModItems; +import com.hbm.items.ItemEnums.EnumLegendaryType; import com.hbm.main.CraftingManager; import net.minecraft.init.Blocks; @@ -92,6 +93,10 @@ public class ArmorRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.dns_plate, 1), new Object[] { "PCP", "PBP", "PSP", 'P', ModItems.plate_armor_dnt, 'S', ModItems.ingot_chainsteel, 'B', ModItems.bj_plate_jetpack, 'C', ModItems.singularity_spark }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.dns_legs, 1), new Object[] { "PCP", "PBP", "PSP", 'P', ModItems.plate_armor_dnt, 'S', ModItems.ingot_chainsteel, 'B', ModItems.bj_legs, 'C', ModItems.coin_worm }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.dns_boots, 1), new Object[] { "PCP", "PBP", "PSP", 'P', ModItems.plate_armor_dnt, 'S', ModItems.ingot_chainsteel, 'B', ModItems.bj_boots, 'C', ModItems.demon_core_closed }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.rpa_helmet, 1), new Object[] { "KPK", "PLP", " F ", 'L', DictFrame.fromOne(ModItems.parts_legendary, EnumLegendaryType.TIER2), 'K', ModItems.plate_kevlar, 'P', ModItems.plate_armor_ajr, 'F', ModItems.gas_mask_filter_combo }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.rpa_plate, 1), new Object[] { "P P", "MLM", "PKP", 'L', DictFrame.fromOne(ModItems.parts_legendary, EnumLegendaryType.TIER2), 'K', ModItems.plate_kevlar, 'P', ModItems.plate_armor_ajr, 'M', ModItems.motor_desh }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.rpa_legs, 1), new Object[] { "MPM", "KLK", "P P", 'L', DictFrame.fromOne(ModItems.parts_legendary, EnumLegendaryType.TIER2), 'K', ModItems.plate_kevlar, 'P', ModItems.plate_armor_ajr, 'M', ModItems.motor_desh }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.rpa_boots, 1), new Object[] { "KLK", "P P", 'L', DictFrame.fromOne(ModItems.parts_legendary, EnumLegendaryType.TIER2), 'K', ModItems.plate_kevlar, 'P', ModItems.plate_armor_ajr }); //Euphemium armor CraftingManager.addRecipeAuto(new ItemStack(ModItems.euphemium_helmet, 1), new Object[] { "EEE", "E E", 'E', ModItems.plate_euphemium }); diff --git a/src/main/java/com/hbm/crafting/WeaponRecipes.java b/src/main/java/com/hbm/crafting/WeaponRecipes.java index 20cda0e99..c0cf2b675 100644 --- a/src/main/java/com/hbm/crafting/WeaponRecipes.java +++ b/src/main/java/com/hbm/crafting/WeaponRecipes.java @@ -402,7 +402,6 @@ public class WeaponRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.custom_dirty, 1), new Object[] { " C ", "WLW", "WLW", 'C', CU.plate(), 'L', PB.plate(), 'W', ModItems.nuclear_waste }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.custom_schrab, 1), new Object[] { " C ", "LUL", "LUL", 'C', CU.plate(), 'L', PB.plate(), 'U', SA326.ingot() }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.demon_core_open, 1), new Object[] { "PRP", " CS", "PRP", 'P', TI.plate(), 'R', OreDictManager.getReflector(), 'C', ModItems.man_core, 'S', ModItems.screwdriver }); CraftingManager.addRecipeAuto(new ItemStack(ModBlocks.lamp_demon, 1), new Object[] { " D ", "S S", 'D', ModItems.demon_core_closed, 'S', STEEL.ingot() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.crucible, 1, 3), new Object[] { "MEM", "YDY", "YCY", 'M', ModItems.ingot_meteorite_forged, 'E', EUPH.ingot(), 'Y', ModItems.billet_yharonite, 'D', ModItems.demon_core_closed, 'C', ModItems.ingot_chainsteel }); diff --git a/src/main/java/com/hbm/handler/HazmatRegistry.java b/src/main/java/com/hbm/handler/HazmatRegistry.java index ecd466adb..2e2b13764 100644 --- a/src/main/java/com/hbm/handler/HazmatRegistry.java +++ b/src/main/java/com/hbm/handler/HazmatRegistry.java @@ -43,6 +43,7 @@ public class HazmatRegistry { double ajr = 1.3D; // 95% double bj = 1D; // 90% double hev = 1.3D; // 95% + double rpa = 2D; // 99% double fau = 4D; // 99.99% double dns = 5D; // 99.999% double security = 0.825D; // 85% @@ -114,6 +115,11 @@ public class HazmatRegistry { HazmatRegistry.registerHazmat(ModItems.hev_legs, hev * legs); HazmatRegistry.registerHazmat(ModItems.hev_boots, hev * boots); + HazmatRegistry.registerHazmat(ModItems.rpa_helmet, rpa * helmet); + HazmatRegistry.registerHazmat(ModItems.rpa_plate, rpa * chest); + HazmatRegistry.registerHazmat(ModItems.rpa_legs, rpa * legs); + HazmatRegistry.registerHazmat(ModItems.rpa_boots, rpa * boots); + HazmatRegistry.registerHazmat(ModItems.fau_helmet, fau * helmet); HazmatRegistry.registerHazmat(ModItems.fau_plate, fau * chest); HazmatRegistry.registerHazmat(ModItems.fau_legs, fau * legs); diff --git a/src/main/java/com/hbm/handler/ToolAbility.java b/src/main/java/com/hbm/handler/ToolAbility.java index 92b2dc96e..a28b7dd0c 100644 --- a/src/main/java/com/hbm/handler/ToolAbility.java +++ b/src/main/java/com/hbm/handler/ToolAbility.java @@ -280,17 +280,23 @@ public abstract class ToolAbility { @Override public void onDig(World world, int x, int y, int z, EntityPlayer player, Block block, int meta, IItemAbility tool) { - //a band-aid on a gaping wound - if(block == Blocks.lit_redstone_ore) - block = Blocks.redstone_ore; + List drops = block.getDrops(world, x, y, z, world.getBlockMetadata(x, y, z), 0); - ItemStack stack = new ItemStack(block, 1, meta); - ItemStack result = FurnaceRecipes.smelting().getSmeltingResult(stack); - - if(result != null) { - world.setBlockToAir(x, y, z); - world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, result.copy())); + for(int i = 0; i < drops.size(); i++) { + ItemStack stack = drops.get(i).copy(); + ItemStack result = FurnaceRecipes.smelting().getSmeltingResult(stack); + + if(result != null) { + result = result.copy(); + result.stackSize *= stack.stackSize; + drops.set(i, result); + } } + + world.setBlockToAir(x, y, z); + + for(ItemStack stack : drops) + world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, stack.copy())); } @Override diff --git a/src/main/java/com/hbm/handler/nei/CrackingHandler.java b/src/main/java/com/hbm/handler/nei/CrackingHandler.java new file mode 100644 index 000000000..b0ef1c4eb --- /dev/null +++ b/src/main/java/com/hbm/handler/nei/CrackingHandler.java @@ -0,0 +1,11 @@ +package com.hbm.handler.nei; + +import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.recipes.RefineryRecipes; + +public class CrackingHandler extends NEIUniversalHandler { + + public CrackingHandler() { + super("ntmCracking", "Cracking", ModBlocks.machine_catalytic_cracker, RefineryRecipes.getCrackingRecipesForNEI()); + } +} diff --git a/src/main/java/com/hbm/handler/nei/FractioningHandler.java b/src/main/java/com/hbm/handler/nei/FractioningHandler.java new file mode 100644 index 000000000..282e99ec0 --- /dev/null +++ b/src/main/java/com/hbm/handler/nei/FractioningHandler.java @@ -0,0 +1,11 @@ +package com.hbm.handler.nei; + +import com.hbm.blocks.ModBlocks; +import com.hbm.inventory.recipes.RefineryRecipes; + +public class FractioningHandler extends NEIUniversalHandler { + + public FractioningHandler() { + super("ntmFractioning", "Fractioning", ModBlocks.machine_fraction_tower, RefineryRecipes.getFractionRecipesForNEI()); + } +} diff --git a/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java b/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java index 3dab3b0e4..7cba240f0 100644 --- a/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java +++ b/src/main/java/com/hbm/handler/nei/NEIUniversalHandler.java @@ -50,7 +50,7 @@ public abstract class NEIUniversalHandler extends TemplateRecipeHandler { input = new PositionedStack[in.length]; for(int i = 0; i < in.length; i++) { ItemStack[] sub = in[i]; - this.input[i] = new PositionedStack(sub, 48 + i * 18, 24); + this.input[i] = new PositionedStack(sub, 48 + i * -18, 24); } output = new PositionedStack[out.length]; for(int i = 0; i < out.length; i++) { @@ -95,8 +95,14 @@ public abstract class NEIUniversalHandler extends TemplateRecipeHandler { @Override public void drawBackground(int recipe) { super.drawBackground(recipe); - drawTexturedModalRect(47, 23, 5, 87, 18, 18); - drawTexturedModalRect(101, 23, 5, 87, 18, 18); + + RecipeSet rec = (RecipeSet) this.arecipes.get(recipe); + + for(int i = 0; i < rec.input.length; i++) + drawTexturedModalRect(47 + i * -18, 23, 5, 87, 18, 18); + for(int i = 0; i < rec.output.length; i++) + drawTexturedModalRect(101 + i * 18, 23, 5, 87, 18, 18); + drawTexturedModalRect(74, 14, 59, 87, 18, 38); } diff --git a/src/main/java/com/hbm/hazard/HazardRegistry.java b/src/main/java/com/hbm/hazard/HazardRegistry.java index d781030cc..9f6a49d48 100644 --- a/src/main/java/com/hbm/hazard/HazardRegistry.java +++ b/src/main/java/com/hbm/hazard/HazardRegistry.java @@ -154,8 +154,12 @@ public class HazardRegistry { HazardSystem.register(ball_dynamite, makeData(EXPLOSIVE, 2F)); HazardSystem.register(ball_tnt, makeData(EXPLOSIVE, 3F)); + HazardSystem.register(ingot_semtex, makeData(EXPLOSIVE, 5F)); + HazardSystem.register(ingot_c4, makeData(EXPLOSIVE, 5F)); HazardSystem.register(stick_dynamite, makeData(EXPLOSIVE, 1F)); HazardSystem.register(stick_tnt, makeData(EXPLOSIVE, 1.5F)); + HazardSystem.register(stick_semtex, makeData(EXPLOSIVE, 2.5F)); + HazardSystem.register(stick_c4, makeData(EXPLOSIVE, 2.5F)); HazardSystem.register(dynamite, makeData(EXPLOSIVE, 6F)); HazardSystem.register(tnt, makeData(EXPLOSIVE, 8F)); @@ -164,10 +168,8 @@ public class HazardRegistry { HazardSystem.register("dustLignite", makeData(COAL, powder)); HazardSystem.register("dustTinyLignite", makeData(COAL, powder_tiny)); - HazardSystem.register(ingot_semtex, makeData(EXPLOSIVE, 10F)); - HazardSystem.register(block_semtex, makeData(EXPLOSIVE, 40F)); - HazardSystem.register(ingot_c4, makeData(EXPLOSIVE, 10F)); - HazardSystem.register(block_c4, makeData(EXPLOSIVE, 40F)); + HazardSystem.register(block_semtex, makeData(EXPLOSIVE, 25F)); + HazardSystem.register(block_c4, makeData(EXPLOSIVE, 25F)); HazardSystem.register(cordite, makeData(EXPLOSIVE, 2F)); HazardSystem.register(ballistite, makeData(EXPLOSIVE, 1F)); diff --git a/src/main/java/com/hbm/inventory/OreDictManager.java b/src/main/java/com/hbm/inventory/OreDictManager.java index d50ed4ed5..e7378d2cf 100644 --- a/src/main/java/com/hbm/inventory/OreDictManager.java +++ b/src/main/java/com/hbm/inventory/OreDictManager.java @@ -456,7 +456,7 @@ public class OreDictManager { } public static void registerGroups() { - ANY_PLASTIC.addPrefix(INGOT, true).addPrefix(DUST, true); + ANY_PLASTIC.addPrefix(INGOT, true).addPrefix(DUST, true).addPrefix(BLOCK, true); ANY_TAR.addPrefix(ANY, false); } @@ -547,6 +547,9 @@ public class OreDictManager { public static ItemStack fromOne(Item item, Enum en) { return new ItemStack(item, 1, en.ordinal()); } + public static ItemStack fromOne(Item item, Enum en, int stacksize) { + return new ItemStack(item, stacksize, en.ordinal()); + } /** Same as fromOne but with an array of ItemStacks. The array type is Object[] so that the ODM methods work with it. Generates ItemStacks for the entire enum class. */ public static Object[] fromAll(Item item, Class en) { Enum[] vals = en.getEnumConstants(); diff --git a/src/main/java/com/hbm/inventory/recipes/MachineRecipes.java b/src/main/java/com/hbm/inventory/recipes/MachineRecipes.java index 960f6c8fa..f1b8148e5 100644 --- a/src/main/java/com/hbm/inventory/recipes/MachineRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/MachineRecipes.java @@ -414,8 +414,8 @@ public class MachineRecipes { getFurnaceOutput(new ItemStack(ModItems.ingot_copper), new ItemStack(Items.redstone)).copy()); recipes.put(new ItemStack[] { new ItemStack(ModItems.ingot_red_copper), new ItemStack(ModItems.ingot_steel) }, getFurnaceOutput(new ItemStack(ModItems.ingot_red_copper), new ItemStack(ModItems.ingot_steel)).copy()); - recipes.put(new ItemStack[] { new ItemStack(ModItems.canister_full, 1, Fluids.DIESEL.getContainerColor()), new ItemStack(Items.slime_ball) }, - getFurnaceOutput(new ItemStack(ModItems.canister_full, 1, Fluids.DIESEL.getContainerColor()), new ItemStack(Items.slime_ball)).copy()); + recipes.put(new ItemStack[] { new ItemStack(ModItems.canister_full, 1, Fluids.DIESEL.getID()), new ItemStack(Items.slime_ball) }, + getFurnaceOutput(new ItemStack(ModItems.canister_full, 1, Fluids.DIESEL.getID()), new ItemStack(Items.slime_ball)).copy()); recipes.put(new ItemStack[] { new ItemStack(ModItems.ingot_tungsten), new ItemStack(ModItems.nugget_schrabidium) }, getFurnaceOutput(new ItemStack(ModItems.ingot_tungsten), new ItemStack(ModItems.nugget_schrabidium)).copy()); recipes.put(new ItemStack[] { new ItemStack(ModItems.plate_mixed), new ItemStack(ModItems.plate_gold) }, diff --git a/src/main/java/com/hbm/inventory/recipes/RefineryRecipes.java b/src/main/java/com/hbm/inventory/recipes/RefineryRecipes.java index 0039208af..17e3ea6bb 100644 --- a/src/main/java/com/hbm/inventory/recipes/RefineryRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/RefineryRecipes.java @@ -134,4 +134,40 @@ public class RefineryRecipes { protected static Map> getCrackingRecipes() { return cracking; } + + public static HashMap getFractionRecipesForNEI() { + + HashMap recipes = new HashMap(); + + for(Entry> recipe : fractions.entrySet()) { + ItemStack[] out = new ItemStack[] { + ItemFluidIcon.make(recipe.getValue().getKey()), + ItemFluidIcon.make(recipe.getValue().getValue()) + }; + + recipes.put(ItemFluidIcon.make(recipe.getKey(), 100), out); + } + + return recipes; + } + + public static HashMap getCrackingRecipesForNEI() { + + HashMap recipes = new HashMap(); + + for(Entry> recipe : cracking.entrySet()) { + ItemStack[] in = new ItemStack[] { + ItemFluidIcon.make(recipe.getKey(), 100), + ItemFluidIcon.make(Fluids.STEAM, 200) + }; + ItemStack[] out = new ItemStack[] { + ItemFluidIcon.make(recipe.getValue().getKey()), + ItemFluidIcon.make(recipe.getValue().getValue()) + }; + + recipes.put(in, recipe.getValue().getValue().type == Fluids.NONE ? ItemFluidIcon.make(recipe.getValue().getKey()) : out); + } + + return recipes; + } } diff --git a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java index 5dda19898..50dd7ff53 100644 --- a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java @@ -246,6 +246,13 @@ public class AnvilRecipes { new ComparableStack(ModItems.nuclear_waste_vitrified, 10) }, new AnvilOutput(new ItemStack(ModBlocks.vitrified_barrel))).setTier(3)); + constructionRecipes.add(new AnvilConstructionRecipe( + new AStack[] { + new ComparableStack(ModItems.man_core, 1), + new OreDictStack(BE.ingot(), 4), + new ComparableStack(ModItems.screwdriver, 1) + }, new AnvilOutput(new ItemStack(ModItems.demon_core_open))).setTier(3)); + constructionRecipes.add(new AnvilConstructionRecipe( new AStack[] {new OreDictStack(DESH.ingot(), 4), new OreDictStack(POLYMER.dust(), 2), new OreDictStack(DURA.ingot(), 1)}, new AnvilOutput(new ItemStack(ModItems.plate_desh, 4))).setTier(3)); @@ -509,7 +516,7 @@ public class AnvilRecipes { new AnvilOutput[] { new AnvilOutput(new ItemStack(Items.redstone, 4)), new AnvilOutput(new ItemStack(ModItems.ingot_polymer, 2)), - new AnvilOutput(new ItemStack(GeneralConfig.enable528 ? ModItems.circuit_bismuth : ModItems.ingot_asbestos, 2)), + new AnvilOutput(new ItemStack(GeneralConfig.enable528 ? ModItems.circuit_tantalium : ModItems.ingot_asbestos, 2)), new AnvilOutput(new ItemStack(ModItems.ingot_bismuth, 1)) } ).setTier(4)); @@ -519,7 +526,7 @@ public class AnvilRecipes { new AnvilOutput(new ItemStack(Items.redstone, 2)), new AnvilOutput(new ItemStack(ModItems.ingot_polymer, 1)), new AnvilOutput(new ItemStack(ModItems.ingot_polymer, 1), 0.5F), - new AnvilOutput(new ItemStack(GeneralConfig.enable528 ? ModItems.circuit_bismuth : ModItems.ingot_asbestos, 1)), + new AnvilOutput(new ItemStack(GeneralConfig.enable528 ? ModItems.circuit_tantalium : ModItems.ingot_asbestos, 1)), new AnvilOutput(new ItemStack(ModItems.ingot_bismuth, 1), 0.75F) } ).setTier(4)); diff --git a/src/main/java/com/hbm/items/ItemEnums.java b/src/main/java/com/hbm/items/ItemEnums.java index 760fe724c..b8e529cbd 100644 --- a/src/main/java/com/hbm/items/ItemEnums.java +++ b/src/main/java/com/hbm/items/ItemEnums.java @@ -19,4 +19,10 @@ public class ItemEnums { CRACK, COAL } + + public static enum EnumLegendaryType { + TIER1, + TIER2, + TIER3 + } } diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 8baceaa34..4e7fe4e28 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -9,6 +9,7 @@ import com.hbm.handler.WeaponAbility; import com.hbm.handler.guncfg.*; import com.hbm.interfaces.ICustomWarhead.SaltedFuel.HalfLifeType; import com.hbm.inventory.fluid.Fluids; +import com.hbm.items.ItemEnums.EnumLegendaryType; import com.hbm.items.armor.*; import com.hbm.items.bomb.*; import com.hbm.items.food.*; @@ -530,6 +531,8 @@ public class ModItems { public static Item component_emitter; public static Item chlorine_pinwheel; public static Item deuterium_filter; + + public static Item parts_legendary; public static Item circuit_raw; public static Item circuit_aluminium; @@ -2994,6 +2997,7 @@ public class ModItems { ring_starmetal = new Item().setUnlocalizedName("ring_starmetal").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":ring_starmetal"); flywheel_beryllium = new Item().setUnlocalizedName("flywheel_beryllium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":flywheel_beryllium"); deuterium_filter = new Item().setUnlocalizedName("deuterium_filter").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":deuterium_filter"); + parts_legendary = new ItemEnumMulti(EnumLegendaryType.class, false, true).setUnlocalizedName("parts_legendary").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":parts_legendary"); cap_aluminium = new Item().setUnlocalizedName("cap_aluminium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":cap_aluminium"); hull_small_steel = new Item().setUnlocalizedName("hull_small_steel").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":hull_small_steel"); @@ -4739,10 +4743,10 @@ public class ModItems { chemistry_icon = new ItemChemistryIcon().setUnlocalizedName("chemistry_icon").setMaxStackSize(1).setCreativeTab(null); fluid_identifier = new ItemFluidIdentifier().setUnlocalizedName("fluid_identifier").setMaxStackSize(1).setCreativeTab(MainRegistry.templateTab).setTextureName(RefStrings.MODID + ":fluid_identifier"); fluid_icon = new ItemFluidIcon().setUnlocalizedName("fluid_icon").setCreativeTab(null).setTextureName(RefStrings.MODID + ":fluid_icon"); - fluid_tank_full = new ItemFluidTank().setUnlocalizedName("fluid_tank_full").setContainerItem(ModItems.fluid_tank_empty).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_tank"); fluid_tank_empty = new Item().setUnlocalizedName("fluid_tank_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_tank"); - fluid_tank_lead_full = new ItemFluidTank().setUnlocalizedName("fluid_tank_lead_full").setContainerItem(ModItems.fluid_tank_lead_empty).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_tank_lead"); + fluid_tank_full = new ItemFluidTank().setUnlocalizedName("fluid_tank_full").setContainerItem(ModItems.fluid_tank_empty).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_tank"); fluid_tank_lead_empty = new Item().setUnlocalizedName("fluid_tank_lead_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_tank_lead"); + fluid_tank_lead_full = new ItemFluidTank().setUnlocalizedName("fluid_tank_lead_full").setContainerItem(ModItems.fluid_tank_lead_empty).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_tank_lead"); fluid_barrel_full = new ItemFluidTank().setUnlocalizedName("fluid_barrel_full").setContainerItem(ModItems.fluid_barrel_empty).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_barrel"); fluid_barrel_empty = new Item().setUnlocalizedName("fluid_barrel_empty").setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_barrel"); fluid_barrel_infinite = new Item().setUnlocalizedName("fluid_barrel_infinite").setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setTextureName(RefStrings.MODID + ":fluid_barrel_infinite"); @@ -4914,18 +4918,18 @@ public class ModItems { ajro_legs = new ArmorAJRO(aMatAJR, 7, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png", 2500000, 10000, 2000, 25).cloneStats((ArmorFSB) ajro_helmet).setUnlocalizedName("ajro_legs").setTextureName(RefStrings.MODID + ":ajro_legs"); ajro_boots = new ArmorAJRO(aMatAJR, 7, 3, RefStrings.MODID + ":textures/armor/starmetal_1.png", 2500000, 10000, 2000, 25).cloneStats((ArmorFSB) ajro_helmet).setUnlocalizedName("ajro_boots").setTextureName(RefStrings.MODID + ":ajro_boots"); - rpa_helmet = new ArmorRPA(aMatAJR, 7, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png", 2500000, 10000, 2000, 25).setMod(0.25F).setCap(6.0F).setThreshold(4F) + rpa_helmet = new ArmorRPA(aMatAJR, 7, 0, RefStrings.MODID + ":textures/armor/starmetal_1.png", 2500000, 10000, 2000, 25).setMod(0.1F).setCap(6.0F).setThreshold(20F) .setFireproof(true) .enableVATS(true) .setHasGeigerSound(true) .setHasHardLanding(true) - .addEffect(new PotionEffect(Potion.jump.id, 20, 0)) - .addEffect(new PotionEffect(Potion.damageBoost.id, 20, 0)) + .addEffect(new PotionEffect(Potion.damageBoost.id, 20, 3)) .setBlastProtection(0.25F) - .setStep("hbm:step.metal") - .setJump("hbm:step.iron_jump") - .setFall("hbm:step.iron_land") - .addResistance("monoxide", 0F) + .setProjectileProtection(0.25F) + .setProtectionLevel(1500) + .setStep("hbm:step.powered") + .setJump("hbm:step.powered") + .setFall("hbm:step.powered") .addResistance("fall", 0).setUnlocalizedName("rpa_helmet").setTextureName(RefStrings.MODID + ":rpa_helmet"); rpa_plate = new ArmorRPA(aMatAJR, 7, 1, RefStrings.MODID + ":textures/armor/starmetal_1.png", 2500000, 10000, 2000, 25).cloneStats((ArmorFSB) rpa_helmet).setUnlocalizedName("rpa_plate").setTextureName(RefStrings.MODID + ":rpa_plate"); rpa_legs = new ArmorRPA(aMatAJR, 7, 2, RefStrings.MODID + ":textures/armor/starmetal_2.png", 2500000, 10000, 2000, 25).cloneStats((ArmorFSB) rpa_helmet).setUnlocalizedName("rpa_legs").setTextureName(RefStrings.MODID + ":rpa_legs"); @@ -6067,6 +6071,7 @@ public class ModItems { GameRegistry.registerItem(chlorine_pinwheel, chlorine_pinwheel.getUnlocalizedName()); GameRegistry.registerItem(ring_starmetal, ring_starmetal.getUnlocalizedName()); GameRegistry.registerItem(deuterium_filter, deuterium_filter.getUnlocalizedName()); + GameRegistry.registerItem(parts_legendary, parts_legendary.getUnlocalizedName()); //Teleporter Parts GameRegistry.registerItem(telepad, telepad.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/block/ItemBlockBlastInfo.java b/src/main/java/com/hbm/items/block/ItemBlockBlastInfo.java index d01dc1cfd..4ded08d51 100644 --- a/src/main/java/com/hbm/items/block/ItemBlockBlastInfo.java +++ b/src/main/java/com/hbm/items/block/ItemBlockBlastInfo.java @@ -5,7 +5,6 @@ import java.util.List; import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; -import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; diff --git a/src/main/java/com/hbm/items/machine/ItemChemistryIcon.java b/src/main/java/com/hbm/items/machine/ItemChemistryIcon.java index d9af8a310..6e67efada 100644 --- a/src/main/java/com/hbm/items/machine/ItemChemistryIcon.java +++ b/src/main/java/com/hbm/items/machine/ItemChemistryIcon.java @@ -28,10 +28,10 @@ public class ItemChemistryIcon extends Item { public String getItemStackDisplayName(ItemStack stack) { - ChemRecipe chem = ChemplantRecipes.recipes.get(stack.getItemDamage() % ChemplantRecipes.recipes.size()); + ChemRecipe recipe = ChemplantRecipes.indexMapping.get(stack.getItemDamage()); String s = ("" + StatCollector.translateToLocal(ModItems.chemistry_template.getUnlocalizedName() + ".name")).trim(); - String s1 = ("" + StatCollector.translateToLocal("chem." + chem.name)).trim(); + String s1 = ("" + StatCollector.translateToLocal("chem." + recipe.name)).trim(); if(s1 != null) { s = s + " " + s1; @@ -59,6 +59,6 @@ public class ItemChemistryIcon extends Item { @SideOnly(Side.CLIENT) public IIcon getIconFromDamage(int i) { - return this.icons[ChemplantRecipes.indexMapping.get(i).listing]; + return this.icons[ChemplantRecipes.indexMapping.get(i).listing % this.icons.length]; } } diff --git a/src/main/java/com/hbm/items/machine/ItemFluidIcon.java b/src/main/java/com/hbm/items/machine/ItemFluidIcon.java index 40c7553b7..27f7e3863 100644 --- a/src/main/java/com/hbm/items/machine/ItemFluidIcon.java +++ b/src/main/java/com/hbm/items/machine/ItemFluidIcon.java @@ -1,6 +1,8 @@ package com.hbm.items.machine; import java.util.List; + +import com.hbm.inventory.FluidStack; import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.items.ModItems; @@ -50,6 +52,10 @@ public class ItemFluidIcon extends Item { return stack; } + public static ItemStack make(FluidStack stack) { + return make(stack.type, stack.fill); + } + public static ItemStack make(FluidType fluid, int i) { return addQuantity(new ItemStack(ModItems.fluid_icon, 1, fluid.ordinal()), i); } diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 39cf09aad..eee994716 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 (4152)"; + public static final String VERSION = "1.0.27 BETA (4158)"; //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 490cb0462..45aae560c 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -38,6 +38,7 @@ import java.util.Random; import com.hbm.blocks.ModBlocks; import com.hbm.blocks.generic.BlockBobble.TileEntityBobble; +import com.hbm.blocks.generic.BlockEmitter.TileEntityEmitter; import com.hbm.blocks.generic.BlockLoot.TileEntityLoot; import com.hbm.entity.effect.*; import com.hbm.entity.grenade.*; @@ -111,6 +112,7 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntityDemonLamp.class, new RenderDemonLamp()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityLoot.class, new RenderLoot()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityBobble.class, new RenderBobble()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityEmitter.class, new RenderEmitter()); //bombs ClientRegistry.bindTileEntitySpecialRenderer(TileEntityNukeGadget.class, new RenderNukeGadget()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityNukeBoy.class, new RenderNukeBoy()); diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 39e816ab7..9a26dad9d 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -13,6 +13,7 @@ import com.hbm.inventory.fluid.Fluids; import static com.hbm.inventory.OreDictManager.*; import com.hbm.items.ModItems; +import com.hbm.items.ItemEnums.EnumLegendaryType; import com.hbm.items.machine.ItemBattery; import com.hbm.items.special.ItemCircuitStarComponent.CircuitComponentType; import com.hbm.items.special.ItemHolotapeImage.EnumHoloImage; @@ -238,6 +239,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.machine_arc_furnace_off, 1), new Object[] { "ITI", "PFP", "ITI", 'I', W.ingot(), 'T', ModBlocks.machine_transformer, 'P', ModItems.board_copper, 'F', Blocks.furnace }); addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.red_wire_coated), 16), new Object[] { "WRW", "RIR", "WRW", 'W', ModItems.plate_polymer, 'I', MINGRADE.ingot(), 'R', ModItems.wire_red_copper }); addRecipeAuto(new ItemStack(ModBlocks.cable_switch, 1), new Object[] { "S", "W", 'S', Blocks.lever, 'W', ModBlocks.red_wire_coated }); + addRecipeAuto(new ItemStack(ModBlocks.cable_detector, 1), new Object[] { "S", "W", 'S', REDSTONE.dust(), 'W', ModBlocks.red_wire_coated }); addRecipeAuto(new ItemStack(ModBlocks.machine_detector, 1), new Object[] { "IRI", "CTC", "IRI", 'I', ModItems.plate_polymer, 'R', REDSTONE.dust(), 'C', ModItems.wire_red_copper, 'T', ModItems.coil_tungsten }); addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.red_cable), 16), new Object[] { " W ", "RRR", " W ", 'W', ModItems.plate_polymer, 'R', ModItems.wire_red_copper }); addRecipeAuto(new ItemStack(ModBlocks.red_connector, 4), new Object[] { "C", "I", "S", 'C', ModItems.coil_copper, 'I', ModItems.plate_polymer, 'S', STEEL.ingot() }); @@ -460,8 +462,8 @@ public class CraftingManager { addShapelessAuto(new ItemStack(ModItems.solid_fuel_presto_triplet, 1), new Object[] { ModItems.solid_fuel_presto, ModItems.solid_fuel_presto, ModItems.solid_fuel_presto, ModItems.ball_dynamite }); addRecipeAuto(new ItemStack(Item.getItemFromBlock(ModBlocks.flame_war), 1), new Object[] { "WHW", "CTP", "WOW", 'W', Item.getItemFromBlock(Blocks.planks), 'T', Item.getItemFromBlock(Blocks.tnt), 'H', ModItems.flame_pony, 'C', ModItems.flame_conspiracy, 'P', ModItems.flame_politics, 'O', ModItems.flame_opinion }); - addRecipeAuto(new ItemStack(ModBlocks.det_cord, 8), new Object[] { "TNT", "NGN", "TNT", 'T', IRON.plate(), 'N', KNO.dust(), 'G', Items.gunpowder }); - addRecipeAuto(new ItemStack(ModBlocks.det_charge, 1), new Object[] { "PDP", "DTD", "PDP", 'P', STEEL.plate(), 'D', ModBlocks.det_cord, 'T', ModItems.ingot_semtex }); + addRecipeAuto(new ItemStack(ModBlocks.det_cord, 4), new Object[] { " P ", "PGP", " P ", 'P', Items.paper, 'G', Items.gunpowder }); + addRecipeAuto(new ItemStack(ModBlocks.det_charge, 1), new Object[] { "PDP", "DTD", "PDP", 'P', STEEL.plate(), 'D', ModBlocks.det_cord, 'T', ANY_PLASTICEXPLOSIVE.ingot() }); addRecipeAuto(new ItemStack(ModBlocks.det_nuke, 1), new Object[] { "PDP", "DCD", "PDP", 'P', ModItems.plate_desh, 'D', ModBlocks.det_charge, 'C', ModItems.man_core }); addRecipeAuto(new ItemStack(ModBlocks.det_miner, 4), new Object[] { "FFF", "ITI", "ITI", 'F', Items.flint, 'I', IRON.plate(), 'T', ModItems.ball_dynamite }); addRecipeAuto(new ItemStack(ModBlocks.det_miner, 12), new Object[] { "FFF", "ITI", "ITI", 'F', Items.flint, 'I', STEEL.plate(), 'T', ANY_PLASTICEXPLOSIVE.ingot() }); @@ -848,6 +850,8 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModBlocks.deco_pipe_rim_marked, 8), new Object[] { "PPP", "PCP", "PPP", 'P', ModBlocks.deco_pipe_rim_green, 'C', KEY_GREEN }); addRecipeAuto(new ItemStack(ModBlocks.deco_pipe_quad_marked, 8), new Object[] { "PPP", "PCP", "PPP", 'P', ModBlocks.deco_pipe_quad_green, 'C', KEY_GREEN }); addRecipeAuto(new ItemStack(ModBlocks.deco_pipe_framed_marked, 8), new Object[] { "PPP", "PCP", "PPP", 'P', ModBlocks.deco_pipe_framed_green, 'C', KEY_GREEN }); + + addRecipeAuto(new ItemStack(ModBlocks.deco_emitter), new Object[] { "IDI", "DRD", "IDI", 'I', IRON.ingot(), 'D', DIAMOND.gem(), 'R', REDSTONE.block() }); addRecipeAuto(new ItemStack(Items.name_tag), new Object[] { "SB ", "BPB", " BP", 'S', Items.string, 'B', KEY_SLIME, 'P', Items.paper }); addRecipeAuto(new ItemStack(Items.name_tag), new Object[] { "SB ", "BPB", " BP", 'S', Items.string, 'B', ANY_TAR.any(), 'P', Items.paper }); @@ -883,6 +887,12 @@ public class CraftingManager { addShapelessAuto(new ItemStack(ModItems.canister_full, 1, Fluids.LIGHTOIL.getID()), new Object[] { ModItems.canister_lightoil }); addShapelessAuto(new ItemStack(ModItems.canister_full, 1, Fluids.BIOFUEL.getID()), new Object[] { ModItems.canister_biofuel }); addShapelessAuto(new ItemStack(ModItems.canister_full, 1, Fluids.ETHANOL.getID()), new Object[] { ModItems.canister_ethanol }); + + addShapelessAuto(DictFrame.fromOne(ModItems.parts_legendary, EnumLegendaryType.TIER1), new Object[] { ModItems.ingot_chainsteel, ASBESTOS.ingot(), ModItems.gem_alexandrite }); + addShapelessAuto(DictFrame.fromOne(ModItems.parts_legendary, EnumLegendaryType.TIER1, 3), new Object[] { DictFrame.fromOne(ModItems.parts_legendary, EnumLegendaryType.TIER2) }); + addShapelessAuto(DictFrame.fromOne(ModItems.parts_legendary, EnumLegendaryType.TIER2), new Object[] { ModItems.ingot_chainsteel, ModItems.ingot_bismuth, ModItems.gem_alexandrite, ModItems.gem_alexandrite }); + addShapelessAuto(DictFrame.fromOne(ModItems.parts_legendary, EnumLegendaryType.TIER2, 3), new Object[] { DictFrame.fromOne(ModItems.parts_legendary, EnumLegendaryType.TIER3) }); + addShapelessAuto(DictFrame.fromOne(ModItems.parts_legendary, EnumLegendaryType.TIER3), new Object[] { ModItems.ingot_chainsteel, ModItems.ingot_smore, ModItems.gem_alexandrite, ModItems.gem_alexandrite, ModItems.gem_alexandrite }); if(GeneralConfig.enableBabyMode) { addShapelessAuto(new ItemStack(ModItems.cordite, 3), new Object[] { ModItems.ballistite, Items.gunpowder, new ItemStack(Blocks.wool, 1, OreDictionary.WILDCARD_VALUE) }); diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index 5795a2fa2..cb0112dc3 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -13,6 +13,7 @@ import org.apache.commons.lang3.math.NumberUtils; import org.apache.logging.log4j.Level; import com.google.common.collect.Multimap; +import com.hbm.blocks.IStepTickReceiver; import com.hbm.blocks.ModBlocks; import com.hbm.blocks.generic.BlockAshes; import com.hbm.config.GeneralConfig; @@ -61,6 +62,7 @@ import com.hbm.util.EntityDamageUtil; import com.hbm.world.WorldProviderNTM; import com.hbm.world.generator.TimedGenerator; +import codechicken.lib.math.MathHelper; import cpw.mods.fml.common.eventhandler.Event.Result; import cpw.mods.fml.common.eventhandler.EventPriority; import cpw.mods.fml.common.eventhandler.SubscribeEvent; @@ -1099,6 +1101,18 @@ public class ModEventHandler { if(player.ticksExisted == 100 || player.ticksExisted == 200) CraftingManager.crumple(); + if(event.phase == TickEvent.Phase.START) { + int x = MathHelper.floor_double(player.posX); + int y = MathHelper.floor_double(player.posY - player.yOffset - 0.5); + int z = MathHelper.floor_double(player.posZ); + Block b = player.worldObj.getBlock(x, y, z); + + if(b instanceof IStepTickReceiver) { + IStepTickReceiver step = (IStepTickReceiver) b; + step.onPlayerStep(player.worldObj, x, y, z, player); + } + } + if(!player.worldObj.isRemote && event.phase == TickEvent.Phase.START) { /// GHOST FIX START /// diff --git a/src/main/java/com/hbm/main/NEIConfig.java b/src/main/java/com/hbm/main/NEIConfig.java index 5a8644263..1d57eeb24 100644 --- a/src/main/java/com/hbm/main/NEIConfig.java +++ b/src/main/java/com/hbm/main/NEIConfig.java @@ -71,6 +71,10 @@ public class NEIConfig implements IConfigureNEI { API.registerUsageHandler(new LiquefactionHandler()); API.registerRecipeHandler(new SolidificationHandler()); API.registerUsageHandler(new SolidificationHandler()); + API.registerRecipeHandler(new CrackingHandler()); + API.registerUsageHandler(new CrackingHandler()); + API.registerRecipeHandler(new FractioningHandler()); + API.registerUsageHandler(new FractioningHandler()); //Some things are even beyond my control...or are they? API.hideItem(ItemBattery.getEmptyBattery(ModItems.memory)); diff --git a/src/main/java/com/hbm/render/tileentity/RenderEmitter.java b/src/main/java/com/hbm/render/tileentity/RenderEmitter.java new file mode 100644 index 000000000..bf1762f70 --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderEmitter.java @@ -0,0 +1,79 @@ +package com.hbm.render.tileentity; + +import java.awt.Color; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.generic.BlockEmitter.TileEntityEmitter; +import com.hbm.render.util.BeamPronter; +import com.hbm.render.util.BeamPronter.EnumBeamType; +import com.hbm.render.util.BeamPronter.EnumWaveType; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Vec3; + +public class RenderEmitter extends TileEntitySpecialRenderer { + + @Override + public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f) { + + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y, z + 0.5); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_CULL_FACE); + + GL11.glRotatef(90, 0F, 1F, 0F); + + switch(tileEntity.getBlockMetadata()) { + case 0: + GL11.glTranslated(0.0D, 0.5D, -0.5D); + GL11.glRotatef(90, 1F, 0F, 0F); break; + case 1: + GL11.glTranslated(0.0D, 0.5D, 0.5D); + GL11.glRotatef(90, -1F, 0F, 0F); break; + case 2: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 4: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(0, 0F, 1F, 0F); break; + } + + GL11.glTranslated(0, 0.5, 0.5); + TileEntityEmitter emitter = (TileEntityEmitter) tileEntity; + int range = emitter.beam - 1; + int originalColor = emitter.color == 0 ? Color.HSBtoRGB(tileEntity.getWorldObj().getTotalWorldTime() / 50.0F, 0.5F, 0.25F) & 16777215 : emitter.color; + float girth = emitter.girth; + int r = (originalColor & 0xff0000) >> 16; + int g = (originalColor & 0x00ff00) >> 8; + int b = (originalColor & 0x0000ff); + float innerMult = 0.85F; + float outerMult = 0.1F; + int colorInner = ((int)(r * innerMult) << 16) | ((int)(g * innerMult) << 8) | ((int)(b * innerMult)); + int colorOuter = ((int)(r * outerMult) << 16) | ((int)(g * outerMult) << 8) | ((int)(b * outerMult)); + + if(range > 0) { + + int segments = (int)Math.max(Math.sqrt(girth * 50), 2); + BeamPronter.prontBeam(Vec3.createVectorHelper(0, 0, range), EnumWaveType.SPIRAL, EnumBeamType.SOLID, colorOuter, colorInner, 0, 1, 0F, segments, girth); + + if(emitter.effect == 1) { + BeamPronter.prontBeam(Vec3.createVectorHelper(0, 0, range), EnumWaveType.RANDOM, EnumBeamType.SOLID, colorOuter, colorInner, (int) tileEntity.getWorldObj().getTotalWorldTime() / 2, (int)Math.max(range / girth / 2, 1), girth * 2, 4, girth * 0.1F); + BeamPronter.prontBeam(Vec3.createVectorHelper(0, 0, range), EnumWaveType.RANDOM, EnumBeamType.SOLID, colorOuter, colorInner, (int) tileEntity.getWorldObj().getTotalWorldTime() / 2 + 15, (int)Math.max(range / girth / 4, 1), girth * 2, 4, girth * 0.1F); + } + + if(emitter.effect == 2) { + BeamPronter.prontBeam(Vec3.createVectorHelper(0, 0, range), EnumWaveType.SPIRAL, EnumBeamType.SOLID, colorOuter, colorInner, (int) (tileEntity.getWorldObj().getTotalWorldTime() + f) * -10 % 360, (int)Math.max(range / girth / 2, 1), girth * 2, 4, girth * 0.1F); + BeamPronter.prontBeam(Vec3.createVectorHelper(0, 0, range), EnumWaveType.SPIRAL, EnumBeamType.SOLID, colorOuter, colorInner, (int) (tileEntity.getWorldObj().getTotalWorldTime() + f) * -10 % 360 + 180, (int)Math.max(range / girth / 2, 1), girth * 2, 4, girth * 0.1F); + } + if(emitter.effect == 3) { + BeamPronter.prontBeam(Vec3.createVectorHelper(0, 0, range), EnumWaveType.SPIRAL, EnumBeamType.SOLID, colorOuter, colorInner, (int) (tileEntity.getWorldObj().getTotalWorldTime() + f) * -10 % 360, (int)Math.max(range / girth / 2, 1), girth * 2, 4, girth * 0.1F); + BeamPronter.prontBeam(Vec3.createVectorHelper(0, 0, range), EnumWaveType.SPIRAL, EnumBeamType.SOLID, colorOuter, colorInner, (int) (tileEntity.getWorldObj().getTotalWorldTime() + f) * -10 % 360 + 120, (int)Math.max(range / girth / 2, 1), girth * 2, 4, girth * 0.1F); + BeamPronter.prontBeam(Vec3.createVectorHelper(0, 0, range), EnumWaveType.SPIRAL, EnumBeamType.SOLID, colorOuter, colorInner, (int) (tileEntity.getWorldObj().getTotalWorldTime() + f) * -10 % 360 + 240, (int)Math.max(range / girth / 2, 1), girth * 2, 4, girth * 0.1F); + } + } + + GL11.glEnable(GL11.GL_LIGHTING); + + GL11.glPopMatrix(); + } +} diff --git a/src/main/java/com/hbm/render/util/BeamPronter.java b/src/main/java/com/hbm/render/util/BeamPronter.java index 261667c9d..bdf1f4826 100644 --- a/src/main/java/com/hbm/render/util/BeamPronter.java +++ b/src/main/java/com/hbm/render/util/BeamPronter.java @@ -59,7 +59,8 @@ public class BeamPronter { spinner.rotateAroundY((float) Math.PI * (float) start / 180F); spinner.rotateAroundY((float) Math.PI * 45F / 180F * i); } else if(wave == EnumWaveType.RANDOM) { - spinner.rotateAroundY((float) Math.PI * 4 * rand.nextFloat()); + spinner.rotateAroundY((float) Math.PI * 2 * rand.nextFloat()); + spinner.rotateAroundY((float) Math.PI * 2 * rand.nextFloat()); } double pX = unit.xCoord * segLength * i + spinner.xCoord; @@ -82,7 +83,20 @@ public class BeamPronter { for(int j = 1; j <= layers; j++) { float inter = (float) (j - 1) / (float) (layers - 1); - int color = (int) (outerColor + (innerColor - outerColor) * inter); + + int r1 = ((outerColor & 0xFF0000) >> 16); + int g1 = ((outerColor & 0x00FF00) >> 8); + int b1 = ((outerColor & 0x0000FF) >> 0); + + int r2 = ((innerColor & 0xFF0000) >> 16); + int g2 = ((innerColor & 0x00FF00) >> 8); + int b2 = ((innerColor & 0x0000FF) >> 0); + + int r = ((int)(r1 + (r2 - r1) * inter)) << 16; + int g = ((int)(g1 + (g2 - g1) * inter)) << 8; + int b = ((int)(b1 + (b2 - b1) * inter)) << 0; + + int color = r | g | b; tessellator.startDrawingQuads(); tessellator.setColorOpaque_I(color); diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 4edfbd02e..847a98149 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -3,6 +3,7 @@ package com.hbm.tileentity; import java.util.HashMap; import com.hbm.blocks.generic.BlockBobble.TileEntityBobble; +import com.hbm.blocks.generic.BlockEmitter.TileEntityEmitter; import com.hbm.blocks.generic.BlockLoot.TileEntityLoot; import com.hbm.tileentity.bomb.*; import com.hbm.tileentity.conductor.*; @@ -188,6 +189,7 @@ public class TileMappings { put(TileEntityLoot.class, "tileentity_ntm_loot"); put(TileEntityBobble.class, "tileentity_ntm_bobblehead"); + put(TileEntityEmitter.class, "tileentity_ntm_emitter"); put(TileEntityDoorGeneric.class, "tileentity_ntm_door"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java index edeac7c23..d4c0341dc 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java @@ -1,6 +1,5 @@ package com.hbm.tileentity.machine; -import java.util.ArrayList; import java.util.List; import com.hbm.interfaces.IFluidAcceptor; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java index ab62f8427..24a59581e 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineChemplant.java @@ -130,6 +130,17 @@ public class TileEntityMachineChemplant extends TileEntityMachineBase implements } this.networkPack(data, 150); + } else { + + if(isProgressing && this.worldObj.getTotalWorldTime() % 3 == 0) { + + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset).getOpposite(); + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + double x = xCoord + 0.5 + dir.offsetX * 1.125 + rot.offsetX * 0.125; + double y = yCoord + 3; + double z = zCoord + 0.5 + dir.offsetZ * 1.125 + rot.offsetZ * 0.125; + worldObj.spawnParticle("cloud", x, y, z, 0.0, 0.1, 0.0); + } } } diff --git a/src/main/java/com/hbm/util/ArmorUtil.java b/src/main/java/com/hbm/util/ArmorUtil.java index d86857913..efdccc7e1 100644 --- a/src/main/java/com/hbm/util/ArmorUtil.java +++ b/src/main/java/com/hbm/util/ArmorUtil.java @@ -59,6 +59,7 @@ public class ArmorUtil { 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); + ArmorRegistry.registerHazard(ModItems.rpa_helmet, HazardClass.PARTICLE_COARSE, HazardClass.PARTICLE_FINE, HazardClass.GAS_CHLORINE, HazardClass.BACTERIA, HazardClass.GAS_MONOXIDE, HazardClass.LIGHT, HazardClass.SAND); //Ob ihr wirklich richtig steht, seht ihr wenn das Licht angeht! registerIfExists(Compat.MOD_GT6, "gt.armor.hazmat.universal.head", HazardClass.PARTICLE_COARSE, HazardClass.PARTICLE_FINE, HazardClass.GAS_CHLORINE, HazardClass.BACTERIA, HazardClass.GAS_MONOXIDE, HazardClass.LIGHT, HazardClass.SAND); diff --git a/src/main/java/com/hbm/util/InventoryUtil.java b/src/main/java/com/hbm/util/InventoryUtil.java index 1a1878bbe..19477712e 100644 --- a/src/main/java/com/hbm/util/InventoryUtil.java +++ b/src/main/java/com/hbm/util/InventoryUtil.java @@ -365,8 +365,10 @@ public class InventoryUtil { if(o instanceof ItemStack[]) { ItemStack[] ingredients = (ItemStack[]) o; - ItemStack[][] stacks = new ItemStack[1][0]; - stacks[0] = ingredients; + ItemStack[][] stacks = new ItemStack[ingredients.length][1]; + for(int i = 0; i < ingredients.length; i++) { + stacks[i][0] = ingredients[i]; + } return stacks; } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 609ebf63f..838409c55 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -110,9 +110,11 @@ bomb.triggered=Erfolgreich ausgelöst! book.test.page1=Testseite 1 chem.ASPHALT=Asphaltherstellung +chem.BAKELITE=Bakelitherstellung chem.BALEFIRE=BF-Raketentreibstoffherstellung chem.BP_BIOFUEL=Biodieselumesterung chem.BP_BIOGAS=Biogasherstellung +chem.C4=C4-Synthese chem.CC_HEATING=Fortgeschrittene Kohleverflüssigung chem.CC_HEAVY=Einfache Kohleverflüssigung chem.CC_I=Erweiterte Kohleverflüssigung @@ -120,6 +122,8 @@ chem.CC_NAPHTHA=Naphtha-Kohleverflüssigung chem.CC_OIL=Kohleverflüssigung chem.CIRCUIT_4=Überstaktete Schaltkreisherstellung chem.CIRCUIT_5=Leistungsstarke Schaltkreisherstellung +chem.CO2=CO2-Herstellung +chem.COALGAS_LEADED=Bleikohlebenzin mischen chem.COLTAN_CLEANING=Coltanreinigung chem.COLTAN_CRYSTAL=Tantal-Kristallisierung chem.COLTAN_PAIN=Pandemonium(III)tantalit-Herstellung @@ -148,15 +152,19 @@ chem.FP_SMEAR=Industrieölverarbeitung chem.FR_PETROIL=Gemischherstellung chem.FR_REOIL=Öl-Wiederaufbereitung chem.GASOLINE=Benzinherstellung +chem.GASOLINE_LEADED=Bleibenzin mischen chem.HELIUM3=Helium-3-Extraktion aus Mondgestein chem.KEVLAR=Kevlarverbundherstellung chem.LPG=Petroleumgasverflüssigung +chem.LUBRICANT=Schmieröl mischen chem.NITAN=NITAN-Supertreibstoff mischen chem.OIL_SAND=Teersand-Extraktion chem.OSMIRIDIUM_DEATH=Osmiridiumlösung-Herstellung chem.PEROXIDE=Wasserstoffperoxidherstellung +chem.PETROIL_LEADED=Bleigemisch mischen chem.POLYMER=Polymersynthese chem.PUF6=Plutoniumhexafluoridproduktion +chem.RUBBER=Gummiherstellung chem.SAS3=Schrabidiumtrisulfatherstellung chem.SATURN=Saturnitherstellung chem.SCHRABIDATE=Eisenschrabidatherstellung @@ -180,6 +188,7 @@ chem.SOLID_FUEL=Festbrennstoffherstellung chem.STEAM=Wasser kochen chem.TEL=TEL mischen chem.TEST=Test +chem.TNT=TNT-Synthese chem.UF6=Uranhexafluoridproduktion chem.VIT_GAS=Gas-Atommüllvitrifizierung chem.VIT_LIQUID=Flüssig-Atommüllvitrifizierung @@ -463,6 +472,7 @@ hbmfluid.bitumen=Bitumen hbmfluid.carbondioxide=Kohlenstoffdioxid hbmfluid.coolant=Kühlflüssigkeit hbmfluid.coalgas=Kohlebenzin +hbmfluid.coalgas_leaded=Bleikohlebenzin hbmfluid.coaloil=Kohleöl hbmfluid.crackoil=Crack-Öl hbmfluid.cryogel=Kryogel @@ -474,7 +484,8 @@ hbmfluid.ethanol=Ethanol hbmfluid.enderjuice=Endersaft hbmfluid.fracksol=Frackinglösung hbmfluid.gas=Erdgas -hbmfluid.gasoline=Bleibenzin +hbmfluid.gasoline=Benzin +hbmfluid.gasoline_leaded=Bleibenzin hbmfluid.heatingoil=Heizöl hbmfluid.heavyoil=Schweröl hbmfluid.heavywater=Schweres Wasser @@ -498,6 +509,7 @@ hbmfluid.oil=Rohöl hbmfluid.oxygen=Flüssiger Sauerstoff hbmfluid.pain=Pandemonium(III)tantalit-Lösung hbmfluid.petroil=Gemisch +hbmfluid.petroil_leaded=Bleigemisch hbmfluid.petroleum=Petroleumgas hbmfluid.plasma_bf=Balefire-Plasma hbmfluid.plasma_dh3=Deuterium-Helium-3-Plasma @@ -2073,6 +2085,7 @@ item.particle_muon.name=Myonenkapsel item.particle_sparkticle.name=Sparktikelkapsel item.particle_strange.name=Strange-Quark-Kapsel item.particle_tachyon.name=Tachyonenkapsel +item.parts_legendary.name=Legendäre Teile item.peas.name=Erbsen item.pedestal_steel.name=Stahlsockel item.pellet_advanced.name=Fortgeschrittenes Watzaufwertugspellet @@ -2607,7 +2620,9 @@ item.steel_pickaxe.name=Stahlspitzhacke item.steel_plate.name=Stahlbrustpanzer item.steel_shovel.name=Stahlschaufel item.steel_sword.name=Stahlschwert +item.stick_c4.name=Stange C4 item.stick_dynamite.name=Stange Dynamit +item.stick_semtex.name=Stange Semtex item.stick_tnt.name=Stange TNT item.stopsign.name=Stopschild-Streitaxt item.sulfur.name=Schwefel @@ -2868,6 +2883,7 @@ tile.block_advanced_alloy.name=Fortgeschrittener Legierungsblock tile.block_aluminium.name=Aluminiumblock tile.block_asbestos.name=Asbestblock tile.block_australium.name=Australiumblock +tile.block_bakelite.name=Bakelitblock tile.block_beryllium.name=Berylliumblock tile.block_bismuth.name=Bismutblock tile.block_boron.name=Borblock @@ -2921,6 +2937,7 @@ tile.block_niobium.name=Niobblock tile.block_plutonium.name=Plutoniumblock tile.block_plutonium_fuel.name=Plutoniumkernbrennstoffblock tile.block_polonium.name=Polonium-210-Block +tile.block_polymer.name=Polymerblock tile.block_pu_mix.name=Reaktorfähiger Plutoniumblock tile.block_pu238.name=Plutonium-238-Block tile.block_pu239.name=Plutonium-239-Block @@ -2928,6 +2945,7 @@ tile.block_pu240.name=Plutonium-240-Block tile.block_red_copper.name=Roter Kupferblock tile.block_red_phosphorus.name=Roter Phosphorblock tile.block_reiium.name=Reiiumblock +tile.block_rubber.name=Gummiblock tile.block_schrabidate.name=Eisenschrabidatblock tile.block_schrabidium.name=Schrabidiumblock tile.block_schrabidium_cluster.name=Schrabidium-Cluster @@ -3048,6 +3066,7 @@ tile.crystal_virus.name=Dunkler Kristall tile.deco_aluminium.name=Aluminium-Dekoblock tile.deco_asbestos.name=Asbestdach tile.deco_beryllium.name=Beryllium-Dekoblock +tile.deco_emitter.name=Deko-Lichtemitter tile.deco_lead.name=Blei-Dekoblock tile.deco_rbmk.name=RBMK-Dekoblock tile.deco_rbmk_smooth.name=Glatter RBMK-Dekoblock diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 3e7fede99..b5c658b3f 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -277,9 +277,11 @@ book.starter.page18=vær is just a guy who has been trapped in the grey void fea #book.rbmk.page16=§4§lAvoid. chem.ASPHALT=Asphalt Production +chem.BAKELITE=Bakelite Production chem.BALEFIRE=BF Rocket Fuel Mixing chem.BP_BIOFUEL=Biofuel Transesterification chem.BP_BIOGAS=Biogas Production +chem.C4=C-4 Synthesis chem.CC_HEATING=Advanced Coal Liquefaction chem.CC_HEAVY=Basic Coal Liquefaction chem.CC_I=Enhanced Coal Liquefaction @@ -288,6 +290,7 @@ chem.CC_OIL=Coal Liquefaction chem.CIRCUIT_4=Overclocked Circuit Production chem.CIRCUIT_5=High Performance Circuit Production chem.CO2=Carbon Dioxide Production +chem.COALGAS_LEADED=Leaded Coal Gasoline Mixing chem.COLTAN_CLEANING=Coltan Purifying chem.COLTAN_CRYSTAL=Tantalium Crystallizing chem.COLTAN_PAIN=Pandemonium(III)tantalite Production @@ -318,17 +321,21 @@ chem.FR_PETROIL=Petroil Mixing chem.FR_REOIL=Oil Reprocessing chem.FRACKSOL=Fracking Solution Production chem.GASOLINE=Gasoline Production +chem.GASOLINE_LEADED=Leaded Gasoline Mixing chem.HEAVY_ELECTROLYSIS=Heavy Water Cryo-Electrolysis chem.HELIUM3=Helium-3 Extraction from Moon Turf chem.KEVLAR=Kevlar Compound Production chem.LPG=Petroleum Gas Liquefaction +chem.LUBRICANT=Lubricant Mixing chem.METH=Methamphetamine Synthesis chem.NITAN=NITAN Super Fuel Mixing chem.OIL_SAND=Tar Sand Extraction chem.OSMIRIDIUM_DEATH=Osmiridic Solution Production chem.PEROXIDE=Hydrogen Peroxide Production +chem.PETROIL_LEADED=Leaded Petroil Mixing chem.POLYMER=Polymer Synthesis chem.PUF6=Plutonium Hexafluoride Production +chem.RUBBER=Rubber Production chem.SAS3=Schrabidium Trisulfide Production chem.SATURN=Saturnite Production chem.SCHRABIDATE=Ferric Schrabidate Production @@ -352,6 +359,7 @@ chem.SOLID_FUEL=Solid Rocket Fuel Production chem.STEAM=Water Boiling chem.TEL=TEL Mixing chem.TEST=Test +chem.TNT=TNT Synthesis chem.UF6=Uranium Hexafluoride Production chem.VIT_GAS=Gaseous Nuclear Waste Vitrification chem.VIT_LIQUID=Liquid Nuclear Waste Vitrification @@ -655,6 +663,7 @@ hbmfluid.biogas=Biogas hbmfluid.bitumen=Bitumen hbmfluid.carbondioxide=Carbon Dioxide hbmfluid.coalgas=Coal Gasoline +hbmfluid.coalgas_leaded=Leaded Coal Gasoline hbmfluid.coaloil=Coal Oil hbmfluid.coolant=Coolant hbmfluid.crackoil=Cracked Oil @@ -667,7 +676,8 @@ hbmfluid.ethanol=Ethanol hbmfluid.enderjuice=Ender Juice hbmfluid.fracksol=Fracking Solution hbmfluid.gas=Natural Gas -hbmfluid.gasoline=Leaded Gasoline +hbmfluid.gasoline=Gasoline +hbmfluid.gasoline_leaded=Leaded Gasoline hbmfluid.heatingoil=Heating Oil hbmfluid.heavyoil=Heavy Oil hbmfluid.heavywater=Heavy Water @@ -691,6 +701,7 @@ hbmfluid.oil=Crude Oil hbmfluid.oxygen=Liquid Oxygen hbmfluid.pain=Pandemonium(III)tantalite Solution hbmfluid.petroil=Petroil +hbmfluid.petroil_leaded=Leaded Petroil hbmfluid.petroleum=Petroleum Gas hbmfluid.plasma_bf=Balefire Plasma hbmfluid.plasma_dh3=Deuterium-Helium-3 Plasma @@ -2335,6 +2346,7 @@ item.particle_muon.name=Muon Capsule item.particle_sparkticle.name=Sparkticle Capsule item.particle_strange.name=Strange Quark Capsule item.particle_tachyon.name=Tachyon Capsule +item.parts_legendary.name=Legendary Parts item.peas.name=Peas item.pedestal_steel.name=Steel Pedestal item.pellet_advanced.name=Advanced Watz Performance Improver @@ -2961,7 +2973,9 @@ item.steel_pickaxe.name=Steel Pickaxe item.steel_plate.name=Steel Chestplate item.steel_shovel.name=Steel Shovel item.steel_sword.name=Steel Sword +item.stick_c4.name=Stick of C-4 item.stick_dynamite.name=Stick of Dynamite +item.stick_semtex.name=Stick of Semtex item.stick_tnt.name=Stick of TNT item.stopsign.name=Stop Sign Battle Axe item.sulfur.name=Sulfur @@ -3232,6 +3246,7 @@ tile.block_advanced_alloy.name=Block of Advanced Alloy tile.block_aluminium.name=Block of Aluminium tile.block_asbestos.name=Block of Asbestos tile.block_australium.name=Block of Australium +tile.block_bakelite.name=Block of Bakelite tile.block_beryllium.name=Block of Beryllium tile.block_bismuth.name=Block of Bismuth tile.block_boron.name=Block of Boron @@ -3285,6 +3300,7 @@ tile.block_niobium.name=Block of Niobium tile.block_plutonium.name=Block of Plutonium tile.block_plutonium_fuel.name=Block of Plutonium Fuel tile.block_polonium.name=Block of Polonium-210 +tile.block_polymer.name=Block of Polymer tile.block_pu_mix.name=Block of Reactor Grade Plutonium tile.block_pu238.name=Block of Plutonium-238 tile.block_pu239.name=Block of Plutonium-239 @@ -3293,6 +3309,7 @@ tile.block_ra226.name=Block of Radium-226 tile.block_red_copper.name=Block of Red Copper tile.block_red_phosphorus.name=Block of Red Phosphorus tile.block_reiium.name=Block of Reiium +tile.block_rubber.name=Block of Rubber tile.block_schrabidate.name=Block of Ferric Schrabidate tile.block_schrabidium.name=Block of Schrabidium tile.block_schrabidium_cluster.name=Schrabidium Cluster @@ -3413,6 +3430,7 @@ tile.crystal_virus.name=Dark Crystal tile.deco_aluminium.name=Aluminium Deco Block tile.deco_asbestos.name=Asbestos Roof tile.deco_beryllium.name=Beryllium Deco Block +tile.deco_emitter.name=Deco Light Emitter tile.deco_lead.name=Lead Deco Block tile.deco_rbmk.name=RBMK Deco Block tile.deco_rbmk_smooth.name=Smooth RBMK Deco Block diff --git a/src/main/resources/assets/hbm/sounds.json b/src/main/resources/assets/hbm/sounds.json index 40bb51e67..94aa7cb13 100644 --- a/src/main/resources/assets/hbm/sounds.json +++ b/src/main/resources/assets/hbm/sounds.json @@ -194,6 +194,7 @@ "step.iron_land": {"category": "player", "sounds": [{"name": "footsteps/iron_land", "stream": false}]}, "step.iron": {"category": "player", "sounds": ["footsteps/iron1", "footsteps/iron2", "footsteps/iron3", "footsteps/iron4"]}, "step.metalBlock": {"category": "block", "sounds": ["footsteps/metalStep1", "footsteps/metalStep2", "footsteps/metalStep3", "footsteps/metalStep4"]}, + "step.powered": {"category": "player", "sounds": ["footsteps/powered1", "footsteps/powered2", "footsteps/powered3"]}, "player.vomit": {"category": "player", "sounds": [{"name": "player/vomit", "stream": false}]}, "player.cough": {"category": "player", "sounds": ["player/cough1", "player/cough2", "player/cough3", "player/cough4"]}, diff --git a/src/main/resources/assets/hbm/sounds/footsteps/powered1.ogg b/src/main/resources/assets/hbm/sounds/footsteps/powered1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..45146b8e02ecaa14e60401b33036303abd0dbcdf GIT binary patch literal 9576 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/sounds/footsteps/powered3.ogg b/src/main/resources/assets/hbm/sounds/footsteps/powered3.ogg new file mode 100644 index 0000000000000000000000000000000000000000..a1e90131385fa8fa1e1f06053fdec51efaeaae2e GIT binary patch literal 8517 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/emitter.png b/src/main/resources/assets/hbm/textures/blocks/emitter.png new file mode 100644 index 0000000000000000000000000000000000000000..cc2cf11e86e8f3d435f09e425377b7ea3f46e7da GIT binary patch literal 380 zcmV-?0fYXDP)3Ypt%0F{fHesYp@Pb*+=7QNZiNUs{i7#YVAfMFQa1Yp~?0u)&KHGw>gqx+|cB4IB7 aea>&ndb(MgXo}VV00000WbcEP){m5anbLowK~V@1N!YV~RNJ-?Y*2QU~6bT}L`o6U&hnDKZ_lc&?E zW6LK^h~t_2A|P-kwbqhIUp@LDhOtmbO%NgW>1L z1l}8qG)hpli_XE}p&2yUdpnOJ`%%@{+Capb2#}^AA}u~RfH=13_55AKV7WBNb6d-0 z+2Yq%I6k&JReaTkf%oeapPyY0Lr4-U2dtdd7|YTw=Q$i5by*d5cdd*n`fAmff`~nq z@9#g?4X&bBk1Gh)Q>fqe)v3+6s%b&%@WRKmUKey`RUR=HD&b9c`blzcW-g z{qxta1H37XhFe5hB<1%0I@56GzE6wH9ae)6PjBnb`FB*UJ@Ehs3&UCu0~_`$&zXUC OF?hQAxvX)ve*eW%Bl@Avnb^Z9&$E)3*COK8-z}cgPqiacUm( z^7_GS;YjO!I!m%foXhJQ&lhnIyE`d>P&2@a8fg48!0oPUDvjJEAZ+9&=$Z;ZxqKq> z`6D4s;G$_x(KQuaQ)!yh&{STgj@?zVMn%jP4p$EupXlOlFSK4HzyOB_`v9bq3DU`g zj{|76Zk1l|UI`sA7>+#SY(8guYm>onB&`tG19ySewU{>mU`<&9_?}RjpkS4JB0U;K rh;L)TDoIm>qF$?tdaWw`1Am4u#kFU+uH&N~00000NkvXXu0mjfh-s=l literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/rpa_legs.png b/src/main/resources/assets/hbm/textures/items/rpa_legs.png new file mode 100644 index 0000000000000000000000000000000000000000..a7a90dbd5a7cbfb29822471906e659c0facd9072 GIT binary patch literal 249 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfG}I5wurPC@+3Ni|9EjVoz2oP zu1)`b-NFQ2*2Fbzn-e}?-^!lS$4n~Q%3Br$$ zt`eAT!F6G(=#Tx?w^#iyPWSt{UR(Ra{0SD!%(KLq?&^9bC09IDUoLTY-rHzJ89&3O tM-qAo2@NhFqYd}8d)G`j%4EsFaA-%^J>S5+7kJJ$c=i{#OX$)s z%A_S!3Be%MltS%JdXPG6)uvi-l z!1nMFT>#oxF#vNvsqHWqCxrtJVIpOX+L z`5NiKyDiiVZ7izDgsh5ebQeaE8C+hRjiUIreH`C<$QucSj;Ao?$$LIMJ`4a?^BeNi zVcL$*uWxZxMTYBh4*M+t>({qL1Y$#s2~1JdO(GHeV0_kNk)}Km2;VpSsv%b8a)|ze ts%{du+u(K^T%Sjs0bHNsdB;rtj2|GOiVt;uO6LFo002ovPDHLkV1gD_lQaMT literal 0 HcmV?d00001 diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index bb45c5f46..0c7be7a1c 100755 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -3,7 +3,7 @@ "modid": "hbm", "name": "Hbm's Nuclear Tech", "description": "A mod that adds weapons, nuclear themed stuff and machines", - "version":"1.0.27_X4152", + "version":"1.0.27_X4158", "mcversion": "1.7.10", "url": "", "updateUrl": "",