From c60f5cf400fd3891f7edd25b692019136ed1a28d Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 15 Dec 2024 20:50:16 +0100 Subject: [PATCH] been livin' livid in a mirror maze --- changelog | 41 ++++- .../com/hbm/blocks/generic/BlockKeyhole.java | 4 +- .../java/com/hbm/config/ClientConfig.java | 2 + .../com/hbm/crafting/ConsumableRecipes.java | 4 +- .../java/com/hbm/crafting/WeaponRecipes.java | 76 --------- .../inventory/recipes/ChemplantRecipes.java | 7 - .../hbm/inventory/recipes/MagicRecipes.java | 35 ----- .../recipes/RotaryFurnaceRecipes.java | 2 +- .../com/hbm/itempool/ItemPoolsLegacy.java | 26 ++- .../java/com/hbm/itempool/ItemPoolsPile.java | 22 ++- .../com/hbm/itempool/ItemPoolsRedRoom.java | 17 +- src/main/java/com/hbm/items/ModItems.java | 148 +++++++++--------- .../java/com/hbm/items/weapon/ItemAmmo.java | 3 +- .../hbm/items/weapon/sedna/ItemGunBaseNT.java | 19 ++- .../com/hbm/items/weapon/sedna/Receiver.java | 30 ++-- .../weapon/sedna/factory/GunFactory.java | 2 +- .../hbm/items/weapon/sedna/factory/Lego.java | 12 +- .../weapon/sedna/factory/XFactory12ga.java | 34 ++-- .../weapon/sedna/factory/XFactory22lr.java | 6 +- .../weapon/sedna/factory/XFactory357.java | 18 ++- .../weapon/sedna/factory/XFactory40mm.java | 8 +- .../weapon/sedna/factory/XFactory44.java | 20 ++- .../weapon/sedna/factory/XFactory50.java | 6 +- .../weapon/sedna/factory/XFactory556mm.java | 16 +- .../weapon/sedna/factory/XFactory75Bolt.java | 6 +- .../weapon/sedna/factory/XFactory762mm.java | 16 +- .../weapon/sedna/factory/XFactory9mm.java | 32 ++-- .../sedna/factory/XFactoryAccelerator.java | 10 +- .../sedna/factory/XFactoryBlackPowder.java | 8 +- .../sedna/factory/XFactoryCatapult.java | 7 +- .../weapon/sedna/factory/XFactoryEnergy.java | 11 +- .../weapon/sedna/factory/XFactoryFolly.java | 8 +- .../weapon/sedna/factory/XFactoryRocket.java | 10 +- src/main/java/com/hbm/lib/RefStrings.java | 2 +- .../java/com/hbm/main/CraftingManager.java | 20 +-- .../com/hbm/main/ModEventHandlerClient.java | 37 +++-- src/main/java/com/hbm/main/NEIConfig.java | 7 + .../item/weapon/sedna/ItemRenderSTG77.java | 1 + .../com/hbm/render/util/RenderInfoSystem.java | 2 +- .../com/hbm/util/DamageResistanceHandler.java | 107 +++++++++---- .../world/gen/component/SiloComponent.java | 2 +- src/main/resources/assets/hbm/lang/de_DE.lang | 10 ++ src/main/resources/assets/hbm/lang/en_US.lang | 10 ++ src/main/resources/assets/hbm/sounds.json | 3 + .../hbm/sounds/weapon/fire/greaseGun.ogg | Bin 0 -> 42299 bytes .../assets/hbm/sounds/weapon/fire/tesla.ogg | Bin 0 -> 31647 bytes .../assets/hbm/sounds/weapon/fire/uzi.ogg | Bin 0 -> 6339 bytes .../assets/hbm/textures/models/weapons/g3.png | Bin 11441 -> 31342 bytes 48 files changed, 498 insertions(+), 369 deletions(-) create mode 100644 src/main/resources/assets/hbm/sounds/weapon/fire/greaseGun.ogg create mode 100644 src/main/resources/assets/hbm/sounds/weapon/fire/tesla.ogg create mode 100644 src/main/resources/assets/hbm/sounds/weapon/fire/uzi.ogg diff --git a/changelog b/changelog index 6c42b934e..a8c6a77e9 100644 --- a/changelog +++ b/changelog @@ -1,5 +1,32 @@ ## Gun rework -* Place holder place holder place hooooooooooldeeeeeeeer +* Killed off most existing guns because they suck lol +* Added a bunch of new guns with all new models, animations ammo types and recipes +* Guns are now tiered, using progression related cast components +* Play with your guns! Most guns now have animations for dry firing, and an "inspect" animation that plays when hitting the reload key when reloading is not possible +* Most guns can now be aimed properly. Aiming now uses a dedicated key (mouse 3) instead of sneaking + * All new gun keybinds can be configured of course + * "why is it MMB and not RMB? i know a really easy fix" no you don't, trust me i put a lot of thought into this and that's the only way without making the keybinds inconsistent as hell +* Guns now have multiple types, "standard arsenal" (i.e. the regular selection of guns), "b-side" (alt versions of guns which are not visible in creative, although craftable), "special" (not really part of of the progression tiering) and "legendary" (neither in creative nor in NEI) +* Guns now make the screen visibly recoil. This is a bit of a bold change about which I am unsure myself, so there is an option to turn it off: `/ntmclient set GUN_VISUAL_RECOIL false` +* Special damage types now have unique death animations, explosive damage will cause gibbing and laser/electric/fire damage will incinerate the target with only the skeleton remaining + * The skeletonizer has compatibility with most bipedal vanilla mobs as well as most mobs from TechGuns +* Repairing guns is now easier, repair kits are generally cheaper, and have multiple uses +* Instead of working the same until they stop working entirely when durability runs out, new guns now decrease in accuracy (below 50%) and damage (below 33%) when durability goes down. Guns however will still remain functional with no durability left, however the gun will deal next to no damage and barely ever hot anything. +* Since every time i add recycling for deprecated features, someone ends up complaining about the balancing of the recycling or gets confused on where to source items, old guns and ammo are simply not recycleable and instead become useless. Sucks to be you! +* Stuff I did not get around finishing: + * Legendary weapons were supposed to spawn in new dungeons, however right now they just spawn in red rooms + * Bolter's ammo types don't work as advertised and aren't craftable because æügh + * Some of the remnant guns that aren't part of the new system yet are not craftable + * Armor balance may not entirely be correct (read: at all), there's a new system for resistances and current values are just a vague estimate + * You can easily test things yourself, there is a spawn egg for a new test dummy mob which can be equipped with any armor. Damage calculation applies just the same as it would with real players + * Some gun variants aren't even in yet (b-sides, legendaries) because those were super low priority + * Purple bullets don't have their special effects just yet + * Headshot mulitpliers don't apply yet + * Trechnmaster abilities do not work with the new guns yet + * Nitra doesn't craft any of the new ammo types yet, not sure what to even do with that + * Ammo backpacks. yeah! just remembered something about those +* Most of these issues are quite minor so expect them to be resolved in the next update rather soon for the next stable release +* Yes this is what i have been up to for the past months. everything hurts. now go away ## Added * `/ntmclient` @@ -13,6 +40,13 @@ * Has an immense heat transfer speed bonus, allowing ICFs to be cooled even when using higher tier pellets * Cools quite effectively in PWRs, but has a negative neutron modifier and a small penalty of how much heat ends up usable * Overall a cheap and very good coolant, just not as efficient as sodium +* Rotary furnace + * Used to make new alloys like gunmetal or weapon steel + * Can also make desh and saturnite, as well as more efficient steel from iron fragments + * Requires both solid fuel and steam to work +* Ammo press + * Makes the new ammo types + * A recipe can be selected like in the anvil, however the selection will linger since the press has a proper inventory. Therefore, hooking up a hopper allows for ammo to be automated ## Changed * Updated russian and chinese localization @@ -61,6 +95,11 @@ * Basalt asbestos ore no longer creates asbestos particles every block update, meaning volcanoes no longer cause massive delays with chunk rendering due to constant block changes * Rockets shot by the rocket turret are no longer subject to gravity and lock onto the intended target * Updated the anti-personell mine's model, it also now has 4 different textures which are automatically applied depending on whether the mine is placed underground or what biome it is in +* Saturnite is now exclusively made in the rotary furnace, requiring reformate gas, making it effectively post-RBMK + * To offset the increased cost, some things like ESAPI inserts and desh shredder blades/stamps no longer require saturnite at all +* Small explosions from land mines and bombers now use the new and improved explosions animations from 40mm grenades +* All mini nuclear explosions now use the VNT system, meaning their damaging AoE can no longer be blocked by tiny bumps in the terrain and they will now correctly deal knockback +* Problably a ton of other shit i forgot to document because it's been months and ther only way i even feel anything is by drinking gasoline ## Fixed * The conveyor grabber should no longer skip over items when used in long lines diff --git a/src/main/java/com/hbm/blocks/generic/BlockKeyhole.java b/src/main/java/com/hbm/blocks/generic/BlockKeyhole.java index d3b5a1bd7..4f3368d92 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockKeyhole.java +++ b/src/main/java/com/hbm/blocks/generic/BlockKeyhole.java @@ -213,7 +213,9 @@ public class BlockKeyhole extends BlockStone { public static void spawnPedestalItem(World world, int x, int y, int z) { world.setBlock(x, y, z, ModBlocks.pedestal); TileEntityPedestal pedestal = (TileEntityPedestal) world.getTileEntity(x, y, z); - WeightedRandomChestContent content = (WeightedRandomChestContent) WeightedRandom.getRandomItem(world.rand, ItemPool.getPool(ItemPoolsRedRoom.POOL_RED_PEDESTAL)); + WeightedRandomChestContent content = world.rand.nextInt(20) == 0 ? + (WeightedRandomChestContent) WeightedRandom.getRandomItem(world.rand, ItemPool.getPool(ItemPoolsRedRoom.POOL_RED_WEAPON)) : + (WeightedRandomChestContent) WeightedRandom.getRandomItem(world.rand, ItemPool.getPool(ItemPoolsRedRoom.POOL_RED_PEDESTAL)); pedestal.item = content.theItemId.copy(); } } diff --git a/src/main/java/com/hbm/config/ClientConfig.java b/src/main/java/com/hbm/config/ClientConfig.java index 116b1ffb7..d0f2165c2 100644 --- a/src/main/java/com/hbm/config/ClientConfig.java +++ b/src/main/java/com/hbm/config/ClientConfig.java @@ -31,6 +31,7 @@ public class ClientConfig { public static ConfigWrapper INFO_POSITION = new ConfigWrapper(0); public static ConfigWrapper GUN_ANIMS_LEGACY = new ConfigWrapper(false); public static ConfigWrapper GUN_MODEL_FOV = new ConfigWrapper(false); + public static ConfigWrapper GUN_VISUAL_RECOIL = new ConfigWrapper(true); public static ConfigWrapper ITEM_TOOLTIP_SHOW_OREDICT = new ConfigWrapper(true); public static ConfigWrapper ITEM_TOOLTIP_SHOW_CUSTOM_NUKE = new ConfigWrapper(true); public static ConfigWrapper MAIN_MENU_WACKY_SPLASHES = new ConfigWrapper(true); @@ -48,6 +49,7 @@ public class ClientConfig { configMap.put("INFO_POSITION", INFO_POSITION); configMap.put("GUN_ANIMS_LEGACY", GUN_ANIMS_LEGACY); configMap.put("GUN_MODEL_FOV", GUN_MODEL_FOV); + configMap.put("GUN_VISUAL_RECOIL", GUN_VISUAL_RECOIL); configMap.put("ITEM_TOOLTIP_SHOW_OREDICT", ITEM_TOOLTIP_SHOW_OREDICT); configMap.put("ITEM_TOOLTIP_SHOW_OREDICT", ITEM_TOOLTIP_SHOW_CUSTOM_NUKE); configMap.put("MAIN_MENU_WACKY_SPLASHES", MAIN_MENU_WACKY_SPLASHES); diff --git a/src/main/java/com/hbm/crafting/ConsumableRecipes.java b/src/main/java/com/hbm/crafting/ConsumableRecipes.java index 7dab34492..789a20333 100644 --- a/src/main/java/com/hbm/crafting/ConsumableRecipes.java +++ b/src/main/java/com/hbm/crafting/ConsumableRecipes.java @@ -165,8 +165,8 @@ public class ConsumableRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.insert_era, 1), new Object[] { "DPD", "PSP", "DPD", 'D', ModItems.ducttape, 'P', IRON.plate(), 'S', ModItems.ingot_semtex }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.insert_kevlar, 1), new Object[] { "KIK", "IDI", "KIK", 'K', ModItems.plate_kevlar, 'I', ANY_RUBBER.ingot(), 'D', ModItems.ducttape }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.insert_sapi, 1), new Object[] { "PKP", "DPD", "PKP", 'P', ANY_PLASTIC.ingot(), 'K', ModItems.insert_kevlar, 'D', ModItems.ducttape }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.insert_esapi, 1), new Object[] { "PKP", "DSD", "PKP", 'P', ANY_PLASTIC.ingot(), 'K', ModItems.insert_sapi, 'D', ModItems.ducttape, 'S', BIGMT.plate() }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.insert_xsapi, 1), new Object[] { "PKP", "DSD", "PKP", 'P', ASBESTOS.ingot(), 'K', ModItems.insert_esapi, 'D', ModItems.ducttape, 'S', ModItems.ingot_meteorite_forged }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.insert_esapi, 1), new Object[] { "PKP", "DSD", "PKP", 'P', ANY_PLASTIC.ingot(), 'K', ModItems.insert_sapi, 'D', ModItems.ducttape, 'S', WEAPONSTEEL.plate() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.insert_xsapi, 1), new Object[] { "PKP", "DSD", "PKP", 'P', ASBESTOS.ingot(), 'K', ModItems.insert_esapi, 'D', ModItems.ducttape, 'S', BIGMT.plate() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.insert_yharonite, 1), new Object[] { "YIY", "IYI", "YIY", 'Y', ModItems.billet_yharonite, 'I', ModItems.insert_du }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.australium_iii, 1), new Object[] { "WSW", "PAP", "SPS", 'S', STEEL.plateWelded(), 'P', ANY_PLASTIC.ingot(), 'A', AUSTRALIUM.ingot(), 'W', GOLD.wireDense() }); diff --git a/src/main/java/com/hbm/crafting/WeaponRecipes.java b/src/main/java/com/hbm/crafting/WeaponRecipes.java index 5acaa73d4..877727e47 100644 --- a/src/main/java/com/hbm/crafting/WeaponRecipes.java +++ b/src/main/java/com/hbm/crafting/WeaponRecipes.java @@ -10,7 +10,6 @@ import static com.hbm.inventory.OreDictManager.*; import com.hbm.items.ItemAmmoEnums.*; import com.hbm.items.ItemEnums.EnumCasingType; -import com.hbm.items.food.ItemConserve.EnumFoodType; import com.hbm.items.machine.ItemCircuit.EnumCircuitType; import com.hbm.items.ModItems; import com.hbm.items.weapon.GunB92Cell; @@ -135,60 +134,14 @@ public class WeaponRecipes { CraftingManager.addShapelessAuto(new ItemStack(ModItems.weaponized_starblaster_cell, 1), new Object[] { new ItemStack(ModItems.fluid_tank_full, 1, Fluids.PEROXIDE.getID()), GunB92Cell.getFullCell(), CU.wireFine() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_fireext, 1), new Object[] { "HB", " T", 'H', STEEL.pipe(), 'B', STEEL.bolt(), 'T', ModItems.tank_steel }); - //TODO: somehow add more variance, 4 gauge is still missing - CraftingManager.addShapelessAuto(new ItemStack(ModItems.ammo_22lr, 16), new Object[] { ModItems.nitra_small }); - CraftingManager.addShapelessAuto(new ItemStack(ModItems.ammo_9mm, 16), new Object[] { ModItems.nitra_small, ModItems.nitra_small }); - CraftingManager.addShapelessAuto(new ItemStack(ModItems.ammo_5mm, 16), new Object[] { ModItems.nitra_small, ModItems.nitra_small, ModItems.nitra_small }); - CraftingManager.addShapelessAuto(new ItemStack(ModItems.ammo_357, 16, Ammo357Magnum.LEAD.ordinal()), new Object[] { ModItems.nitra, ModItems.nitra_small }); - CraftingManager.addShapelessAuto(new ItemStack(ModItems.ammo_44, 16), new Object[] { ModItems.nitra, ModItems.nitra_small, ModItems.nitra_small }); - CraftingManager.addShapelessAuto(new ItemStack(ModItems.ammo_45, 16), new Object[] { ModItems.nitra, ModItems.nitra_small, ModItems.nitra_small, ModItems.nitra_small }); - CraftingManager.addShapelessAuto(new ItemStack(ModItems.ammo_50ae, 16), new Object[] { ModItems.nitra, ModItems.nitra }); - CraftingManager.addShapelessAuto(new ItemStack(ModItems.ammo_556, 16), new Object[] { ModItems.nitra, ModItems.nitra, ModItems.nitra_small }); - CraftingManager.addShapelessAuto(new ItemStack(ModItems.ammo_20gauge, 16), new Object[] { ModItems.nitra, ModItems.nitra, ModItems.nitra_small, ModItems.nitra_small }); - CraftingManager.addShapelessAuto(new ItemStack(ModItems.ammo_12gauge, 16), new Object[] { ModItems.nitra, ModItems.nitra, ModItems.nitra }); - CraftingManager.addShapelessAuto(new ItemStack(ModItems.ammo_762, 16), new Object[] { ModItems.nitra, ModItems.nitra, ModItems.nitra, ModItems.nitra_small }); - CraftingManager.addShapelessAuto(new ItemStack(ModItems.ammo_50bmg, 16), new Object[] { ModItems.nitra, ModItems.nitra, ModItems.nitra, ModItems.nitra }); //Ammo assemblies CraftingManager.addRecipeAuto(new ItemStack(ModItems.pellet_flechette, 1), new Object[] { " L ", " L ", "LLL", 'L', PB.nugget() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.pellet_claws, 1), new Object[] { " X ", "X X", " XX", 'X', STEEL.plate() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.assembly_nuke, 1), new Object[] { " WP", "SEP", " WP", 'W', GOLD.wireFine(), 'P', STEEL.plate(), 'S', STEEL.shell(), 'E', ModItems.ball_tatb }); - //Rockets - CraftingManager.addRecipeAuto(new ItemStack(ModItems.ammo_rocket, 1), new Object[] { "T", "C", "G", 'T', ModItems.ball_dynamite, 'G', ModItems.rocket_fuel, 'C', STEEL.shell() }); - CraftingManager.addRecipeAuto(new ItemStack(ModItems.ammo_rocket, 2), new Object[] { "T", "C", "G", 'T', ANY_PLASTICEXPLOSIVE.ingot(), 'G', ModItems.rocket_fuel, 'C', STEEL.shell() }); - CraftingManager.addRecipeAuto(ModItems.ammo_rocket.stackFromEnum(AmmoRocket.HE), new Object[] { "G", "R", 'G', ANY_PLASTICEXPLOSIVE.ingot(), 'R', ModItems.ammo_rocket }); - CraftingManager.addRecipeAuto(ModItems.ammo_rocket.stackFromEnum(AmmoRocket.INCENDIARY), new Object[] { "G", "R", 'G', P_RED.dust(), 'R', ModItems.ammo_rocket }); - CraftingManager.addRecipeAuto(ModItems.ammo_rocket.stackFromEnum(AmmoRocket.PHOSPHORUS), new Object[] { "G", "R", 'G', P_WHITE.ingot(), 'R', ModItems.ammo_rocket }); - CraftingManager.addRecipeAuto(ModItems.ammo_rocket.stackFromEnum(AmmoRocket.EMP), new Object[] { "G", "R", 'G', "dustDiamond", 'R', ModItems.ammo_rocket }); - CraftingManager.addRecipeAuto(ModItems.ammo_rocket.stackFromEnum(AmmoRocket.SHRAPNEL), new Object[] { "G", "R", 'G', ModItems.pellet_buckshot, 'R', ModItems.ammo_rocket }); - CraftingManager.addRecipeAuto(ModItems.ammo_rocket.stackFromEnum(AmmoRocket.GLARE), new Object[] { "GGG", "GRG", "GGG", 'G', REDSTONE.dust(), 'R', ModItems.ammo_rocket }); - CraftingManager.addRecipeAuto(ModItems.ammo_rocket.stackFromEnum(AmmoRocket.CHLORINE), new Object[] { "G", "R", 'G', ModItems.pellet_gas, 'R', ModItems.ammo_rocket }); - CraftingManager.addRecipeAuto(ModItems.ammo_rocket.stackFromEnum(AmmoRocket.CANISTER), new Object[] { "G", "R", 'G', ModItems.pellet_canister, 'R', ModItems.ammo_rocket }); - CraftingManager.addRecipeAuto(ModItems.ammo_rocket.stackFromEnum(AmmoRocket.NUCLEAR), new Object[] { " P ", "NRN", " P ", 'P', PU239.nugget(), 'N', OreDictManager.getReflector(), 'R', ModItems.ammo_rocket }); - FluidType[] chainsawTypes = new FluidType[] {Fluids.DIESEL, Fluids.DIESEL_CRACK, Fluids.PETROIL, Fluids.PETROIL_LEADED, Fluids.GASOLINE, Fluids.GASOLINE_LEADED, Fluids.BIOFUEL}; for(FluidType type : chainsawTypes) CraftingManager.addRecipeAuto(ModItems.ammo_rocket.stackFromEnum(2, AmmoRocket.RPC), new Object[] { "BP ", "CBH", " DR", 'B', ModItems.blades_steel, 'P', STEEL.plate(), 'C', type.getDict(1000), 'H', STEEL.shell(), 'D', ModItems.piston_selenium, 'R', ModItems.ammo_rocket }); - - //Stinger Rockets - CraftingManager.addRecipeAuto(new ItemStack(ModItems.ammo_stinger_rocket, 2), "CE ", " S ", " F ", 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP), 'E', ANY_PLASTICEXPLOSIVE.ingot(), 'F', ModItems.rocket_fuel, 'S', STEEL.shell()); - CraftingManager.addRecipeAuto(ModItems.ammo_stinger_rocket.stackFromEnum(AmmoStinger.HE), new Object[] { "S", "R", 'S', ANY_PLASTICEXPLOSIVE.ingot(), 'R', ModItems.ammo_stinger_rocket }); - CraftingManager.addRecipeAuto(ModItems.ammo_stinger_rocket.stackFromEnum(AmmoStinger.INCENDIARY), new Object[] { "S", "R", 'S', P_RED.dust(), 'R', ModItems.ammo_stinger_rocket }); - CraftingManager.addRecipeAuto(ModItems.ammo_stinger_rocket.stackFromEnum(AmmoStinger.NUCLEAR), new Object[] { "RPR", "PSP", "RPR", 'R', ModItems.neutron_reflector, 'P', PU239.nugget(), 'S', ModItems.ammo_stinger_rocket.stackFromEnum(AmmoStinger.HE) }); - CraftingManager.addRecipeAuto(ModItems.ammo_stinger_rocket.stackFromEnum(AmmoStinger.BONES), new Object[] { " C ", "SKR", " P ", 'C', ModItems.fallout, 'S', SR90.dust(), 'K', ModItems.ammo_stinger_rocket, 'R', RA226.dust(), 'P', PU.dust() }); - - //40mm grenades - CraftingManager.addRecipeAuto(new ItemStack(ModItems.ammo_grenade, 2), new Object[] { " T ", "GCI", 'T', ANY_HIGHEXPLOSIVE.ingot(), 'G', ANY_SMOKELESS.dust(), 'C', ModItems.casing_50, 'I', IRON.plate() }); - CraftingManager.addRecipeAuto(ModItems.ammo_grenade.stackFromEnum(2, AmmoGrenade.TRACER), new Object[] { " T ", "GCI", 'T', LAPIS.dust(), 'G', ANY_SMOKELESS.dust(), 'C', ModItems.casing_50, 'I', IRON.plate() }); - CraftingManager.addRecipeAuto(ModItems.ammo_grenade.stackFromEnum(2, AmmoGrenade.HE), new Object[] { "GIG", 'G', ModItems.ammo_grenade, 'I', ANY_PLASTICEXPLOSIVE.ingot() }); - CraftingManager.addRecipeAuto(ModItems.ammo_grenade.stackFromEnum(2, AmmoGrenade.INCENDIARY), new Object[] { "GIG", 'G', ModItems.ammo_grenade, 'I', P_RED.dust() }); - CraftingManager.addRecipeAuto(ModItems.ammo_grenade.stackFromEnum(2, AmmoGrenade.PHOSPHORUS), new Object[] { "GIG", 'G', ModItems.ammo_grenade, 'I', P_WHITE.ingot() }); - CraftingManager.addRecipeAuto(ModItems.ammo_grenade.stackFromEnum(2, AmmoGrenade.CHLORINE), new Object[] { "GIG", 'G', ModItems.ammo_grenade, 'I', ModItems.powder_poison }); - CraftingManager.addRecipeAuto(ModItems.ammo_grenade.stackFromEnum(2, AmmoGrenade.CONCUSSION), new Object[] { "GIG", 'G', ModItems.ammo_grenade, 'I', Items.glowstone_dust }); - CraftingManager.addRecipeAuto(ModItems.ammo_grenade.stackFromEnum(2, AmmoGrenade.NUCLEAR), new Object[] { " P ", "GIG", " P ", 'G', ModItems.ammo_grenade.stackFromEnum(AmmoGrenade.HE), 'I', ModItems.neutron_reflector, 'P', PU239.nugget() }); - CraftingManager.addRecipeAuto(ModItems.ammo_grenade.stackFromEnum(AmmoGrenade.FINNED), new Object[] { "G", "R", 'G', Items.feather, 'R', ModItems.ammo_grenade }); - CraftingManager.addRecipeAuto(ModItems.ammo_grenade.stackFromEnum(AmmoGrenade.KAMPF), new Object[] { "G", "R", 'G', ModItems.ammo_rocket, 'R', ModItems.ammo_grenade }); - CraftingManager.addRecipeAuto(ModItems.ammo_grenade.stackFromEnum(AmmoGrenade.LEADBURSTER), new Object[] { "LCL", "CHC", "LML", 'L', ModItems.pellet_buckshot, 'C', ANY_SMOKELESS.dust(), 'H', AL.shell(), 'M', ModItems.motor }); //240mm Shells CraftingManager.addRecipeAuto(new ItemStack(ModItems.ammo_shell, 4), new Object[] { " T ", "GHG", "CCC", 'T', ModBlocks.tnt, 'G', Items.gunpowder, 'H', STEEL.shell(), 'C', CU.ingot() }); @@ -219,35 +172,6 @@ public class WeaponRecipes { //DGK Belts CraftingManager.addRecipeAuto(new ItemStack(ModItems.ammo_dgk, 1), new Object[] { "LLL", "GGG", "CCC", 'L', PB.plate(), 'G', ModItems.ballistite, 'C', CU.ingot() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.ammo_dgk, 1), new Object[] { "LLL", "GGG", "CCC", 'L', PB.plate(), 'G', ModItems.cordite, 'C', CU.ingot() }); - - //Mini Nuke - CraftingManager.addRecipeAuto(new ItemStack(ModItems.ammo_nuke, 1), new Object[] { "P", "S", "P", 'P', PU239.nugget(), 'S', ModItems.assembly_nuke }); - CraftingManager.addRecipeAuto(ModItems.ammo_nuke.stackFromEnum(AmmoFatman.LOW), new Object[] { "P", "S", 'P', PU239.nugget(), 'S', ModItems.assembly_nuke }); - CraftingManager.addRecipeAuto(ModItems.ammo_nuke.stackFromEnum(AmmoFatman.HIGH), new Object[] { "PPP", "PSP", "PPP", 'P', PU239.nugget(), 'S', ModItems.assembly_nuke }); - CraftingManager.addRecipeAuto(ModItems.ammo_nuke.stackFromEnum(AmmoFatman.TOTS), new Object[] { "PPP", "PIP", "PPP", 'P', ModItems.pellet_cluster, 'I', PU239.ingot() }); - CraftingManager.addRecipeAuto(ModItems.ammo_nuke.stackFromEnum(AmmoFatman.SAFE), new Object[] { "G", "N", 'G', Items.glowstone_dust, 'N', ModItems.ammo_nuke.stackFromEnum(AmmoFatman.LOW) }); - CraftingManager.addRecipeAuto(ModItems.ammo_nuke.stackFromEnum(AmmoFatman.PUMPKIN), new Object[] { " T ", "TST", " T ", 'T', ModBlocks.tnt, 'S', ModItems.assembly_nuke }); - - //MIRV recycling - CraftingManager.addShapelessAuto(new ItemStack(ModItems.ammo_nuke, 6), new Object[] { ModItems.ammo_nuke.stackFromEnum(AmmoFatman.MIRV) }); - CraftingManager.addShapelessAuto(ModItems.ammo_nuke.stackFromEnum(6, AmmoFatman.LOW), new Object[] { ModItems.ammo_nuke.stackFromEnum(AmmoFatman.MIRV_LOW) }); - CraftingManager.addShapelessAuto(ModItems.ammo_nuke.stackFromEnum(6, AmmoFatman.HIGH), new Object[] { ModItems.ammo_nuke.stackFromEnum(AmmoFatman.MIRV_HIGH) }); - CraftingManager.addShapelessAuto(ModItems.ammo_nuke.stackFromEnum(6, AmmoFatman.SAFE), new Object[] { ModItems.ammo_nuke.stackFromEnum(AmmoFatman.MIRV_SAFE) }); - - //MIRV - CraftingManager.addRecipeAuto(ModItems.ammo_nuke.stackFromEnum(AmmoFatman.MIRV), new Object[] { "NNN", "CDS", "NNN", 'N', ModItems.ammo_nuke, 'C', AL.plate(), 'D', ModBlocks.det_cord, 'S', STEEL.shell() }); - CraftingManager.addRecipeAuto(ModItems.ammo_nuke.stackFromEnum(AmmoFatman.MIRV_LOW), new Object[] { "NNN", "CDS", "NNN", 'N', ModItems.ammo_nuke.stackFromEnum(AmmoFatman.LOW), 'C', AL.plate(), 'D', ModBlocks.det_cord, 'S', STEEL.shell() }); - CraftingManager.addRecipeAuto(ModItems.ammo_nuke.stackFromEnum(AmmoFatman.MIRV_HIGH), new Object[] { "NNN", "CDS", "NNN", 'N', ModItems.ammo_nuke.stackFromEnum(AmmoFatman.HIGH), 'C', AL.plate(), 'D', ModBlocks.det_cord, 'S', STEEL.shell() }); - CraftingManager.addRecipeAuto(ModItems.ammo_nuke.stackFromEnum(AmmoFatman.MIRV_SAFE), new Object[] { "NNN", "CDS", "NNN", 'N', ModItems.ammo_nuke.stackFromEnum(AmmoFatman.SAFE), 'C', AL.plate(), 'D', ModBlocks.det_cord, 'S', STEEL.shell() }); - //since the milk part of the recipe isn't really present in the MIRV's effect, it might as well be replaced with something more sensible, i.e. duct tape - CraftingManager.addRecipeAuto(ModItems.ammo_nuke.stackFromEnum(AmmoFatman.MIRV_SPECIAL), new Object[] { "CBC", "MCM", "CBC", 'C', ModItems.canned_conserve.stackFromEnum(EnumFoodType.JIZZ), 'B', ModItems.ammo_nuke.stackFromEnum(AmmoFatman.BALEFIRE), 'M', ModItems.ammo_nuke.stackFromEnum(AmmoFatman.MIRV) }); - - //Flamer fuel - CraftingManager.addRecipeAuto(ModItems.ammo_fuel.stackFromEnum(AmmoFlamethrower.DIESEL), new Object[] { " P ", "BDB", " P ", 'P', STEEL.plate(), 'B', STEEL.bolt(), 'D', Fluids.DIESEL.getDict(1000) }); - CraftingManager.addRecipeAuto(ModItems.ammo_fuel.stackFromEnum(AmmoFlamethrower.NAPALM), new Object[] { " P ", "BDB", " P ", 'P', STEEL.plate(), 'B', STEEL.bolt(), 'D', ModItems.canister_napalm }); - CraftingManager.addRecipeAuto(ModItems.ammo_fuel.stackFromEnum(AmmoFlamethrower.PHOSPHORUS), new Object[] { "CPC", "CDC", "CPC", 'C', COAL.dust(), 'P', P_WHITE.ingot(), 'D', ModItems.ammo_fuel }); - CraftingManager.addRecipeAuto(ModItems.ammo_fuel.stackFromEnum(AmmoFlamethrower.CHLORINE), new Object[] { "PDP", "BDB", "PDP", 'P', STEEL.plate(), 'B', STEEL.bolt(), 'D', ModItems.pellet_gas }); - CraftingManager.addRecipeAuto(ModItems.ammo_fuel.stackFromEnum(AmmoFlamethrower.VAPORIZER), new Object[] { "PSP", "SNS", "PSP", 'P', P_WHITE.ingot(), 'S', ModItems.crystal_sulfur, 'N', ModItems.ammo_fuel.stackFromEnum(AmmoFlamethrower.NAPALM) }); //Fire Extingusisher Tanks CraftingManager.addRecipeAuto(new ItemStack(ModItems.ammo_fireext, 1), new Object[] { " P ", "BDB", " P ", 'P', STEEL.plate(), 'B', STEEL.bolt(), 'D', new ItemStack(ModItems.fluid_tank_full, 1, Fluids.WATER.getID()) }); diff --git a/src/main/java/com/hbm/inventory/recipes/ChemplantRecipes.java b/src/main/java/com/hbm/inventory/recipes/ChemplantRecipes.java index 06b7f69cd..3e8513f7c 100644 --- a/src/main/java/com/hbm/inventory/recipes/ChemplantRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/ChemplantRecipes.java @@ -224,13 +224,6 @@ public class ChemplantRecipes extends SerializableRecipe { recipes.add(new ChemRecipe(60, "XENON_OXY", 20) .inputFluids(new FluidStack(Fluids.OXYGEN, 250)) .outputFluids(new FluidStack(Fluids.XENON, 50))); - recipes.add(new ChemRecipe(61, "SATURN", 60) - .inputItems( - new OreDictStack(DURA.dust(), 2), - new OreDictStack(CU.dust(), 1), - new OreDictStack(COAL.dust(), 1)) - .inputFluids(new FluidStack(Fluids.SULFURIC_ACID, 100)) - .outputItems(new ItemStack(ModItems.ingot_saturnite, 4))); recipes.add(new ChemRecipe(62, "BALEFIRE", 100) .inputItems(new ComparableStack(ModItems.egg_balefire_shard)) .inputFluids(new FluidStack(Fluids.KEROSENE, 6000)) diff --git a/src/main/java/com/hbm/inventory/recipes/MagicRecipes.java b/src/main/java/com/hbm/inventory/recipes/MagicRecipes.java index f1333cd0c..dfb802485 100644 --- a/src/main/java/com/hbm/inventory/recipes/MagicRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/MagicRecipes.java @@ -9,9 +9,7 @@ import com.hbm.blocks.ModBlocks; import com.hbm.inventory.RecipesCommon.AStack; import com.hbm.inventory.RecipesCommon.OreDictStack; import com.hbm.inventory.RecipesCommon.ComparableStack; -import com.hbm.items.ItemAmmoEnums; import com.hbm.items.ModItems; -import com.hbm.items.machine.ItemCircuit.EnumCircuitType; import net.minecraft.init.Items; import net.minecraft.inventory.InventoryCrafting; @@ -46,28 +44,6 @@ public class MagicRecipes { recipes.add(new MagicRecipe(new ItemStack(ModItems.balefire_and_steel), new OreDictStack(STEEL.ingot()), new ComparableStack(ModItems.egg_balefire_shard))); recipes.add(new MagicRecipe(new ItemStack(ModItems.mysteryshovel), new ComparableStack(Items.iron_shovel), new ComparableStack(Items.bone), new ComparableStack(ModItems.ingot_starmetal), new ComparableStack(ModItems.ducttape))); recipes.add(new MagicRecipe(new ItemStack(ModItems.ingot_electronium), new ComparableStack(ModItems.pellet_charged), new ComparableStack(ModItems.pellet_charged), new ComparableStack(ModItems.ingot_dineutronium), new ComparableStack(ModItems.ingot_dineutronium))); - - recipes.add(new MagicRecipe(new ItemStack(ModItems.ammo_44, 1, ItemAmmoEnums.Ammo44Magnum.PIP.ordinal()), - new ComparableStack(ModItems.ammo_44), - new ComparableStack(ModItems.powder_magic), - new ComparableStack(ModItems.powder_magic), - new ComparableStack(ModItems.powder_magic))); - recipes.add(new MagicRecipe(new ItemStack(ModItems.ammo_44, 1, ItemAmmoEnums.Ammo44Magnum.BJ.ordinal()), - new ComparableStack(ModItems.ammo_44), - new ComparableStack(ModItems.powder_magic), - new ComparableStack(ModItems.powder_magic), - new ComparableStack(ModItems.powder_desh))); - recipes.add(new MagicRecipe(new ItemStack(ModItems.ammo_44, 1, ItemAmmoEnums.Ammo44Magnum.SILVER.ordinal()), - new ComparableStack(ModItems.ammo_44), - new ComparableStack(ModItems.powder_magic), - new ComparableStack(ModItems.powder_magic), - new ComparableStack(ModItems.ingot_starmetal))); - - recipes.add(new MagicRecipe(new ItemStack(ModItems.gun_bf), - new ComparableStack(ModItems.gun_fatman), - new ComparableStack(ModItems.egg_balefire_shard), - new ComparableStack(ModItems.powder_magic), - new ComparableStack(ModItems.powder_magic))); recipes.add(new MagicRecipe(new ItemStack(ModItems.diamond_gavel), new ComparableStack(ModBlocks.gravel_diamond), @@ -92,17 +68,6 @@ public class MagicRecipes { new OreDictStack(DNT.wireDense()), new OreDictStack(W.wireDense()), new OreDictStack(GOLD.wireDense()))); - - recipes.add(new MagicRecipe(new ItemStack(ModItems.gun_darter), - new OreDictStack(STEEL.plate()), - new OreDictStack(STEEL.plate()), - new OreDictStack(ANY_PLASTIC.ingot()), - new OreDictStack(GOLD.plate()))); - - recipes.add(new MagicRecipe(new ItemStack(ModItems.ammo_dart, 4, ItemAmmoEnums.AmmoDart.NUCLEAR.ordinal()), - new OreDictStack(ANY_RUBBER.ingot()), - new ComparableStack(ModItems.nugget_pu239), - new ComparableStack(ModItems.circuit, 1, EnumCircuitType.CHIP))); } public static List getRecipes() { diff --git a/src/main/java/com/hbm/inventory/recipes/RotaryFurnaceRecipes.java b/src/main/java/com/hbm/inventory/recipes/RotaryFurnaceRecipes.java index 233405e7c..4bc753665 100644 --- a/src/main/java/com/hbm/inventory/recipes/RotaryFurnaceRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/RotaryFurnaceRecipes.java @@ -43,10 +43,10 @@ public class RotaryFurnaceRecipes extends SerializableRecipe { recipes.add(new RotaryFurnaceRecipe(new MaterialStack(MAT_STEEL, INGOT.q(4)), 200, 100, new OreDictStack(IRON.fragment(), 9), new OreDictStack(ANY_COKE.gem()), new ComparableStack(ModItems.powder_flux))); recipes.add(new RotaryFurnaceRecipe(new MaterialStack(MAT_DESH, INGOT.q(1)), 100, 200, new FluidStack(Fluids.LIGHTOIL, 100), new ComparableStack(ModItems.powder_desh_ready))); - recipes.add(new RotaryFurnaceRecipe(new MaterialStack(MAT_SATURN, INGOT.q(2)), 200, 400, new FluidStack(Fluids.HEATINGOIL, 250), new OreDictStack(DURA.dust(), 2), new OreDictStack(CU.dust()))); recipes.add(new RotaryFurnaceRecipe(new MaterialStack(MAT_GUNMETAL, INGOT.q(4)), 200, 100, new OreDictStack(CU.ingot(), 3), new OreDictStack(AL.ingot(), 1))); recipes.add(new RotaryFurnaceRecipe(new MaterialStack(MAT_WEAPONSTEEL, INGOT.q(1)), 200, 400, new FluidStack(Fluids.GAS_COKER, 100), new OreDictStack(STEEL.ingot(), 1), new ComparableStack(ModItems.powder_flux, 2))); + recipes.add(new RotaryFurnaceRecipe(new MaterialStack(MAT_SATURN, INGOT.q(2)), 200, 400, new FluidStack(Fluids.REFORMGAS, 250), new OreDictStack(DURA.dust(), 4), new OreDictStack(CU.dust()))); } public static HashMap getRecipes() { diff --git a/src/main/java/com/hbm/itempool/ItemPoolsLegacy.java b/src/main/java/com/hbm/itempool/ItemPoolsLegacy.java index 184745765..78670f0ca 100644 --- a/src/main/java/com/hbm/itempool/ItemPoolsLegacy.java +++ b/src/main/java/com/hbm/itempool/ItemPoolsLegacy.java @@ -3,11 +3,10 @@ package com.hbm.itempool; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.material.Mats; import com.hbm.items.ModItems; -import com.hbm.items.ItemAmmoEnums.Ammo357Magnum; -import com.hbm.items.ItemAmmoEnums.AmmoFatman; import com.hbm.items.machine.ItemBreedingRod.BreedingRodType; import com.hbm.items.machine.ItemCircuit.EnumCircuitType; import com.hbm.items.machine.ItemZirnoxRod.EnumZirnoxType; +import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import static com.hbm.lib.HbmChestContents.*; @@ -43,8 +42,9 @@ public class ItemPoolsLegacy { weighted(ModItems.ingot_beryllium, 0, 1, 2, 4), weighted(ModItems.ingot_titanium, 0, 1, 1, 3), weighted(ModItems.circuit, EnumCircuitType.VACUUM_TUBE.ordinal(), 1, 1, 5), - weighted(ModItems.gun_revolver, 0, 1, 1, 3), - weighted(ModItems.ammo_357, Ammo357Magnum.LEAD.ordinal(), 2, 6, 4), + weighted(ModItems.gun_light_revolver, 0, 1, 1, 3), + weighted(ModItems.ammo_standard, EnumAmmo.M357_SP.ordinal(), 2, 6, 4), + weighted(ModItems.ammo_standard, EnumAmmo.G26_FLARE_SUPPLY.ordinal(), 1, 1, 1), weighted(ModItems.gun_kit_1, 0, 1, 3, 4), weighted(ModItems.gun_lever_action, 0, 1, 1, 1), weighted(ModItems.ammo_20gauge, 0, 2, 6, 3), @@ -106,11 +106,10 @@ public class ItemPoolsLegacy { weighted(ModItems.circuit, EnumCircuitType.CHIP.ordinal(), 1, 1, 2), weighted(ModItems.gun_kit_1, 0, 1, 3, 6), weighted(ModItems.gun_kit_2, 0, 1, 2, 3), - weighted(ModItems.gun_rpg, 0, 1, 1, 4), - weighted(ModItems.ammo_rocket, 0, 1, 4, 5), - weighted(ModItems.ammo_nuke, AmmoFatman.SAFE.ordinal(), 1, 2, 1), - weighted(ModItems.ammo_nuke, AmmoFatman.LOW.ordinal(), 1, 2, 1), - weighted(ModItems.ammo_nuke, AmmoFatman.PUMPKIN.ordinal(), 1, 2, 1), + weighted(ModItems.gun_panzerschreck, 0, 1, 1, 4), + weighted(ModItems.ammo_standard, EnumAmmo.ROCKET_HE.ordinal(), 1, 4, 5), + weighted(ModItems.ammo_standard, EnumAmmo.G26_FLARE_SUPPLY.ordinal(), 1, 1, 5), + weighted(ModItems.ammo_standard, EnumAmmo.G26_FLARE_WEAPON.ordinal(), 1, 1, 3), weighted(ModItems.grenade_nuclear, 0, 1, 1, 2), weighted(ModItems.grenade_smart, 0, 1, 3, 3), weighted(ModItems.grenade_mirv, 0, 1, 1, 2), @@ -192,15 +191,14 @@ public class ItemPoolsLegacy { weighted(ModItems.t45_boots, 0, 1, 1, 15), weighted(ModItems.t45_kit, 0, 1, 1, 3), weighted(ModItems.fusion_core, 0, 1, 1, 10), - weighted(ModItems.gun_revolver, 0, 1, 1, 4), - weighted(ModItems.ammo_357, Ammo357Magnum.LEAD.ordinal(), 1, 24, 4), + weighted(ModItems.gun_light_revolver, 0, 1, 1, 4), weighted(ModItems.gun_kit_1, 0, 2, 3, 4), - weighted(ModItems.gun_rpg, 0, 1, 1, 3), - weighted(ModItems.ammo_rocket, 0, 1, 6, 3), + weighted(ModItems.ammo_standard, EnumAmmo.M357_FMJ.ordinal(), 1, 24, 4), + weighted(ModItems.ammo_standard, EnumAmmo.G40_HE.ordinal(), 1, 6, 3), + weighted(ModItems.ammo_standard, EnumAmmo.G26_FLARE_WEAPON.ordinal(), 1, 1, 5), weighted(ModItems.rod, BreedingRodType.U235.ordinal(), 1, 1, 2), weighted(ModItems.billet_uranium_fuel, 0, 1, 1, 2), weighted(ModItems.ingot_uranium_fuel, 0, 1, 1, 2), - weighted(ModItems.ammo_nuke, AmmoFatman.SAFE.ordinal(), 1, 2, 1), weighted(ModItems.bottle_nuka, 0, 1, 3, 6), weighted(ModItems.bottle_quantum, 0, 1, 1, 3), weighted(ModItems.stealth_boy, 0, 1, 1, 7), diff --git a/src/main/java/com/hbm/itempool/ItemPoolsPile.java b/src/main/java/com/hbm/itempool/ItemPoolsPile.java index c296003dc..b75f609ee 100644 --- a/src/main/java/com/hbm/itempool/ItemPoolsPile.java +++ b/src/main/java/com/hbm/itempool/ItemPoolsPile.java @@ -3,9 +3,8 @@ package com.hbm.itempool; import static com.hbm.lib.HbmChestContents.weighted; import com.hbm.inventory.material.Mats; -import com.hbm.items.ItemAmmoEnums.Ammo357Magnum; -import com.hbm.items.ItemAmmoEnums.AmmoFatman; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import net.minecraft.init.Items; import net.minecraft.util.WeightedRandomChestContent; @@ -41,14 +40,12 @@ public class ItemPoolsPile { weighted(ModItems.steel_pickaxe, 0, 1, 1, 5), weighted(ModItems.steel_shovel, 0, 1, 1, 5), //Weapons - weighted(ModItems.gun_lever_action, 0, 1, 1, 5), - weighted(ModItems.gun_bio_revolver, 0, 1, 1, 1), + weighted(ModItems.gun_maresleg, 0, 1, 1, 5), + weighted(ModItems.gun_light_revolver, 0, 1, 1, 1), weighted(ModItems.grenade_if_generic, 0, 1, 2, 5), - weighted(ModItems.ammo_20gauge, 0, 8, 8, 10), - weighted(ModItems.ammo_12gauge, 0, 4, 4, 10), - weighted(ModItems.ammo_357, Ammo357Magnum.LEAD.ordinal(), 6, 12, 10), + weighted(ModItems.ammo_standard, EnumAmmo.G12.ordinal(), 4, 4, 10), + weighted(ModItems.ammo_standard, EnumAmmo.M357_SP.ordinal(), 6, 12, 10), weighted(ModItems.ammo_grenade, 0, 1, 1, 2), - weighted(ModItems.ammo_nuke, AmmoFatman.PUMPKIN.ordinal(), 1, 1, 1), //Consumables weighted(ModItems.bottle_nuka, 0, 1, 2, 20), weighted(ModItems.bottle_quantum, 0, 1, 2, 1), @@ -96,16 +93,17 @@ public class ItemPoolsPile { }}; //makeshift gun - new ItemPool(POOL_PILE_MAKESHIFT_GUN) {{ this.pool = new WeightedRandomChestContent[] { weighted(ModItems.gun_lever_action, 0, 1, 1, 10) }; }}; + new ItemPool(POOL_PILE_MAKESHIFT_GUN) {{ this.pool = new WeightedRandomChestContent[] { weighted(ModItems.gun_maresleg, 0, 1, 1, 10) }; }}; new ItemPool(POOL_PILE_MAKESHIFT_WRENCH) {{ this.pool = new WeightedRandomChestContent[] { weighted(ModItems.wrench, 0, 1, 1, 10) }; }}; new ItemPool(POOL_PILE_MAKESHIFT_PLATES) {{ this.pool = new WeightedRandomChestContent[] { weighted(ModItems.plate_steel, 0, 1, 1, 10) }; }}; new ItemPool(POOL_PILE_MAKESHIFT_WIRE) {{ this.pool = new WeightedRandomChestContent[] { weighted(ModItems.wire_fine, Mats.MAT_ALUMINIUM.id, 1, 1, 10) }; }}; new ItemPool(POOL_PILE_NUKE_STORAGE) {{ this.pool = new WeightedRandomChestContent[] { - weighted(ModItems.ammo_nuke, AmmoFatman.STOCK.ordinal(), 1, 1, 10), - weighted(ModItems.ammo_nuke, AmmoFatman.LOW.ordinal(), 1, 1, 50), - weighted(ModItems.ammo_nuke, AmmoFatman.SAFE.ordinal(), 1, 1, 50), + weighted(ModItems.ammo_standard, EnumAmmo.NUKE_STANDARD.ordinal(), 1, 1, 50), + weighted(ModItems.ammo_standard, EnumAmmo.NUKE_HIGH.ordinal(), 1, 1, 10), + weighted(ModItems.ammo_standard, EnumAmmo.NUKE_TOTS.ordinal(), 1, 1, 10), + }; }}; } diff --git a/src/main/java/com/hbm/itempool/ItemPoolsRedRoom.java b/src/main/java/com/hbm/itempool/ItemPoolsRedRoom.java index f2de185bb..7506e218c 100644 --- a/src/main/java/com/hbm/itempool/ItemPoolsRedRoom.java +++ b/src/main/java/com/hbm/itempool/ItemPoolsRedRoom.java @@ -8,8 +8,9 @@ import com.hbm.items.ModItems; import net.minecraft.util.WeightedRandomChestContent; public class ItemPoolsRedRoom { - + public static final String POOL_RED_PEDESTAL = "POOL_RED_PEDESTAL"; + public static final String POOL_RED_WEAPON = "POOL_RED_WEAPON"; public static void init() { @@ -39,5 +40,19 @@ public class ItemPoolsRedRoom { weighted(ModItems.gun_revolver_pip, 0, 1, 1, 5) }; }}; + + //pedestal weapons + new ItemPool(POOL_RED_WEAPON) {{ + this.pool = new WeightedRandomChestContent[] { + weighted(ModItems.gun_light_revolver_dani, 0, 1, 1, 10), + weighted(ModItems.gun_maresleg_broken, 0, 1, 1, 10), + weighted(ModItems.gun_heavy_revolver_lilmac, 0, 1, 1, 10), + weighted(ModItems.gun_flamer_daybreaker, 0, 1, 1, 5), + weighted(ModItems.gun_autoshotgun_sexy, 0, 1, 1, 5), + weighted(ModItems.gun_minigun_lacunae, 0, 1, 1, 5), + weighted(ModItems.gun_hangman, 0, 1, 1, 5), + weighted(ModItems.gun_folly, 0, 1, 1, 1), + }; + }}; } } diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 05a7a449a..46eb94a54 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -3986,7 +3986,7 @@ public class ModItems { ammo_dgk = new ItemCustomLore().setUnlocalizedName("ammo_dgk").setCreativeTab(MainRegistry.weaponTab); ammo_nuke = new ItemAmmo(AmmoFatman.class).setUnlocalizedName("ammo_nuke"); ammo_fuel = new ItemAmmo(AmmoFlamethrower.class).setUnlocalizedName("ammo_fuel"); - ammo_fireext = new ItemAmmo(AmmoFireExt.class).setUnlocalizedName("ammo_fireext"); + ammo_fireext = (ItemEnumMulti) new ItemAmmo(AmmoFireExt.class).setCreativeTab(MainRegistry.weaponTab).setUnlocalizedName("ammo_fireext"); ammo_cell = new ItemCustomLore().setCreativeTab(MainRegistry.weaponTab).setUnlocalizedName("ammo_cell").setMaxStackSize(16); ammo_coilgun = new ItemAmmo(AmmoCoilgun.class).setUnlocalizedName("ammo_coilgun"); ammo_dart = (ItemEnumMulti) new ItemAmmo(AmmoDart.class).setUnlocalizedName("ammo_dart").setMaxStackSize(16); @@ -3996,86 +3996,86 @@ public class ModItems { ammo_arty = new ItemAmmoArty().setUnlocalizedName("ammo_arty"); ammo_himars = new ItemAmmoHIMARS().setUnlocalizedName("ammo_himars"); - gun_rpg = new Item().setUnlocalizedName("gun_rpg").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_rpg"); - gun_karl = new Item().setUnlocalizedName("gun_karl").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_karl"); - gun_hk69 = new Item().setUnlocalizedName("gun_hk69").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_hk69"); - gun_skystinger = new Item().setUnlocalizedName("gun_skystinger").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_skystinger"); - gun_revolver = new Item().setUnlocalizedName("gun_revolver").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_revolver"); - gun_revolver_saturnite = new Item().setUnlocalizedName("gun_revolver_saturnite").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_revolver_saturnite"); - gun_revolver_gold = new Item().setUnlocalizedName("gun_revolver_gold").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_revolver_gold"); - gun_revolver_schrabidium = new Item().setUnlocalizedName("gun_revolver_schrabidium").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_revolver_schrabidium"); - gun_revolver_cursed = new Item().setUnlocalizedName("gun_revolver_cursed").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_revolver_cursed"); - gun_revolver_nightmare = new Item().setUnlocalizedName("gun_revolver_nightmare").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_revolver_nightmare"); - gun_revolver_nightmare2 = new Item().setUnlocalizedName("gun_revolver_nightmare2").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_revolver_nightmare2"); - gun_revolver_pip = new Item().setUnlocalizedName("gun_revolver_pip").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_revolver_pip"); - gun_revolver_nopip = new Item().setUnlocalizedName("gun_revolver_nopip").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_revolver_nopip"); - gun_revolver_blackjack = new Item().setUnlocalizedName("gun_revolver_blackjack").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_revolver_blackjack"); - gun_revolver_silver = new Item().setUnlocalizedName("gun_revolver_silver").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_revolver_silver"); - gun_revolver_red = new Item().setUnlocalizedName("gun_revolver_red").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_revolver_red"); - gun_deagle = new Item().setUnlocalizedName("gun_deagle").setFull3D().setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_deagle"); - gun_bio_revolver = new Item().setUnlocalizedName("gun_bio_revolver").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_bio_revolver"); - gun_flechette = new Item().setUnlocalizedName("gun_flechette").setFull3D().setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_flechette"); - gun_ar15 = new Item().setUnlocalizedName("gun_ar15").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_ar15"); - gun_calamity = new Item().setUnlocalizedName("gun_calamity").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_calamity"); - gun_lacunae = new Item().setUnlocalizedName("gun_lacunae").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_lacunae"); - gun_proto = new Item().setUnlocalizedName("gun_proto").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_fatman"); - gun_mirv = new Item().setUnlocalizedName("gun_mirv").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_mirv"); + gun_rpg = new Item().setUnlocalizedName("gun_rpg").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_rpg"); + gun_karl = new Item().setUnlocalizedName("gun_karl").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_karl"); + gun_hk69 = new Item().setUnlocalizedName("gun_hk69").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_hk69"); + gun_skystinger = new Item().setUnlocalizedName("gun_skystinger").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_skystinger"); + gun_revolver = new Item().setUnlocalizedName("gun_revolver").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_revolver"); + gun_revolver_saturnite = new Item().setUnlocalizedName("gun_revolver_saturnite").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_revolver_saturnite"); + gun_revolver_gold = new Item().setUnlocalizedName("gun_revolver_gold").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_revolver_gold"); + gun_revolver_schrabidium = new Item().setUnlocalizedName("gun_revolver_schrabidium").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_revolver_schrabidium"); + gun_revolver_cursed = new Item().setUnlocalizedName("gun_revolver_cursed").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_revolver_cursed"); + gun_revolver_nightmare = new Item().setUnlocalizedName("gun_revolver_nightmare").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_revolver_nightmare"); + gun_revolver_nightmare2 = new Item().setUnlocalizedName("gun_revolver_nightmare2").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_revolver_nightmare2"); + gun_revolver_pip = new Item().setUnlocalizedName("gun_revolver_pip").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_revolver_pip"); + gun_revolver_nopip = new Item().setUnlocalizedName("gun_revolver_nopip").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_revolver_nopip"); + gun_revolver_blackjack = new Item().setUnlocalizedName("gun_revolver_blackjack").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_revolver_blackjack"); + gun_revolver_silver = new Item().setUnlocalizedName("gun_revolver_silver").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_revolver_silver"); + gun_revolver_red = new Item().setUnlocalizedName("gun_revolver_red").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_revolver_red"); + gun_deagle = new Item().setUnlocalizedName("gun_deagle").setFull3D().setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_deagle"); + gun_bio_revolver = new Item().setUnlocalizedName("gun_bio_revolver").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_bio_revolver"); + gun_flechette = new Item().setUnlocalizedName("gun_flechette").setFull3D().setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_flechette"); + gun_ar15 = new Item().setUnlocalizedName("gun_ar15").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_ar15"); + gun_calamity = new Item().setUnlocalizedName("gun_calamity").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_calamity"); + gun_lacunae = new Item().setUnlocalizedName("gun_lacunae").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_lacunae"); + gun_proto = new Item().setUnlocalizedName("gun_proto").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_fatman"); + gun_mirv = new Item().setUnlocalizedName("gun_mirv").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_mirv"); gun_bf = new Item().setUnlocalizedName("gun_bf").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_bf"); - gun_mp40 = new Item().setUnlocalizedName("gun_mp40").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_mp40"); - gun_thompson = new Item().setUnlocalizedName("gun_thompson").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_thompson"); - gun_uzi_silencer = new Item().setUnlocalizedName("gun_uzi_silencer").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_uzi_silencer"); - gun_uzi_saturnite = new Item().setUnlocalizedName("gun_uzi_saturnite").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_uzi_saturnite"); - gun_uzi_saturnite_silencer = new Item().setUnlocalizedName("gun_uzi_saturnite_silencer").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_uzi_saturnite_silencer"); - gun_uboinik = new Item().setUnlocalizedName("gun_uboinik").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_uboinik"); - gun_remington = new Item().setUnlocalizedName("gun_remington").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_spas12"); - gun_benelli = new Item().setUnlocalizedName("gun_benelli").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_spas12"); - gun_supershotgun = new Item().setUnlocalizedName("gun_supershotgun").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_uboinik"); - gun_ks23 = new Item().setUnlocalizedName("gun_ks23").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_uboinik"); - gun_sauer = new Item().setUnlocalizedName("gun_sauer").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_uboinik"); - gun_lever_action = new Item().setUnlocalizedName("gun_lever_action").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_lever_action"); - gun_lever_action_dark = new Item().setUnlocalizedName("gun_lever_action_dark").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_lever_action_dark"); - gun_lever_action_sonata = new Item().setUnlocalizedName("gun_lever_action_sonata").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_lever_action_sonata"); - gun_bolt_action = new Item().setUnlocalizedName("gun_bolt_action").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_bolt_action"); - gun_bolt_action_green = new Item().setUnlocalizedName("gun_bolt_action_green").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_bolt_action_green"); - gun_bolt_action_saturnite = new Item().setUnlocalizedName("gun_bolt_action_saturnite").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_bolt_action_saturnite"); - gun_mymy = new Item().setUnlocalizedName("gun_mymy").setFull3D().setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_mymy"); + gun_mp40 = new Item().setUnlocalizedName("gun_mp40").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_mp40"); + gun_thompson = new Item().setUnlocalizedName("gun_thompson").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_thompson"); + gun_uzi_silencer = new Item().setUnlocalizedName("gun_uzi_silencer").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_uzi_silencer"); + gun_uzi_saturnite = new Item().setUnlocalizedName("gun_uzi_saturnite").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_uzi_saturnite"); + gun_uzi_saturnite_silencer = new Item().setUnlocalizedName("gun_uzi_saturnite_silencer").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_uzi_saturnite_silencer"); + gun_uboinik = new Item().setUnlocalizedName("gun_uboinik").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_uboinik"); + gun_remington = new Item().setUnlocalizedName("gun_remington").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_spas12"); + gun_benelli = new Item().setUnlocalizedName("gun_benelli").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_spas12"); + gun_supershotgun = new Item().setUnlocalizedName("gun_supershotgun").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_uboinik"); + gun_ks23 = new Item().setUnlocalizedName("gun_ks23").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_uboinik"); + gun_sauer = new Item().setUnlocalizedName("gun_sauer").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_uboinik"); + gun_lever_action = new Item().setUnlocalizedName("gun_lever_action").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_lever_action"); + gun_lever_action_dark = new Item().setUnlocalizedName("gun_lever_action_dark").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_lever_action_dark"); + gun_lever_action_sonata = new Item().setUnlocalizedName("gun_lever_action_sonata").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_lever_action_sonata"); + gun_bolt_action = new Item().setUnlocalizedName("gun_bolt_action").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_bolt_action"); + gun_bolt_action_green = new Item().setUnlocalizedName("gun_bolt_action_green").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_bolt_action_green"); + gun_bolt_action_saturnite = new Item().setUnlocalizedName("gun_bolt_action_saturnite").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_bolt_action_saturnite"); + gun_mymy = new Item().setUnlocalizedName("gun_mymy").setFull3D().setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_mymy"); gun_b92_ammo = new GunB92Cell().setUnlocalizedName("gun_b92_ammo").setMaxStackSize(1).setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_b92_ammo_alt"); gun_b92 = new GunB92().setUnlocalizedName("gun_b92").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_b92"); - gun_b93 = new Item().setUnlocalizedName("gun_b93").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_b93"); - gun_xvl1456_ammo = new Item().setUnlocalizedName("gun_xvl1456_ammo").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_xvl1456_ammo"); - gun_xvl1456 = new Item().setUnlocalizedName("gun_xvl1456").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_xvl1456"); - gun_osipr_ammo = new Item().setUnlocalizedName("gun_osipr_ammo").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_osipr_ammo"); - gun_osipr_ammo2 = new Item().setUnlocalizedName("gun_osipr_ammo2").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_osipr_ammo2"); - gun_osipr = new Item().setUnlocalizedName("gun_osipr").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_osipr"); - gun_immolator_ammo = new Item().setUnlocalizedName("gun_immolator_ammo").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_immolator_ammo"); - gun_immolator = new Item().setUnlocalizedName("gun_immolator").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_immolator"); + gun_b93 = new Item().setUnlocalizedName("gun_b93").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_b93"); + gun_xvl1456_ammo = new Item().setUnlocalizedName("gun_xvl1456_ammo").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_xvl1456_ammo"); + gun_xvl1456 = new Item().setUnlocalizedName("gun_xvl1456").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_xvl1456"); + gun_osipr_ammo = new Item().setUnlocalizedName("gun_osipr_ammo").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_osipr_ammo"); + gun_osipr_ammo2 = new Item().setUnlocalizedName("gun_osipr_ammo2").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_osipr_ammo2"); + gun_osipr = new Item().setUnlocalizedName("gun_osipr").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_osipr"); + gun_immolator_ammo = new Item().setUnlocalizedName("gun_immolator_ammo").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_immolator_ammo"); + gun_immolator = new Item().setUnlocalizedName("gun_immolator").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_immolator"); gun_cryolator_ammo = new Item().setUnlocalizedName("gun_cryolator_ammo").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_cryolator_ammo"); - gun_cryolator = new Item().setUnlocalizedName("gun_cryolator").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_cryolator"); + gun_cryolator = new Item().setUnlocalizedName("gun_cryolator").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_cryolator"); gun_cryocannon = new ItemCryoCannon(GunEnergyFactory.getCryoCannonConfig()).setUnlocalizedName("gun_cryocannon").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_cryocannon"); gun_fireext = new ItemGunBase(GunEnergyFactory.getExtConfig()).setUnlocalizedName("gun_fireext").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_fireext"); - gun_mp = new Item().setUnlocalizedName("gun_mp").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_pm"); - gun_bolter_digamma = new Item().setUnlocalizedName("gun_bolter_digamma").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_bolter_digamma"); - gun_zomg = new Item().setUnlocalizedName("gun_zomg").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_zomg"); - gun_revolver_inverted = new Item().setUnlocalizedName("gun_revolver_inverted").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_revolver_inverted"); - gun_emp_ammo = new Item().setUnlocalizedName("gun_emp_ammo").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_emp_ammo"); - gun_emp = new Item().setUnlocalizedName("gun_emp").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_emp"); - gun_jack_ammo = new Item().setUnlocalizedName("gun_jack_ammo").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_jack_ammo"); - gun_jack = new Item().setUnlocalizedName("gun_jack").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_jack"); - gun_spark_ammo = new Item().setUnlocalizedName("gun_spark_ammo").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_spark_ammo"); - gun_spark = new Item().setUnlocalizedName("gun_spark").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_spark"); - gun_hp_ammo = new Item().setUnlocalizedName("gun_hp_ammo").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_hp_ammo"); - gun_hp = new Item().setUnlocalizedName("gun_hp").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_hp"); - gun_euthanasia_ammo = new Item().setUnlocalizedName("gun_euthanasia_ammo").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_euthanasia_ammo"); - gun_euthanasia = new Item().setUnlocalizedName("gun_euthanasia").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_euthanasia"); - gun_defabricator_ammo = new Item().setUnlocalizedName("gun_defabricator_ammo").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_defabricator_ammo"); - gun_defabricator = new Item().setUnlocalizedName("gun_defabricator").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_defabricator"); - gun_vortex = new Item().setUnlocalizedName("gun_vortex").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_vortex"); + gun_mp = new Item().setUnlocalizedName("gun_mp").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_pm"); + gun_bolter_digamma = new Item().setUnlocalizedName("gun_bolter_digamma").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_bolter_digamma"); + gun_zomg = new Item().setUnlocalizedName("gun_zomg").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_zomg"); + gun_revolver_inverted = new Item().setUnlocalizedName("gun_revolver_inverted").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_revolver_inverted"); + gun_emp_ammo = new Item().setUnlocalizedName("gun_emp_ammo").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_emp_ammo"); + gun_emp = new Item().setUnlocalizedName("gun_emp").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_emp"); + gun_jack_ammo = new Item().setUnlocalizedName("gun_jack_ammo").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_jack_ammo"); + gun_jack = new Item().setUnlocalizedName("gun_jack").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_jack"); + gun_spark_ammo = new Item().setUnlocalizedName("gun_spark_ammo").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_spark_ammo"); + gun_spark = new Item().setUnlocalizedName("gun_spark").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_spark"); + gun_hp_ammo = new Item().setUnlocalizedName("gun_hp_ammo").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_hp_ammo"); + gun_hp = new Item().setUnlocalizedName("gun_hp").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_hp"); + gun_euthanasia_ammo = new Item().setUnlocalizedName("gun_euthanasia_ammo").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_euthanasia_ammo"); + gun_euthanasia = new Item().setUnlocalizedName("gun_euthanasia").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_euthanasia"); + gun_defabricator_ammo = new Item().setUnlocalizedName("gun_defabricator_ammo").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_defabricator_ammo"); + gun_defabricator = new Item().setUnlocalizedName("gun_defabricator").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_defabricator"); + gun_vortex = new Item().setUnlocalizedName("gun_vortex").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_vortex"); gun_super_shotgun = new Item().setUnlocalizedName("gun_super_shotgun").setMaxStackSize(1).setFull3D().setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_super_shotgun"); - gun_moist_nugget = new Item().setUnlocalizedName("gun_moist_nugget").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_moist_nugget"); - gun_darter = new Item().setFull3D().setUnlocalizedName("gun_darter").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_darter"); - gun_glass_cannon = new Item().setFull3D().setUnlocalizedName("gun_glass_cannon").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_darter"); - gun_lunatic_marksman = new Item().setFull3D().setUnlocalizedName("gun_lunatic_marksman").setCreativeTab(MainRegistry.weaponTab); - gun_uac_pistol = new Item().setFull3D().setUnlocalizedName("gun_uac_pistol").setCreativeTab(MainRegistry.weaponTab); + gun_moist_nugget = new Item().setUnlocalizedName("gun_moist_nugget").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_moist_nugget"); + gun_darter = new Item().setFull3D().setUnlocalizedName("gun_darter").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_darter"); + gun_glass_cannon = new Item().setFull3D().setUnlocalizedName("gun_glass_cannon").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_darter"); + gun_lunatic_marksman = new Item().setFull3D().setUnlocalizedName("gun_lunatic_marksman").setCreativeTab(null); + gun_uac_pistol = new Item().setFull3D().setUnlocalizedName("gun_uac_pistol").setCreativeTab(null); ToolMaterial matCrucible = EnumHelper.addToolMaterial("CRUCIBLE", 10, 3, 50.0F, 100.0F, 0); crucible = new ItemCrucible(5000, 1F, matCrucible).setUnlocalizedName("crucible").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":crucible"); diff --git a/src/main/java/com/hbm/items/weapon/ItemAmmo.java b/src/main/java/com/hbm/items/weapon/ItemAmmo.java index eebc241a8..4c4000f78 100644 --- a/src/main/java/com/hbm/items/weapon/ItemAmmo.java +++ b/src/main/java/com/hbm/items/weapon/ItemAmmo.java @@ -11,7 +11,6 @@ import com.hbm.items.ItemAmmoEnums.IAmmoItemEnum; import com.hbm.items.ItemEnumMulti; import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; -import com.hbm.main.MainRegistry; import com.hbm.util.EnumUtil; import com.hbm.util.I18nUtil; @@ -122,7 +121,7 @@ public class ItemAmmo extends ItemEnumMulti { public ItemAmmo(Class> clazz, String altName) { super(clazz, true, true); - setCreativeTab(MainRegistry.weaponTab); + this.setCreativeTab(null); this.altName = altName; } diff --git a/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java b/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java index 0e8ac381e..ce88b06df 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java +++ b/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java @@ -1,5 +1,6 @@ package com.hbm.items.weapon.sedna; +import java.util.ArrayList; import java.util.List; import java.util.concurrent.ConcurrentHashMap; import java.util.function.BiConsumer; @@ -44,11 +45,26 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei public long[] lastShot; /** [0;1] randomized every shot for various rendering applications */ public double shotRand = 0D; + + public static List secrets = new ArrayList(); public static float recoilVertical = 0; public static float recoilHorizontal = 0; + public static float recoilDecay = 0.75F; + public static float recoilRebound = 0.25F; public static float offsetVertical = 0; public static float offsetHorizontal = 0; + + public static void setupRecoil(float vertical, float horizontal, float decay, float rebound) { + recoilVertical += vertical; + recoilHorizontal += horizontal; + recoilDecay = decay; + recoilRebound = rebound; + } + + public static void setupRecoil(float vertical, float horizontal) { + setupRecoil(vertical, horizontal, 0.75F, 0.25F); + } public static final String O_GUNCONFIG = "O_GUNCONFIG_"; @@ -92,7 +108,8 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei this.configs_DNA = cfg; this.quality = quality; this.lastShot = new long[cfg.length]; - this.setCreativeTab(MainRegistry.weaponTab); + if(quality == WeaponQuality.A_SIDE || quality == WeaponQuality.SPECIAL) this.setCreativeTab(MainRegistry.weaponTab); + if(quality == WeaponQuality.LEGENDARY || quality == WeaponQuality.SECRET) this.secrets.add(this); this.setTextureName(RefStrings.MODID + ":gun_darter"); } diff --git a/src/main/java/com/hbm/items/weapon/sedna/Receiver.java b/src/main/java/com/hbm/items/weapon/sedna/Receiver.java index ee46d89ea..fd855a430 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/Receiver.java +++ b/src/main/java/com/hbm/items/weapon/sedna/Receiver.java @@ -39,6 +39,7 @@ public class Receiver { public static final String F_FIREPITCH = "F_FIREPITCH"; public static final String O_MAGAZINE = "O_MAGAZINE"; public static final String O_PROJECTILEOFFSET = "O_PROJECTILEOFFSET"; + public static final String O_PROJECTILEOFFSETSCOPED = "O_PROJECTILEOFFSETSCOPED"; public static final String FUN_CANFIRE = "FUN_CANFIRE"; public static final String CON_ONFIRE = "CON_ONFIRE"; public static final String CON_ONRECOIL = "CON_ONRECOIL"; @@ -69,6 +70,7 @@ public class Receiver { protected float firePitch_DNA = 1.0F; protected IMagazine magazine_DNA; protected Vec3 projectileOffset_DNA = Vec3.createVectorHelper(0, 0, 0); + protected Vec3 projectileOffsetScoped_DNA = Vec3.createVectorHelper(0, 0, 0); protected BiFunction canFire_DNA; protected BiConsumer onFire_DNA; protected BiConsumer onRecoil_DNA; @@ -95,25 +97,27 @@ public class Receiver { public float getFirePitch(ItemStack stack) { return WeaponUpgradeManager.eval(this.firePitch_DNA, stack, F_FIREPITCH, this); } public IMagazine getMagazine(ItemStack stack) { return WeaponUpgradeManager.eval(this.magazine_DNA, stack, O_MAGAZINE, this); } public Vec3 getProjectileOffset(ItemStack stack) { return WeaponUpgradeManager.eval(this.projectileOffset_DNA, stack, O_PROJECTILEOFFSET, this); } + public Vec3 getProjectileOffsetScoped(ItemStack stack) { return WeaponUpgradeManager.eval(this.projectileOffsetScoped_DNA, stack, O_PROJECTILEOFFSETSCOPED, this); } public BiFunction getCanFire(ItemStack stack) { return WeaponUpgradeManager.eval(this.canFire_DNA, stack, FUN_CANFIRE, this); } public BiConsumer getOnFire(ItemStack stack) { return WeaponUpgradeManager.eval(this.onFire_DNA, stack, CON_ONFIRE, this); } public BiConsumer getRecoil(ItemStack stack) { return WeaponUpgradeManager.eval(this.onRecoil_DNA, stack, CON_ONRECOIL, this); } /* SETTERS */ - public Receiver dmg(float dmg) { this.baseDamage_DNA = dmg; return this; } - public Receiver delay(int delay) { this.delayAfterFire_DNA = this.delayAfterDryFire_DNA = delay; return this; } - public Receiver dry(int delay) { this.delayAfterDryFire_DNA = delay; return this; } - public Receiver rounds(int rounds) { this.roundsPerCycle_DNA = rounds; return this; } - public Receiver spread(float spread) { this.spreadModExtra_DNA = spread; return this; } - public Receiver auto(boolean auto) { this.refireOnHold_DNA = auto; return this; } - public Receiver autoAfterDry(boolean auto) { this.refireAfterDry_DNA = auto; return this; } - public Receiver dryfire(boolean dryfire) { this.doesDryFire_DNA = dryfire; return this; } - public Receiver dryfireAfterAuto(boolean dryfire) { this.doesDryFireAfterAuto_DNA = dryfire; return this; } - public Receiver ejectOnFire(boolean eject) { this.ejectOnFire_DNA = eject; return this; } - public Receiver mag(IMagazine magazine) { this.magazine_DNA = magazine; return this; } - public Receiver offset(double f, double u, double s) { this.projectileOffset_DNA = Vec3.createVectorHelper(f, u, s); return this; } - public Receiver jam(int jam) { this.jamDuration_DNA = jam; return this; } + public Receiver dmg(float dmg) { this.baseDamage_DNA = dmg; return this; } + public Receiver delay(int delay) { this.delayAfterFire_DNA = this.delayAfterDryFire_DNA = delay; return this; } + public Receiver dry(int delay) { this.delayAfterDryFire_DNA = delay; return this; } + public Receiver rounds(int rounds) { this.roundsPerCycle_DNA = rounds; return this; } + public Receiver spread(float spread) { this.spreadModExtra_DNA = spread; return this; } + public Receiver auto(boolean auto) { this.refireOnHold_DNA = auto; return this; } + public Receiver autoAfterDry(boolean auto) { this.refireAfterDry_DNA = auto; return this; } + public Receiver dryfire(boolean dryfire) { this.doesDryFire_DNA = dryfire; return this; } + public Receiver dryfireAfterAuto(boolean dryfire) { this.doesDryFireAfterAuto_DNA = dryfire; return this; } + public Receiver ejectOnFire(boolean eject) { this.ejectOnFire_DNA = eject; return this; } + public Receiver mag(IMagazine magazine) { this.magazine_DNA = magazine; return this; } + public Receiver offset(double f, double u, double s) { this.projectileOffset_DNA = Vec3.createVectorHelper(f, u, s); this.projectileOffsetScoped_DNA = Vec3.createVectorHelper(f, u, 0); return this; } + public Receiver offsetScoped(double f, double u, double s) { this.projectileOffsetScoped_DNA = Vec3.createVectorHelper(f, u, s); return this; } + public Receiver jam(int jam) { this.jamDuration_DNA = jam; return this; } public Receiver reload(int delay) { return reload(0, delay, delay, 0, 0); } public Receiver reload(int begin, int cycle, int end, int cock) { return reload(0, begin, cycle, end, cock); } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java index 3b5c9b6b2..757a1e938 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java @@ -28,7 +28,7 @@ public class GunFactory { /// AMMO ITEMS /// ModItems.ammo_debug = new Item().setUnlocalizedName("ammo_debug").setTextureName(RefStrings.MODID + ":ammo_45"); ModItems.ammo_standard = new ItemEnumMulti(EnumAmmo.class, true, true).setUnlocalizedName("ammo_standard").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":ammo_standard"); - ModItems.ammo_secret = new ItemEnumMulti(EnumAmmoSecret.class, true, true).setUnlocalizedName("ammo_secret").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":ammo_secret"); + ModItems.ammo_secret = new ItemEnumMulti(EnumAmmoSecret.class, true, true).setUnlocalizedName("ammo_secret").setCreativeTab(null).setTextureName(RefStrings.MODID + ":ammo_secret"); /// BULLLET CFGS /// ammo_debug = new BulletConfig().setItem(ModItems.ammo_debug).setSpread(0.01F).setRicochetAngle(45).setCasing(CASING44.clone().register("DEBUG0")); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/Lego.java b/src/main/java/com/hbm/items/weapon/sedna/factory/Lego.java index 4760ceebc..d8226936d 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/Lego.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/Lego.java @@ -130,12 +130,6 @@ public class Lego { } }; - /** Toggles isAiming. Used by keybinds. */ - public static BiConsumer LAMBDA_STANDARD_RECOIL = (stack, ctx) -> { - //ItemGunBaseNT.recoilVertical += 10; - //ItemGunBaseNT.recoilHorizontal += ctx.player.getRNG().nextGaussian() * 1.5; - }; - /** Default smoke. */ public static BiConsumer LAMBDA_STANDARD_SMOKE = (stack, ctx) -> { handleStandardSmoke(ctx.entity, stack, 2000, 0.025D, 1.15D, ctx.configIndex); @@ -211,11 +205,11 @@ public class Lego { Receiver primary = ctx.config.getReceivers(stack)[0]; IMagazine mag = primary.getMagazine(stack); BulletConfig config = (BulletConfig) mag.getType(stack, ctx.inventory); - - Vec3 offset = primary.getProjectileOffset(stack); + + Vec3 offset = ItemGunBaseNT.getIsAiming(stack) ? primary.getProjectileOffsetScoped(stack) : primary.getProjectileOffset(stack); double forwardOffset = offset.xCoord; double heightOffset = offset.yCoord; - double sideOffset = ItemGunBaseNT.getIsAiming(stack) ? 0 : offset.zCoord; //TODO: make this configurable + double sideOffset = offset.zCoord; /*forwardOffset = 0.75; heightOffset = -0.125; diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java index 911400fe2..47932b03c 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java @@ -59,7 +59,7 @@ public class XFactory12ga { g12_slug = new BulletConfig().setItem(EnumAmmo.G12_SLUG).setSpread(0.0F).setRicochetAngle(25).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0x393939, SpentCasing.COLOR_CASE_BRASS).setScale(0.75F).register("12GA_SLUG")); g12_flechette = new BulletConfig().setItem(EnumAmmo.G12_FLECHETTE).setProjectiles(8).setDamage(1F/8F).setThresholdNegation(5F).setArmorPiercing(0.2F).setSpread(0.025F).setRicochetAngle(5).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0x3C80F0, SpentCasing.COLOR_CASE_BRASS).setScale(0.75F).register("12GA_FLECHETTE")); g12_magnum = new BulletConfig().setItem(EnumAmmo.G12_MAGNUM).setProjectiles(4).setDamage(2F/4F).setSpread(0.015F).setRicochetAngle(15).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0x278400, SpentCasing.COLOR_CASE_12GA).setScale(0.75F).register("12GA_MAGNUM")); - g12_explosive = new BulletConfig().setItem(EnumAmmo.G12_EXPLOSIVE).setDamage(5F).setOnImpact(LAMBDA_STANDARD_EXPLODE).setSpread(0F).setRicochetAngle(15).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0xDA4127, SpentCasing.COLOR_CASE_12GA).setScale(0.75F).register("12GA_EXPLOSIVE")); + g12_explosive = new BulletConfig().setItem(EnumAmmo.G12_EXPLOSIVE).setDamage(2.5F).setOnImpact(LAMBDA_STANDARD_EXPLODE).setSpread(0F).setRicochetAngle(15).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0xDA4127, SpentCasing.COLOR_CASE_12GA).setScale(0.75F).register("12GA_EXPLOSIVE")); g12_phosphorus = new BulletConfig().setItem(EnumAmmo.G12_PHOSPHORUS).setProjectiles(8).setDamage(1F/8F).setSpread(0.015F).setRicochetAngle(15).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0x910001, SpentCasing.COLOR_CASE_12GA).setScale(0.75F).register("12GA_PHOSPHORUS")) .setOnImpact((bullet, mop) -> { if(mop.entityHit != null && mop.entityHit instanceof EntityLivingBase) { HbmLivingProps data = HbmLivingProps.getData((EntityLivingBase) mop.entityHit); if(data.phosphorus < 300) data.phosphorus = 300; } }); //g12_anthrax = new BulletConfig().setItem(EnumAmmo.G12_ANTHRAX).setProjectiles(8).setDamage(1F/8F).setSpread(0.015F).setRicochetAngle(15).setCasing(new SpentCasing(CasingType.SHOTGUN).setColor(0x749300, SpentCasing.COLOR_CASE_12GA).setScale(0.75F).register("12GA_ANTHRAX")); @@ -73,7 +73,7 @@ public class XFactory12ga { .dmg(16F).delay(20).reload(22, 10, 13, 0).jam(24).sound("hbm:weapon.fire.shotgun", 1.0F, 1.0F) .mag(new MagazineSingleReload(0, 6).addConfigs(all)) .offset(0.75, -0.0625, -0.1875) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_MARESLEG)) .setupStandardConfiguration() .anim(LAMBDA_MARESLEG_ANIMS).orchestra(Orchestras.ORCHESTRA_MARESLEG) ).setUnlocalizedName("gun_maresleg"); @@ -83,7 +83,7 @@ public class XFactory12ga { .dmg(16F).delay(20).reload(22, 10, 13, 0).jam(24).sound("hbm:weapon.fire.shotgun", 1.0F, 1.0F) .mag(new MagazineSingleReload(0, 6).addConfigs(all)) .offset(0.75, -0.0625, 0.1875D) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_MARESLEG)) .pp(Lego.LAMBDA_STANDARD_CLICK_PRIMARY).pr(Lego.LAMBDA_STANDARD_RELOAD) .decider(GunStateDecider.LAMBDA_STANDARD_DECIDER) .anim(LAMBDA_MARESLEG_SHORT_ANIMS).orchestra(Orchestras.ORCHESTRA_MARESLEG_AKIMBO), @@ -92,7 +92,7 @@ public class XFactory12ga { .dmg(12F).delay(20).reload(22, 10, 13, 0).jam(24).sound("hbm:weapon.fire.shotgun", 1.0F, 1.0F) .mag(new MagazineSingleReload(1, 6).addConfigs(all)) .offset(0.75, -0.0625, -0.1875) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_MARESLEG)) .ps(Lego.LAMBDA_STANDARD_CLICK_PRIMARY).pr(Lego.LAMBDA_STANDARD_RELOAD) .decider(GunStateDecider.LAMBDA_STANDARD_DECIDER) .anim(LAMBDA_MARESLEG_SHORT_ANIMS).orchestra(Orchestras.ORCHESTRA_MARESLEG_AKIMBO) @@ -103,7 +103,7 @@ public class XFactory12ga { .dmg(32F).delay(20).reload(22, 10, 13, 0).jam(24).sound("hbm:weapon.fire.shotgun", 1.0F, 1.0F) .mag(new MagazineSingleReload(0, 6).addConfigs(all)) .offset(0.75, -0.0625, -0.1875) - .canFire(Lego.LAMBDA_STANDARD_CAN_FIRE).fire(Lego.LAMBDA_NOWEAR_FIRE).recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .canFire(Lego.LAMBDA_STANDARD_CAN_FIRE).fire(Lego.LAMBDA_NOWEAR_FIRE).recoil(LAMBDA_RECOIL_MARESLEG)) .setupStandardConfiguration() .anim(LAMBDA_MARESLEG_SHORT_ANIMS).orchestra(Orchestras.ORCHESTRA_MARESLEG_SHORT) ).setUnlocalizedName("gun_maresleg_broken"); @@ -114,7 +114,7 @@ public class XFactory12ga { .dmg(8F).delay(20).rounds(4).reload(25, 15, 7, 0).jam(45).sound("hbm:weapon.fire.shotgunAlt", 1.0F, 1.0F) .mag(new MagazineSingleReload(0, 4).addConfigs(all)) .offset(0.75, -0.0625, -0.1875) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_LIBERATOR)) .setupStandardConfiguration() .anim(LAMBDA_LIBERATOR_ANIMS).orchestra(Orchestras.ORCHESTRA_LIBERATOR) ).setUnlocalizedName("gun_liberator"); @@ -125,7 +125,7 @@ public class XFactory12ga { .dmg(32F).delay(20).reload(5, 10, 10, 10, 0).jam(36).sound("hbm:weapon.shotgunShoot", 1.0F, 1.0F) .mag(new MagazineSingleReload(0, 8).addConfigs(all)) .offset(0.75, -0.0625, -0.1875) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_MARESLEG)) .setupStandardConfiguration().ps(LAMBDA_SPAS_SECONDARY).pt(null) .anim(LAMBDA_SPAS_ANIMS).orchestra(Orchestras.ORCHESTRA_SPAS) ).setUnlocalizedName("gun_spas12"); @@ -136,7 +136,7 @@ public class XFactory12ga { .dmg(48F).delay(10).auto(true).autoAfterDry(true).dryfireAfterAuto(true).reload(44).jam(19).sound("hbm:weapon.fire.shotgunAuto", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 20).addConfigs(all)) .offset(0.75, -0.125, -0.25) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_AUTOSHOTGUN)) .setupStandardConfiguration() .anim(LAMBDA_SHREDDER_ANIMS).orchestra(Orchestras.ORCHESTRA_SHREDDER) ).setUnlocalizedName("gun_autoshotgun"); @@ -146,12 +146,28 @@ public class XFactory12ga { .dmg(64F).delay(1).auto(true).dryfireAfterAuto(true).reload(44).jam(19).sound("hbm:weapon.fire.shotgunAuto", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 100).addConfigs(g12_equestrian, g12_bp, g12_bp_magnum, g12_bp_slug, g12, g12_slug, g12_flechette, g12_magnum, g12_explosive, g12_phosphorus)) .offset(0.75, -0.125, -0.25) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_SEXY)) .setupStandardConfiguration() .anim(LAMBDA_SEXY_ANIMS).orchestra(Orchestras.ORCHESTRA_SHREDDER_SEXY) ).setUnlocalizedName("gun_autoshotgun_sexy"); } + public static BiConsumer LAMBDA_RECOIL_MARESLEG = (stack, ctx) -> { + ItemGunBaseNT.setupRecoil(10, (float) (ctx.getPlayer().getRNG().nextGaussian() * 1.5)); + }; + + public static BiConsumer LAMBDA_RECOIL_LIBERATOR = (stack, ctx) -> { + ItemGunBaseNT.setupRecoil(5, (float) (ctx.getPlayer().getRNG().nextGaussian() * 1.5)); + }; + + public static BiConsumer LAMBDA_RECOIL_AUTOSHOTGUN = (stack, ctx) -> { + ItemGunBaseNT.setupRecoil((float) (ctx.getPlayer().getRNG().nextGaussian() * 1.5) + 1.5F, (float) (ctx.getPlayer().getRNG().nextGaussian() * 0.5)); + }; + + public static BiConsumer LAMBDA_RECOIL_SEXY = (stack, ctx) -> { + ItemGunBaseNT.setupRecoil((float) (ctx.getPlayer().getRNG().nextGaussian() * 0.5), (float) (ctx.getPlayer().getRNG().nextGaussian() * 0.5)); + }; + public static BiConsumer LAMBDA_SPAS_SECONDARY = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; EntityPlayer player = ctx.getPlayer(); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory22lr.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory22lr.java index d9e24ab74..9c1a3106b 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory22lr.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory22lr.java @@ -48,7 +48,7 @@ public class XFactory22lr { .dmg(2F).delay(1).dry(10).auto(true).spread(0.02F).reload(66).jam(30).sound("hbm:weapon.fire.silenced", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 177).addConfigs(p22_sp, p22_fmj, p22_jhp, p22_ap)) .offset(1, -0.0625 * 1.5, -0.1875D) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_AM180)) .setupStandardConfiguration() .anim(LAMBDA_AM180_ANIMS).orchestra(Orchestras.ORCHESTRA_AM180) ).setUnlocalizedName("gun_am180"); @@ -57,6 +57,10 @@ public class XFactory22lr { public static BiConsumer LAMBDA_SMOKE = (stack, ctx) -> { Lego.handleStandardSmoke(ctx.entity, stack, 3000, 0.05D, 1.1D, 0); }; + + public static BiConsumer LAMBDA_RECOIL_AM180 = (stack, ctx) -> { + ItemGunBaseNT.setupRecoil((float) (ctx.getPlayer().getRNG().nextGaussian() * 0.25), (float) (ctx.getPlayer().getRNG().nextGaussian() * 0.25)); + }; @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_AM180_ANIMS = (stack, type) -> { if(ClientConfig.GUN_ANIMS_LEGACY.get()) { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory357.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory357.java index eab5ab175..6d10b86be 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory357.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory357.java @@ -1,5 +1,6 @@ package com.hbm.items.weapon.sedna.factory; +import java.util.function.BiConsumer; import java.util.function.BiFunction; import com.hbm.items.ModItems; @@ -8,6 +9,7 @@ import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.weapon.sedna.GunConfig; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.Receiver; +import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.mags.MagazineFullReload; @@ -41,7 +43,7 @@ public class XFactory357 { .dmg(7.5F).delay(16).reload(55).jam(45).sound("hbm:weapon.fire.pistol", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 6).addConfigs(m357_bp, m357_sp, m357_fmj, m357_jhp, m357_ap, m357_express)) .offset(0.75, -0.0625, -0.3125D) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_ATLAS)) .setupStandardConfiguration() .anim(LAMBDA_ATLAS_ANIMS).orchestra(Orchestras.ORCHESTRA_ATLAS) ).setUnlocalizedName("gun_light_revolver"); @@ -51,7 +53,7 @@ public class XFactory357 { .dmg(12.5F).delay(16).reload(55).jam(45).sound("hbm:weapon.fire.pistol", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 6).addConfigs(m357_bp, m357_sp, m357_fmj, m357_jhp, m357_ap, m357_express)) .offset(0.75, -0.0625, -0.3125D) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_ATLAS)) .setupStandardConfiguration() .anim(LAMBDA_ATLAS_ANIMS).orchestra(Orchestras.ORCHESTRA_ATLAS) ).setUnlocalizedName("gun_light_revolver_atlas"); @@ -61,7 +63,7 @@ public class XFactory357 { .dmg(15F).delay(11).reload(55).jam(45).sound("hbm:weapon.fire.pistol", 1.0F, 1.1F) .mag(new MagazineFullReload(0, 6).addConfigs(m357_bp, m357_sp, m357_fmj, m357_jhp, m357_ap, m357_express)) .offset(0.75, -0.0625, 0.3125D) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_DANI)) .pp(Lego.LAMBDA_STANDARD_CLICK_PRIMARY).pr(Lego.LAMBDA_STANDARD_RELOAD) .decider(GunStateDecider.LAMBDA_STANDARD_DECIDER) .anim(LAMBDA_DANI_ANIMS).orchestra(Orchestras.ORCHESTRA_DANI), @@ -70,12 +72,20 @@ public class XFactory357 { .dmg(15F).delay(11).reload(55).jam(45).sound("hbm:weapon.fire.pistol", 1.0F, 0.9F) .mag(new MagazineFullReload(1, 6).addConfigs(m357_bp, m357_sp, m357_fmj, m357_jhp, m357_ap, m357_express)) .offset(0.75, -0.0625, -0.3125D) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_DANI)) .ps(Lego.LAMBDA_STANDARD_CLICK_PRIMARY).pr(Lego.LAMBDA_STANDARD_RELOAD) .decider(GunStateDecider.LAMBDA_STANDARD_DECIDER) .anim(LAMBDA_DANI_ANIMS).orchestra(Orchestras.ORCHESTRA_DANI) ).setUnlocalizedName("gun_light_revolver_dani"); } + + public static BiConsumer LAMBDA_RECOIL_ATLAS = (stack, ctx) -> { + ItemGunBaseNT.setupRecoil(10, (float) (ctx.getPlayer().getRNG().nextGaussian() * 1.5)); + }; + + public static BiConsumer LAMBDA_RECOIL_DANI = (stack, ctx) -> { + ItemGunBaseNT.setupRecoil(5, (float) (ctx.getPlayer().getRNG().nextGaussian() * 0.75)); + }; @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_ATLAS_ANIMS = (stack, type) -> { switch(type) { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory40mm.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory40mm.java index 515a6a85b..59568effd 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory40mm.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory40mm.java @@ -157,7 +157,7 @@ public class XFactory40mm { .dmg(15F).delay(20).reload(28).jam(33).sound("hbm:weapon.hkShoot", 1.0F, 1.0F) .mag(new MagazineSingleReload(0, 1).addConfigs(g26_flare, g26_flare_supply, g26_flare_weapon)) .offset(0.75, -0.0625, -0.1875D) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_GL)) .setupStandardConfiguration() .anim(LAMBDA_FLAREGUN_ANIMS).orchestra(Orchestras.ORCHESTRA_FLAREGUN) ).setUnlocalizedName("gun_flaregun"); @@ -168,7 +168,7 @@ public class XFactory40mm { .dmg(20F).delay(24).reload(16, 16, 16, 0).jam(0).sound("hbm:weapon.glShoot", 1.0F, 1.0F) .mag(new MagazineSingleReload(0, 4).addConfigs(g40_he, g40_heat, g40_demo, g40_inc, g40_phosphorus)) .offset(0.75, -0.0625, -0.1875D) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_GL)) .setupStandardConfiguration() .anim(LAMBDA_CONGOLAKE_ANIMS).orchestra(Orchestras.ORCHESTRA_CONGOLAKE) ).setUnlocalizedName("gun_congolake"); @@ -177,6 +177,10 @@ public class XFactory40mm { public static BiConsumer LAMBDA_SMOKE = (stack, ctx) -> { Lego.handleStandardSmoke(ctx.entity, stack, 1500, 0.025D, 1.05D, 0); }; + + public static BiConsumer LAMBDA_RECOIL_GL = (stack, ctx) -> { + ItemGunBaseNT.setupRecoil(10, (float) (ctx.getPlayer().getRNG().nextGaussian() * 1.5)); + }; @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_FLAREGUN_ANIMS = (stack, type) -> { switch(type) { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory44.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory44.java index 161bed164..0135faf4a 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory44.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory44.java @@ -62,7 +62,7 @@ public class XFactory44 { .dmg(10F).delay(20).reload(25, 11, 14, 8).jam(45).sound("hbm:weapon.fire.rifle", 1.0F, 1.0F) .mag(new MagazineSingleReload(0, 14).addConfigs(m44_bp, m44_sp, m44_fmj, m44_jhp, m44_ap, m44_express)) .offset(0.75, -0.0625, -0.1875D) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_HENRY)) .setupStandardConfiguration() .anim(LAMBDA_HENRY_ANIMS).orchestra(Orchestras.ORCHESTRA_HENRY) ).setUnlocalizedName("gun_henry"); @@ -73,7 +73,7 @@ public class XFactory44 { .dmg(15F).delay(14).reload(46).jam(23).sound("hbm:weapon.44Shoot", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 6).addConfigs(m44_bp, m44_sp, m44_fmj, m44_jhp, m44_ap, m44_express)) .offset(0.75, -0.0625, -0.3125D) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_NOPIP)) .setupStandardConfiguration() .anim(LAMBDA_NOPIP_ANIMS).orchestra(Orchestras.ORCHESTRA_NOPIP) ).setUnlocalizedName("gun_heavy_revolver"); @@ -83,7 +83,7 @@ public class XFactory44 { .dmg(30F).delay(14).reload(46).jam(23).sound("hbm:weapon.44Shoot", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 6).addConfigs(m44_equestrian, m44_bp, m44_sp, m44_fmj, m44_jhp, m44_ap, m44_express)) .offset(0.75, -0.0625, -0.3125D) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_NOPIP)) .setupStandardConfiguration() .anim(LAMBDA_LILMAC_ANIMS).orchestra(Orchestras.ORCHESTRA_NOPIP) ).setUnlocalizedName("gun_heavy_revolver_lilmac"); @@ -94,7 +94,7 @@ public class XFactory44 { .dmg(25F).delay(10).reload(46).jam(23).sound("hbm:weapon.44Shoot", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 8).addConfigs(m44_bp, m44_sp, m44_fmj, m44_jhp, m44_ap, m44_express)) .offset(1, -0.0625 * 2.5, -0.25D) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_HANGMAN)) .setupStandardConfiguration().ps(SMACK_A_FUCKER) .anim(LAMBDA_HANGMAN_ANIMS).orchestra(Orchestras.ORCHESTRA_HANGMAN) ).setUnlocalizedName("gun_hangman"); @@ -107,6 +107,18 @@ public class XFactory44 { ItemGunBaseNT.playAnimation(ctx.getPlayer(), stack, AnimType.INSPECT, ctx.configIndex); } }; + + public static BiConsumer LAMBDA_RECOIL_HENRY = (stack, ctx) -> { + ItemGunBaseNT.setupRecoil(5, (float) (ctx.getPlayer().getRNG().nextGaussian() * 1)); + }; + + public static BiConsumer LAMBDA_RECOIL_NOPIP = (stack, ctx) -> { + ItemGunBaseNT.setupRecoil(10, (float) (ctx.getPlayer().getRNG().nextGaussian() * 1.5)); + }; + + public static BiConsumer LAMBDA_RECOIL_HANGMAN = (stack, ctx) -> { + ItemGunBaseNT.setupRecoil(5, (float) (ctx.getPlayer().getRNG().nextGaussian() * 1)); + }; @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_HENRY_ANIMS = (stack, type) -> { switch(type) { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java index b76740d7b..d43305281 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java @@ -49,7 +49,7 @@ public class XFactory50 { .dmg(7.5F).delay(2).dry(10).auto(true).spread(0.005F).sound("hbm:weapon.fire.blackPowder", 1.0F, 1.0F) .mag(new MagazineBelt().addConfigs(bmg50_sp, bmg50_fmj, bmg50_jhp, bmg50_ap, bmg50_du)) .offset(1, -0.0625 * 2.5, -0.25D) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_M2)) .setupStandardConfiguration() .anim(LAMBDA_M2_ANIMS).orchestra(Orchestras.ORCHESTRA_M2) ).setUnlocalizedName("gun_m2"); @@ -58,6 +58,10 @@ public class XFactory50 { public static BiConsumer LAMBDA_SMOKE = (stack, ctx) -> { Lego.handleStandardSmoke(ctx.entity, stack, 2000, 0.05D, 1.1D, 0); }; + + public static BiConsumer LAMBDA_RECOIL_M2 = (stack, ctx) -> { + ItemGunBaseNT.setupRecoil((float) (ctx.getPlayer().getRNG().nextGaussian() * 0.5), (float) (ctx.getPlayer().getRNG().nextGaussian() * 0.5)); + }; @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_M2_ANIMS = (stack, type) -> { switch(type) { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory556mm.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory556mm.java index a914e87bc..fa055c59e 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory556mm.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory556mm.java @@ -15,6 +15,7 @@ import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.mags.MagazineFullReload; +import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; import com.hbm.main.ResourceManager; import com.hbm.particle.SpentCasing; @@ -25,9 +26,12 @@ import com.hbm.render.anim.BusAnimationKeyframe.IType; import com.hbm.render.anim.HbmAnimations.AnimType; import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; public class XFactory556mm { + public static final ResourceLocation scope_lilmac = new ResourceLocation(RefStrings.MODID, "textures/misc/scope_44.png"); + public static BulletConfig r556_sp; public static BulletConfig r556_fmj; public static BulletConfig r556_jhp; @@ -50,18 +54,18 @@ public class XFactory556mm { .dmg(5F).delay(2).auto(true).dry(15).spread(0.0F).reload(50).jam(47).sound("hbm:weapon.fire.assault", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 30).addConfigs(r556_sp, r556_fmj, r556_jhp, r556_ap)) .offset(1, -0.0625 * 2.5, -0.25D) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_G3)) .setupStandardConfiguration().ps(Lego.LAMBDA_STANDARD_CLICK_SECONDARY) .anim(LAMBDA_G3_ANIMS).orchestra(Orchestras.ORCHESTRA_G3) ).setUnlocalizedName("gun_g3"); ModItems.gun_stg77 = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() - .dura(3_000).draw(10).inspect(125).crosshair(Crosshair.CIRCLE).smoke(LAMBDA_SMOKE) + .dura(3_000).draw(10).inspect(125).crosshair(Crosshair.CIRCLE).scopeTexture(scope_lilmac).smoke(LAMBDA_SMOKE) .rec(new Receiver(0) .dmg(10F).delay(2).dry(15).auto(true).spread(0.0F).reload(46).jam(0).sound("hbm:weapon.fire.assault", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 30).addConfigs(r556_sp, r556_fmj, r556_jhp, r556_ap)) .offset(1, -0.0625 * 2.5, -0.25D) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_STG)) .pp(Lego.LAMBDA_STANDARD_CLICK_PRIMARY).ps(Lego.LAMBDA_STANDARD_CLICK_PRIMARY).pr(Lego.LAMBDA_STANDARD_RELOAD).pt(Lego.LAMBDA_TOGGLE_AIM) .decider(LAMBDA_STG77_DECIDER) .anim(LAMBDA_STG77_ANIMS).orchestra(Orchestras.ORCHESTRA_STG77) @@ -81,6 +85,12 @@ public class XFactory556mm { GunStateDecider.deciderAutoRefire(stack, ctx, lastState, 0, index, () -> { return ItemGunBaseNT.getSecondary(stack, index); }); }; + public static BiConsumer LAMBDA_RECOIL_G3 = (stack, ctx) -> { + ItemGunBaseNT.setupRecoil((float) (ctx.getPlayer().getRNG().nextGaussian() * 0.25), (float) (ctx.getPlayer().getRNG().nextGaussian() * 0.25)); + }; + + public static BiConsumer LAMBDA_RECOIL_STG = (stack, ctx) -> { }; + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_G3_ANIMS = (stack, type) -> { boolean empty = ((ItemGunBaseNT) stack.getItem()).getConfig(stack, 0).getReceivers(stack)[0].getMagazine(stack).getAmount(stack, MainRegistry.proxy.me().inventory) <= 0; switch(type) { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory75Bolt.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory75Bolt.java index 2d318cbc8..f1fb33ee0 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory75Bolt.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory75Bolt.java @@ -43,7 +43,7 @@ public class XFactory75Bolt { .dmg(15F).delay(2).auto(true).spread(0.005F).reload(40).jam(55).sound("hbm:weapon.fire.blackPowder", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 30).addConfigs(b75, b75_inc, b75_exp)) .offset(1, -0.0625 * 2.5, -0.25D) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_BOLT)) .setupStandardConfiguration() .anim(LAMBDA_BOLTER_ANIMS).orchestra(Orchestras.ORCHESTRA_BOLTER) ).setUnlocalizedName("gun_bolter"); @@ -52,6 +52,10 @@ public class XFactory75Bolt { public static BiConsumer LAMBDA_SMOKE = (stack, ctx) -> { Lego.handleStandardSmoke(ctx.entity, stack, 2000, 0.05D, 1.1D, 0); }; + + public static BiConsumer LAMBDA_RECOIL_BOLT = (stack, ctx) -> { + ItemGunBaseNT.setupRecoil((float) (ctx.getPlayer().getRNG().nextGaussian() * 1.5), (float) (ctx.getPlayer().getRNG().nextGaussian() * 1.5)); + }; @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_BOLTER_ANIMS = (stack, type) -> { switch(type) { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory762mm.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory762mm.java index 6a4451b40..d977e1064 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory762mm.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory762mm.java @@ -60,7 +60,7 @@ public class XFactory762mm { .dmg(15F).delay(5).dry(15).spread(0.0F).reload(30, 0, 15, 0).jam(60).sound("hbm:weapon.fire.blackPowder", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 14).addConfigs(r762_sp, r762_fmj, r762_jhp, r762_ap, r762_du)) .offset(1, -0.0625 * 2.5, -0.25D) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_CARBINE)) .setupStandardConfiguration() .anim(LAMBDA_CARBINE_ANIMS).orchestra(Orchestras.ORCHESTRA_CARBIBE) ).setUnlocalizedName("gun_carbine"); @@ -71,7 +71,7 @@ public class XFactory762mm { .dmg(6F).delay(1).auto(true).dry(15).spread(0.01F).sound("hbm:weapon.fire.blackPowder", 1.0F, 1.0F) .mag(new MagazineBelt().addConfigs(r762_sp, r762_fmj, r762_jhp, r762_ap, r762_du)) .offset(1, -0.0625 * 2.5, -0.25D) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_MINIGUN)) .setupStandardConfiguration() .anim(LAMBDA_MINIGUN_ANIMS).orchestra(Orchestras.ORCHESTRA_MINIGUN) ).setUnlocalizedName("gun_minigun"); @@ -81,7 +81,7 @@ public class XFactory762mm { .dmg(12F).delay(1).auto(true).dry(15).reload(15).spread(0.01F).sound("hbm:weapon.fire.laserGatling", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 200).addConfigs(energy_lacunae, energy_lacunae_overcharge, energy_lacunae_ir)) .offset(1, -0.0625 * 2.5, -0.25D) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_LACUNAE)) .setupStandardConfiguration() .anim(LAMBDA_MINIGUN_ANIMS).orchestra(Orchestras.ORCHESTRA_MINIGUN) ).setUnlocalizedName("gun_minigun_lacunae"); @@ -90,6 +90,16 @@ public class XFactory762mm { public static BiConsumer LAMBDA_SMOKE = (stack, ctx) -> { Lego.handleStandardSmoke(ctx.entity, stack, 1500, 0.075D, 1.1D, 0); }; + + public static BiConsumer LAMBDA_RECOIL_CARBINE = (stack, ctx) -> { + ItemGunBaseNT.setupRecoil(5, (float) (ctx.getPlayer().getRNG().nextGaussian() * 0.5)); + }; + + public static BiConsumer LAMBDA_RECOIL_MINIGUN = (stack, ctx) -> { + ItemGunBaseNT.setupRecoil((float) (ctx.getPlayer().getRNG().nextGaussian() * 0.5), (float) (ctx.getPlayer().getRNG().nextGaussian() * 0.5)); + }; + + public static BiConsumer LAMBDA_RECOIL_LACUNAE = (stack, ctx) -> { }; @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_CARBINE_ANIMS = (stack, type) -> { boolean empty = ((ItemGunBaseNT) stack.getItem()).getConfig(stack, 0).getReceivers(stack)[0].getMagazine(stack).getAmount(stack, MainRegistry.proxy.me().inventory) <= 0; diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory9mm.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory9mm.java index 8b4110ec0..e72cadf2d 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory9mm.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory9mm.java @@ -46,10 +46,10 @@ public class XFactory9mm { ModItems.gun_greasegun = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(3_000).draw(20).inspect(31).crosshair(Crosshair.L_CIRCLE).smoke(LAMBDA_SMOKE) .rec(new Receiver(0) - .dmg(3F).delay(4).dry(40).auto(true).spread(0.015F).reload(60).jam(55).sound("hbm:weapon.fire.blackPowder", 1.0F, 1.0F) + .dmg(3F).delay(4).dry(40).auto(true).spread(0.015F).reload(60).jam(55).sound("hbm:weapon.fire.greaseGun", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 30).addConfigs(p9_sp, p9_fmj, p9_jhp, p9_ap)) .offset(1, -0.0625 * 2.5, -0.25D) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_GREASEGUN)) .setupStandardConfiguration() .anim(LAMBDA_GREASEGUN_ANIMS).orchestra(Orchestras.ORCHESTRA_GREASEGUN) ).setUnlocalizedName("gun_greasegun"); @@ -57,10 +57,10 @@ public class XFactory9mm { ModItems.gun_lag = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(1_700).draw(7).inspect(31).crosshair(Crosshair.CIRCLE).smoke(LAMBDA_SMOKE) .rec(new Receiver(0) - .dmg(25F).delay(4).dry(4).spread(0.005F).reload(53).jam(44).sound("hbm:weapon.fire.blackPowder", 1.0F, 1.0F) + .dmg(25F).delay(4).dry(10).spread(0.005F).reload(53).jam(44).sound("hbm:weapon.fire.pistol", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 17).addConfigs(p9_sp, p9_fmj, p9_jhp, p9_ap)) .offset(1, -0.0625 * 2.5, -0.25D) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_LAG)) .setupStandardConfiguration() .anim(LAMBDA_LAG_ANIMS).orchestra(Orchestras.ORCHESTRA_LAG) ).setUnlocalizedName("gun_lag"); @@ -68,35 +68,47 @@ public class XFactory9mm { ModItems.gun_uzi = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(3_000).draw(15).inspect(31).crosshair(Crosshair.CIRCLE).smoke(LAMBDA_SMOKE) .rec(new Receiver(0) - .dmg(3F).delay(2).dry(25).auto(true).spread(0.005F).reload(55).jam(50).sound("hbm:weapon.fire.blackPowder", 1.0F, 1.0F) + .dmg(3F).delay(2).dry(25).auto(true).spread(0.005F).reload(55).jam(50).sound("hbm:weapon.fire.uzi", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 30).addConfigs(p9_sp, p9_fmj, p9_jhp, p9_ap)) .offset(1, -0.0625 * 2.5, -0.25D) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_UZI)) .setupStandardConfiguration() .anim(LAMBDA_UZI_ANIMS).orchestra(Orchestras.ORCHESTRA_UZI) ).setUnlocalizedName("gun_uzi"); ModItems.gun_uzi_akimbo = new ItemGunBaseNT(WeaponQuality.B_SIDE, new GunConfig().dura(3_000).draw(15).inspect(31).crosshair(Crosshair.CIRCLE).smoke(LAMBDA_SMOKE) .rec(new Receiver(0) - .dmg(3F).delay(2).dry(25).auto(true).spread(0.005F).reload(55).jam(50).sound("hbm:weapon.fire.blackPowder", 1.0F, 1.0F) + .dmg(3F).delay(2).dry(25).auto(true).spread(0.005F).reload(55).jam(50).sound("hbm:weapon.fire.uzi", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 30).addConfigs(p9_sp, p9_fmj, p9_jhp, p9_ap)) .offset(1, -0.0625 * 2.5, 0.375D) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_UZI)) .pp(Lego.LAMBDA_STANDARD_CLICK_PRIMARY).pr(Lego.LAMBDA_STANDARD_RELOAD) .decider(GunStateDecider.LAMBDA_STANDARD_DECIDER) .anim(LAMBDA_UZI_ANIMS).orchestra(Orchestras.ORCHESTRA_UZI_AKIMBO), new GunConfig().dura(3_000).draw(15).inspect(31).crosshair(Crosshair.CIRCLE).smoke(LAMBDA_SMOKE) .rec(new Receiver(0) - .dmg(7.5F).delay(2).dry(25).auto(true).spread(0.005F).reload(55).jam(50).sound("hbm:weapon.fire.blackPowder", 1.0F, 1.0F) + .dmg(7.5F).delay(2).dry(25).auto(true).spread(0.005F).reload(55).jam(50).sound("hbm:weapon.fire.uzi", 1.0F, 1.0F) .mag(new MagazineFullReload(1, 30).addConfigs(p9_sp, p9_fmj, p9_jhp, p9_ap)) .offset(1, -0.0625 * 2.5, -0.375D) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_UZI)) .ps(Lego.LAMBDA_STANDARD_CLICK_PRIMARY).pr(Lego.LAMBDA_STANDARD_RELOAD) .decider(LAMBDA_SECOND_UZI) .anim(LAMBDA_UZI_ANIMS).orchestra(Orchestras.ORCHESTRA_UZI_AKIMBO) ).setUnlocalizedName("gun_uzi_akimbo"); } + public static BiConsumer LAMBDA_RECOIL_GREASEGUN = (stack, ctx) -> { + ItemGunBaseNT.setupRecoil(2, (float) (ctx.getPlayer().getRNG().nextGaussian() * 0.5)); + }; + + public static BiConsumer LAMBDA_RECOIL_LAG = (stack, ctx) -> { + ItemGunBaseNT.setupRecoil(5, (float) (ctx.getPlayer().getRNG().nextGaussian() * 1.5)); + }; + + public static BiConsumer LAMBDA_RECOIL_UZI = (stack, ctx) -> { + ItemGunBaseNT.setupRecoil(1, (float) (ctx.getPlayer().getRNG().nextGaussian() * 0.25)); + }; + public static BiConsumer LAMBDA_SECOND_UZI = (stack, ctx) -> { int index = ctx.configIndex; GunState lastState = ItemGunBaseNT.getState(stack, index); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryAccelerator.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryAccelerator.java index 0866fd3ff..1e72c8e24 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryAccelerator.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryAccelerator.java @@ -98,7 +98,7 @@ public class XFactoryAccelerator { .dmg(25F).delay(4).auto(true).spread(0F) .mag(new MagazineBelt().addConfigs(tau_uranium)) .offset(1, -0.0625 * 2.5, -0.25D) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_TAU)) .pp(Lego.LAMBDA_STANDARD_CLICK_PRIMARY) .rp(LAMBDA_TAU_PRIMARY_RELEASE) .ps(LAMBDA_TAU_SECONDARY_PRESS) @@ -114,7 +114,7 @@ public class XFactoryAccelerator { .dmg(35F).delay(5).reload(20).jam(33).sound("hbm:weapon.coilgunShoot", 1.0F, 1.0F) .mag(new MagazineSingleReload(0, 1).addConfigs(coil_tungsten, coil_ferrouranium)) .offset(0.75, -0.0625, -0.1875D) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_COILGUN)) .setupStandardConfiguration() .anim(LAMBDA_COILGUN_ANIMS).orchestra(Orchestras.ORCHESTRA_COILGUN) ).setUnlocalizedName("gun_coilgun"); @@ -163,6 +163,12 @@ public class XFactoryAccelerator { ItemGunBaseNT.playAnimation(ctx.getPlayer(), stack, AnimType.CYCLE_DRY, ctx.configIndex); } }; + + public static BiConsumer LAMBDA_RECOIL_TAU = (stack, ctx) -> { }; + + public static BiConsumer LAMBDA_RECOIL_COILGUN = (stack, ctx) -> { + ItemGunBaseNT.setupRecoil(10, (float) (ctx.getPlayer().getRNG().nextGaussian() * 1.5)); + }; @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_TAU_ANIMS = (stack, type) -> { switch(type) { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryBlackPowder.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryBlackPowder.java index 3cb6a8403..203770f37 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryBlackPowder.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryBlackPowder.java @@ -1,5 +1,6 @@ package com.hbm.items.weapon.sedna.factory; +import java.util.function.BiConsumer; import java.util.function.BiFunction; import com.hbm.items.ModItems; @@ -8,6 +9,7 @@ import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.weapon.sedna.GunConfig; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.Receiver; +import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.mags.MagazineFullReload; @@ -33,11 +35,15 @@ public class XFactoryBlackPowder { .dmg(5F).delay(27).reload(67).jam(58).sound("hbm:weapon.fire.blackPowder", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 6).addConfigs(stone, flint, iron, shot)) .offset(0.75, -0.0625, -0.1875D) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_PEPPERBOX)) .setupStandardConfiguration() .anim(LAMBDA_PEPPERBOX_ANIMS).orchestra(Orchestras.ORCHESTRA_PEPPERBOX) ).setUnlocalizedName("gun_pepperbox"); } + + public static BiConsumer LAMBDA_RECOIL_PEPPERBOX = (stack, ctx) -> { + ItemGunBaseNT.setupRecoil(10, (float) (ctx.getPlayer().getRNG().nextGaussian() * 1.5)); + }; @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_PEPPERBOX_ANIMS = (stack, type) -> { switch(type) { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryCatapult.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryCatapult.java index 0317caee5..0f79d93ab 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryCatapult.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryCatapult.java @@ -19,6 +19,7 @@ import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.weapon.sedna.GunConfig; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.Receiver; +import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.mags.MagazineSingleReload; @@ -141,12 +142,14 @@ public class XFactoryCatapult { .rec(new Receiver(0) .dmg(100F).delay(10).reload(57).jam(40).sound("hbm:weapon.fire.fatman", 1.0F, 1.0F) .mag(new MagazineSingleReload(0, 1).addConfigs(nuke_standard, nuke_demo, nuke_high, nuke_tots, nuke_hive)) - .offset(1, -0.0625 * 1.5, -0.1875D) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .offset(1, -0.0625 * 1.5, -0.1875D).offsetScoped(1, -0.0625 * 1.5, -0.125D) + .setupStandardFire().recoil(LAMBDA_RECOIL_FATMAN)) .setupStandardConfiguration() .anim(LAMBDA_FATMAN_ANIMS).orchestra(Orchestras.ORCHESTRA_FATMAN) ).setUnlocalizedName("gun_fatman"); } + + public static BiConsumer LAMBDA_RECOIL_FATMAN = (stack, ctx) -> { }; @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_FATMAN_ANIMS = (stack, type) -> { switch(type) { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryEnergy.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryEnergy.java index 3266ebe94..8280ee681 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryEnergy.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryEnergy.java @@ -15,6 +15,7 @@ import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.weapon.sedna.GunConfig; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.Receiver; +import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.mags.MagazineBelt; @@ -133,10 +134,10 @@ public class XFactoryEnergy { ModItems.gun_tesla_cannon = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(2_000).draw(10).inspect(33).reloadSequential(true).crosshair(Crosshair.CIRCLE) .rec(new Receiver(0) - .dmg(35F).delay(20).reload(44).jam(19).sound("hbm:weapon.fire.blackPowder", 1.0F, 1.0F) + .dmg(35F).delay(20).reload(44).jam(19).sound("hbm:weapon.fire.tesla", 1.0F, 1.0F) .mag(new MagazineBelt().addConfigs(energy_tesla, energy_tesla_overcharge)) - .offset(0.75, 0, -0.375) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .offset(0.75, 0, -0.375).offsetScoped(0.75, 0, -0.25) + .setupStandardFire().recoil(LAMBDA_RECOIL_ENERGY)) .setupStandardConfiguration() .anim(LAMBDA_TESLA_ANIMS).orchestra(Orchestras.ORCHESTRA_TESLA) ).setUnlocalizedName("gun_tesla_cannon"); @@ -147,11 +148,13 @@ public class XFactoryEnergy { .dmg(50F).delay(8).reload(44).jam(36).sound("hbm:weapon.fire.laser", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 24).addConfigs(energy_las, energy_las_overcharge, energy_las_ir)) .offset(0.75, -0.0625 * 1.5, -0.1875) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_ENERGY)) .setupStandardConfiguration() .anim(LAMBDA_LASRIFLE).orchestra(Orchestras.ORCHESTRA_LASRIFLE) ).setUnlocalizedName("gun_lasrifle"); } + + public static BiConsumer LAMBDA_RECOIL_ENERGY = (stack, ctx) -> { }; @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_TESLA_ANIMS = (stack, type) -> { int amount = ((ItemGunBaseNT) stack.getItem()).getConfig(stack, 0).getReceivers(stack)[0].getMagazine(stack).getAmount(stack, MainRegistry.proxy.me().inventory); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFolly.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFolly.java index f30adfc2a..a063c3cc5 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFolly.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFolly.java @@ -104,8 +104,8 @@ public class XFactoryFolly { .rec(new Receiver(0) .dmg(1_000F).delay(26).dryfire(false).reload(160).jam(0).sound("hbm:weapon.fire.loudestNoiseOnEarth", 100.0F, 1.0F) .mag(new MagazineSingleReload(0, 1).addConfigs(folly_sm, folly_nuke)) - .offset(0.75, -0.0625, -0.1875D) - .canFire(LAMBDA_CAN_FIRE).fire(LAMBDA_FIRE).recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .offset(0.75, -0.0625, -0.1875D).offsetScoped(0.75, -0.0625, -0.125D) + .canFire(LAMBDA_CAN_FIRE).fire(LAMBDA_FIRE).recoil(LAMBDA_RECOIL_FOLLY)) .setupStandardConfiguration().pt(LAMBDA_TOGGLE_AIM) .anim(LAMBDA_FOLLY_ANIMS).orchestra(Orchestras.ORCHESTRA_FOLLY) ).setUnlocalizedName("gun_folly"); @@ -129,6 +129,10 @@ public class XFactoryFolly { if(ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex) < 100) return false; return ctx.config.getReceivers(stack)[0].getMagazine(stack).getAmount(stack, ctx.inventory) > 0; }; + + public static BiConsumer LAMBDA_RECOIL_FOLLY = (stack, ctx) -> { + ItemGunBaseNT.setupRecoil(25, (float) (ctx.getPlayer().getRNG().nextGaussian() * 1.5)); + }; @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_FOLLY_ANIMS = (stack, type) -> { switch(type) { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryRocket.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryRocket.java index 9ba444475..d0bc0683c 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryRocket.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryRocket.java @@ -169,7 +169,7 @@ public class XFactoryRocket { .dmg(25F).delay(5).reload(50).jam(40).sound("hbm:weapon.rpgShoot", 1.0F, 1.0F) .mag(new MagazineSingleReload(0, 1).addConfigs(rocket_rpzb)) .offset(1, -0.0625 * 1.5, -0.1875D) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_ROCKET)) .setupStandardConfiguration() .anim(LAMBDA_PANZERSCHRECK_ANIMS).orchestra(Orchestras.ORCHESTRA_PANERSCHRECK) ).setUnlocalizedName("gun_panzerschreck"); @@ -180,7 +180,7 @@ public class XFactoryRocket { .dmg(35F).delay(5).reload(50).jam(40).sound("hbm:weapon.rpgShoot", 1.0F, 1.0F) .mag(new MagazineSingleReload(0, 1).addConfigs(rocket_rpzb)) .offset(1, -0.0625 * 1.5, -0.1875D) - .setupLockonFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupLockonFire().recoil(LAMBDA_RECOIL_ROCKET)) .setupStandardConfiguration().ps(LAMBDA_STINGER_SECONDARY_PRESS).rs(LAMBDA_STINGER_SECONDARY_RELEASE) .anim(LAMBDA_PANZERSCHRECK_ANIMS).orchestra(Orchestras.ORCHESTRA_STINGER) ).setUnlocalizedName("gun_stinger"); @@ -191,7 +191,7 @@ public class XFactoryRocket { .dmg(40F).delay(10).reload(55).jam(40).sound("hbm:weapon.rpgShoot", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 4).addConfigs(rocket_qd)) .offset(1, -0.0625 * 1.5, -0.1875D) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_ROCKET)) .setupStandardConfiguration() .anim(LAMBDA_QUADRO_ANIMS).orchestra(Orchestras.ORCHESTRA_QUADRO) ).setUnlocalizedName("gun_quadro"); @@ -202,7 +202,7 @@ public class XFactoryRocket { .dmg(50F).delay(5).reload(48).jam(33).sound("hbm:weapon.rpgShoot", 1.0F, 1.0F) .mag(new MagazineSingleReload(0, 1).addConfigs(rocket_ml)) .offset(1, -0.0625 * 1.5, -0.1875D) - .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardFire().recoil(LAMBDA_RECOIL_ROCKET)) .setupStandardConfiguration().pp(LAMBDA_MISSILE_LAUNCHER_PRIMARY_PRESS) .anim(LAMBDA_MISSILE_LAUNCHER_ANIMS).orchestra(Orchestras.ORCHESTRA_MISSILE_LAUNCHER) ).setUnlocalizedName("gun_missile_launcher"); @@ -222,6 +222,8 @@ public class XFactoryRocket { Lego.LAMBDA_STANDARD_CLICK_PRIMARY.accept(stack, ctx); ItemGunBaseNT.setIsLockedOn(stack, false); }; + + public static BiConsumer LAMBDA_RECOIL_ROCKET = (stack, ctx) -> { }; @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_PANZERSCHRECK_ANIMS = (stack, type) -> { boolean empty = ((ItemGunBaseNT) stack.getItem()).getConfig(stack, 0).getReceivers(stack)[0].getMagazine(stack).getAmount(stack, MainRegistry.proxy.me().inventory) <= 0; diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index ea4d669b6..a960a8925 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 (5091)"; + public static final String VERSION = "1.0.27 BETA (5180)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index 571710cab..b4232a54a 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -22,8 +22,6 @@ import com.hbm.inventory.material.NTMMaterial; import static com.hbm.inventory.OreDictManager.*; import com.hbm.items.ModItems; -import com.hbm.items.ItemAmmoEnums.Ammo50BMG; -import com.hbm.items.ItemAmmoEnums.Ammo5mm; import com.hbm.items.ItemEnums.EnumLegendaryType; import com.hbm.items.ItemEnums.EnumPages; import com.hbm.items.ItemEnums.EnumPlantType; @@ -37,10 +35,8 @@ import com.hbm.items.special.ItemHolotapeImage.EnumHoloImage; import com.hbm.items.special.ItemPlasticScrap.ScrapType; import com.hbm.items.tool.ItemDrone.EnumDroneType; import com.hbm.items.tool.ItemGuideBook.BookType; -import com.hbm.util.EnchantmentUtil; import net.minecraft.block.Block; -import net.minecraft.enchantment.Enchantment; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; @@ -212,16 +208,6 @@ public class CraftingManager { addShapelessAuto(new ItemStack(Items.string, 3), new Object[] { DictFrame.fromOne(ModBlocks.plant_flower, EnumFlowerType.WEED) }); addRecipeAuto(new ItemStack(Items.paper, 3), new Object[] { "SSS", 'S', ModItems.powder_sawdust }); - ItemStack infinity = new ItemStack(Items.enchanted_book); - EnchantmentUtil.addEnchantment(infinity, Enchantment.infinity, 1); - addRecipeAuto(infinity, new Object[] { "SBS", "BDB", "SBS", 'S', ModItems.ammo_50bmg.stackFromEnum(Ammo50BMG.STAR), 'B', ModItems.ammo_5mm.stackFromEnum(Ammo5mm.STAR), 'D', ModItems.powder_magic }); - ItemStack unbreaking = new ItemStack(Items.enchanted_book); - EnchantmentUtil.addEnchantment(unbreaking, Enchantment.unbreaking, 3); - addRecipeAuto(unbreaking, new Object[] { "SBS", "BDB", "SBS", 'S', BIGMT.ingot(), 'B', ModItems.plate_armor_lunar, 'D', ModItems.powder_magic }); - ItemStack thorns = new ItemStack(Items.enchanted_book); - EnchantmentUtil.addEnchantment(thorns, Enchantment.thorns, 3); - addRecipeAuto(thorns, new Object[] { "SBS", "BDB", "SBS", 'S', ModBlocks.barbed_wire, 'B', ModBlocks.spikes, 'D', ModItems.powder_magic }); - addRecipeAuto(new ItemStack(ModItems.wrench, 1), new Object[] { " S ", " IS", "I ", 'S', STEEL.ingot(), 'I', IRON.ingot() }); addRecipeAuto(new ItemStack(ModItems.wrench_flipped, 1), new Object[] { "S", "D", "W", 'S', Items.iron_sword, 'D', ModItems.ducttape, 'W', ModItems.wrench }); addRecipeAuto(new ItemStack(ModItems.memespoon, 1), new Object[] { "CGC", "PSP", "IAI", 'C', ModItems.powder_yellowcake, 'G', TH232.block(), 'P', ModItems.photo_panel, 'S', ModItems.steel_shovel, 'I', ModItems.plate_polymer, 'A', "ingotAustralium" }); @@ -345,7 +331,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModItems.blades_steel, 1), new Object[] { " P ", "PIP", " P ", 'P', STEEL.plate(), 'I', STEEL.ingot() }); addRecipeAuto(new ItemStack(ModItems.blades_titanium, 1), new Object[] { " P ", "PIP", " P ", 'P', TI.plate(), 'I', TI.ingot() }); addRecipeAuto(new ItemStack(ModItems.blades_advanced_alloy, 1), new Object[] { " P ", "PIP", " P ", 'P', ALLOY.plate(), 'I', ALLOY.ingot() }); - addRecipeAuto(new ItemStack(ModItems.blades_desh, 1), new Object[] { " S ", "PBP", " S ", 'S', BIGMT.plate(), 'P', ModItems.plate_desh, 'B', ModItems.blades_advanced_alloy }); //4 desh ingots still needed to do anything + addRecipeAuto(new ItemStack(ModItems.blades_desh, 1), new Object[] { " P ", "PBP", " P ", 'P', ModItems.plate_desh, 'B', ModItems.blades_advanced_alloy }); //4 desh ingots still needed to do anything addRecipeAuto(new ItemStack(ModItems.blades_steel, 1), new Object[] { "PIP", 'P', STEEL.plate(), 'I', new ItemStack(ModItems.blades_steel, 1, OreDictionary.WILDCARD_VALUE) }); addRecipeAuto(new ItemStack(ModItems.blades_titanium, 1), new Object[] { "PIP", 'P', TI.plate(), 'I', new ItemStack(ModItems.blades_titanium, 1, OreDictionary.WILDCARD_VALUE) }); @@ -365,7 +351,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModItems.stamp_steel_flat, 1), new Object[] { "III", "SSS", 'I', brick, 'S', STEEL.ingot() }); addRecipeAuto(new ItemStack(ModItems.stamp_titanium_flat, 1), new Object[] { "III", "SSS", 'I', brick, 'S', TI.ingot() }); addRecipeAuto(new ItemStack(ModItems.stamp_obsidian_flat, 1), new Object[] { "III", "SSS", 'I', brick, 'S', Blocks.obsidian }); - addRecipeAuto(new ItemStack(ModItems.stamp_desh_flat, 1), new Object[] { "BDB", "DSD", "BDB", 'B', brick, 'D', DESH.ingot(), 'S', BIGMT.ingot() }); + addRecipeAuto(new ItemStack(ModItems.stamp_desh_flat, 1), new Object[] { "BDB", "DSD", "BDB", 'B', brick, 'D', DESH.ingot(), 'S', FERRO.ingot() }); } addRecipeAuto(new ItemStack(ModItems.mechanism_revolver_1, 1), new Object[] { "ICI", "CAC", "ICI", 'I', IRON.plate(), 'C', CU.ingot(), 'A', AL.ingot() }); @@ -737,8 +723,6 @@ public class CraftingManager { addShapelessAuto(new ItemStack(ModItems.rune_thurisaz, 1), new Object[] { ModItems.rune_blank, ModItems.powder_spark_mix, ModItems.black_hole }); addRecipeAuto(new ItemStack(ModItems.ams_lens, 1), new Object[] { "PDP", "GDG", "PDP", 'P', ModItems.plate_dineutronium, 'G', ModBlocks.reinforced_glass, 'D', Blocks.diamond_block }); addRecipeAuto(new ItemStack(ModItems.ams_catalyst_blank, 1), new Object[] { "TET", "ETE", "TET", 'T', TS.dust(), 'E', EUPH.ingot()}); - addRecipeAuto(new ItemStack(ModItems.ams_focus_limiter, 1), new Object[] { "PDP", "GDG", "PDP", 'P', BIGMT.plate(), 'G', ModBlocks.reinforced_glass, 'D', Blocks.diamond_block }); - addRecipeAuto(new ItemStack(ModItems.ams_muzzle, 1), new Object[] { "GDG", "GDG", "PGP", 'P', BIGMT.plate(), 'G', ModBlocks.reinforced_glass, 'D', Blocks.diamond_block }); addShapelessAuto(new ItemStack(ModItems.ams_catalyst_lithium, 1), new Object[] { ModItems.ams_catalyst_blank, ModItems.rune_isa, ModItems.rune_isa, ModItems.rune_jera, ModItems.rune_jera, LI.dust(), LI.dust(), LI.dust(), LI.dust() }); addShapelessAuto(new ItemStack(ModItems.ams_catalyst_beryllium, 1), new Object[] { ModItems.ams_catalyst_blank, ModItems.rune_isa, ModItems.rune_dagaz, ModItems.rune_jera, ModItems.rune_jera, BE.dust(), BE.dust(), BE.dust(), BE.dust() }); addShapelessAuto(new ItemStack(ModItems.ams_catalyst_copper, 1), new Object[] { ModItems.ams_catalyst_blank, ModItems.rune_dagaz, ModItems.rune_dagaz, ModItems.rune_jera, ModItems.rune_jera, CU.dust(), CU.dust(), CU.dust(), CU.dust() }); diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index 06b3ddf91..9ad3e4e83 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -1035,22 +1035,27 @@ public class ModEventHandlerClient { if(event.phase == Phase.END) { - ItemGunBaseNT.offsetVertical += ItemGunBaseNT.recoilVertical; - ItemGunBaseNT.offsetHorizontal += ItemGunBaseNT.recoilHorizontal; - player.rotationPitch -= ItemGunBaseNT.recoilVertical; - player.rotationYaw -= ItemGunBaseNT.recoilHorizontal; - - float decay = 0.75F; - float rebound = 0.25F; - ItemGunBaseNT.recoilVertical *= decay; - ItemGunBaseNT.recoilHorizontal *= decay; - float dV = ItemGunBaseNT.offsetVertical * rebound; - float dH = ItemGunBaseNT.offsetHorizontal * rebound; - - ItemGunBaseNT.offsetVertical -= dV; - ItemGunBaseNT.offsetHorizontal -= dH; - player.rotationPitch += dV; - player.rotationYaw += dH; + if(ClientConfig.GUN_VISUAL_RECOIL.get()) { + ItemGunBaseNT.offsetVertical += ItemGunBaseNT.recoilVertical; + ItemGunBaseNT.offsetHorizontal += ItemGunBaseNT.recoilHorizontal; + player.rotationPitch -= ItemGunBaseNT.recoilVertical; + player.rotationYaw -= ItemGunBaseNT.recoilHorizontal; + + ItemGunBaseNT.recoilVertical *= ItemGunBaseNT.recoilDecay; + ItemGunBaseNT.recoilHorizontal *= ItemGunBaseNT.recoilDecay; + float dV = ItemGunBaseNT.offsetVertical * ItemGunBaseNT.recoilRebound; + float dH = ItemGunBaseNT.offsetHorizontal * ItemGunBaseNT.recoilRebound; + + ItemGunBaseNT.offsetVertical -= dV; + ItemGunBaseNT.offsetHorizontal -= dH; + player.rotationPitch += dV; + player.rotationYaw += dH; + } else { + ItemGunBaseNT.offsetVertical = 0; + ItemGunBaseNT.offsetHorizontal = 0; + ItemGunBaseNT.recoilVertical = 0; + ItemGunBaseNT.recoilHorizontal = 0; + } } } diff --git a/src/main/java/com/hbm/main/NEIConfig.java b/src/main/java/com/hbm/main/NEIConfig.java index 371573df3..3e54951c8 100644 --- a/src/main/java/com/hbm/main/NEIConfig.java +++ b/src/main/java/com/hbm/main/NEIConfig.java @@ -9,6 +9,7 @@ import com.hbm.config.CustomMachineConfigJSON; import com.hbm.handler.nei.CustomMachineHandler; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemBattery; +import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.lib.RefStrings; import codechicken.nei.api.API; @@ -16,6 +17,7 @@ import codechicken.nei.api.IConfigureNEI; import codechicken.nei.api.IHighlightHandler; import codechicken.nei.api.ItemInfo.Layout; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MovingObjectPosition; @@ -33,6 +35,11 @@ public class NEIConfig implements IConfigureNEI { registerHandlerBypass(new CustomMachineHandler(conf)); } + for(Item item : ItemGunBaseNT.secrets) { + API.hideItem(new ItemStack(item)); + } + API.hideItem(ItemBattery.getEmptyBattery(ModItems.ammo_secret)); + //Some things are even beyond my control...or are they? API.hideItem(ItemBattery.getEmptyBattery(ModItems.memory)); API.hideItem(ItemBattery.getFullBattery(ModItems.memory)); diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderSTG77.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderSTG77.java index a7f3bf9cd..1d7c1e123 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderSTG77.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderSTG77.java @@ -38,6 +38,7 @@ public class ItemRenderSTG77 extends ItemRenderWeaponBase { @Override public void renderFirstPerson(ItemStack stack) { + if(ItemGunBaseNT.prevAimingProgress == 1 && ItemGunBaseNT.aimingProgress == 1) return; ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem(); Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.stg77_tex); diff --git a/src/main/java/com/hbm/render/util/RenderInfoSystem.java b/src/main/java/com/hbm/render/util/RenderInfoSystem.java index 367d01f10..a578f110a 100644 --- a/src/main/java/com/hbm/render/util/RenderInfoSystem.java +++ b/src/main/java/com/hbm/render/util/RenderInfoSystem.java @@ -50,7 +50,7 @@ public class RenderInfoSystem { if(event.type != ElementType.CROSSHAIRS) return; - this.messages.put(-666, new InfoEntry("Your arteries are bad cable management, rip them out deluxe edition", 666_666)); + //this.messages.put(-666, new InfoEntry("Your arteries are bad cable management, rip them out deluxe edition", 666_666)); if(this.messages.isEmpty()) return; diff --git a/src/main/java/com/hbm/util/DamageResistanceHandler.java b/src/main/java/com/hbm/util/DamageResistanceHandler.java index fa6c929fe..2e58a5b1c 100644 --- a/src/main/java/com/hbm/util/DamageResistanceHandler.java +++ b/src/main/java/com/hbm/util/DamageResistanceHandler.java @@ -53,21 +53,43 @@ public class DamageResistanceHandler { entityStats.put(EntityCreeper.class, new ResistanceStats().addCategory(CATEGORY_EXPLOSION, 2F, 0.5F)); + itemStats.put(ModItems.jackt, new ResistanceStats() + .addCategory(CATEGORY_PROJECTILE, 5F, 0.5F)); + itemStats.put(ModItems.jackt2, new ResistanceStats() + .addCategory(CATEGORY_PROJECTILE, 5F, 0.5F)); + registerSet(ModItems.steel_helmet, ModItems.steel_plate, ModItems.steel_legs, ModItems.steel_boots, new ResistanceStats()); registerSet(ModItems.titanium_helmet, ModItems.titanium_plate, ModItems.titanium_legs, ModItems.titanium_boots, new ResistanceStats()); registerSet(ModItems.alloy_helmet, ModItems.alloy_plate, ModItems.alloy_legs, ModItems.alloy_boots, new ResistanceStats() .addCategory(CATEGORY_PROJECTILE, 2F, 0.1F)); registerSet(ModItems.cobalt_helmet, ModItems.cobalt_plate, ModItems.cobalt_legs, ModItems.cobalt_boots, new ResistanceStats() .addCategory(CATEGORY_PROJECTILE, 2F, 0.1F)); - registerSet(ModItems.starmetal_helmet, ModItems.starmetal_plate, ModItems.starmetal_legs, ModItems.starmetal_boots, new ResistanceStats()); + registerSet(ModItems.starmetal_helmet, ModItems.starmetal_plate, ModItems.starmetal_legs, ModItems.starmetal_boots, new ResistanceStats() + .addCategory(CATEGORY_PROJECTILE, 3F, 0.25F) + .setOther(1F, 0.1F)); registerSet(ModItems.zirconium_legs, ModItems.zirconium_legs, ModItems.zirconium_legs, ModItems.zirconium_legs, new ResistanceStats() .setOther(0F, 1F)); registerSet(ModItems.dnt_helmet, ModItems.dnt_plate, ModItems.dnt_legs, ModItems.dnt_boots, new ResistanceStats()); - registerSet(ModItems.schrabidium_helmet, ModItems.schrabidium_plate, ModItems.schrabidium_legs, ModItems.schrabidium_boots, new ResistanceStats()); + registerSet(ModItems.cmb_helmet, ModItems.cmb_plate, ModItems.cmb_legs, ModItems.cmb_boots, new ResistanceStats() + .addCategory(CATEGORY_PROJECTILE, 5F, 0.5F) + .setOther(5F, 0.25F)); + registerSet(ModItems.schrabidium_helmet, ModItems.schrabidium_plate, ModItems.schrabidium_legs, ModItems.schrabidium_boots, new ResistanceStats() + .addCategory(CATEGORY_PROJECTILE, 10F, 0.65F) + .setOther(5F, 0.5F)); registerSet(ModItems.robes_helmet, ModItems.robes_plate, ModItems.robes_legs, ModItems.robes_boots, new ResistanceStats()); - - registerSet(ModItems.steamsuit_helmet, ModItems.steamsuit_plate, ModItems.steamsuit_legs, ModItems.steamsuit_boots, new ResistanceStats()); - registerSet(ModItems.dieselsuit_helmet, ModItems.dieselsuit_plate, ModItems.dieselsuit_legs, ModItems.dieselsuit_boots, new ResistanceStats()); + + registerSet(ModItems.security_helmet, ModItems.security_plate, ModItems.security_legs, ModItems.security_boots, new ResistanceStats() + .addCategory(CATEGORY_PROJECTILE, 5F, 0.5F) + .addCategory(CATEGORY_EXPLOSION, 2F, 0.25F)); + registerSet(ModItems.steamsuit_helmet, ModItems.steamsuit_plate, ModItems.steamsuit_legs, ModItems.steamsuit_boots, new ResistanceStats() + .addCategory(CATEGORY_PROJECTILE, 2F, 0.15F) + .addCategory(CATEGORY_FIRE, 0.5F, 0.25F) + .setOther(0F, 0.1F)); + registerSet(ModItems.dieselsuit_helmet, ModItems.dieselsuit_plate, ModItems.dieselsuit_legs, ModItems.dieselsuit_boots, new ResistanceStats() + .addCategory(CATEGORY_PROJECTILE, 1F, 0.15F) + .addCategory(CATEGORY_FIRE, 0.5F, 0.5F) + .addCategory(CATEGORY_EXPLOSION, 2F, 0.15F) + .setOther(0F, 0.1F)); registerSet(ModItems.t45_helmet, ModItems.t45_plate, ModItems.t45_legs, ModItems.t45_boots, new ResistanceStats() .addCategory(CATEGORY_PROJECTILE, 2F, 0.15F) .addCategory(CATEGORY_FIRE, 0.5F, 0.35F) @@ -84,21 +106,24 @@ public class DamageResistanceHandler { .addCategory(CATEGORY_EXPLOSION, 7.5F, 0.25F) .setOther(0F, 0.15F)); registerSet(ModItems.rpa_helmet, ModItems.rpa_plate, ModItems.rpa_legs, ModItems.rpa_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 20F, 0.5F) + .addCategory(CATEGORY_PROJECTILE, 20F, 0.65F) .addCategory(CATEGORY_FIRE, 10F, 0.75F) .addCategory(CATEGORY_EXPLOSION, 15F, 0.25F) .addExact(DamageClass.LASER.name(), 10F, 0.75F) - .setOther(2F, 0.15F)); + .setOther(10F, 0.15F)); ResistanceStats bj = new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 5F, 0.25F) + .addCategory(CATEGORY_PROJECTILE, 5F, 0.5F) .addCategory(CATEGORY_FIRE, 2.5F, 0.5F) .addCategory(CATEGORY_EXPLOSION, 10F, 0.25F) .setOther(2F, 0.15F); registerSet(ModItems.bj_helmet, ModItems.bj_plate, ModItems.bj_legs, ModItems.bj_boots, bj); registerSet(ModItems.bj_helmet, ModItems.bj_plate_jetpack, ModItems.bj_legs, ModItems.bj_boots, bj); - registerSet(ModItems.envsuit_helmet, ModItems.envsuit_plate, ModItems.envsuit_legs, ModItems.envsuit_boots, new ResistanceStats()); + registerSet(ModItems.envsuit_helmet, ModItems.envsuit_plate, ModItems.envsuit_legs, ModItems.envsuit_boots, new ResistanceStats() + .addCategory(CATEGORY_FIRE, 2F, 0.75F) + .addExact(DamageSource.drown.damageType, 0F, 1F) + .setOther(0F, 0.1F)); registerSet(ModItems.hev_helmet, ModItems.hev_plate, ModItems.hev_legs, ModItems.hev_boots, new ResistanceStats() - .addCategory(CATEGORY_PROJECTILE, 2F, 0.15F) + .addCategory(CATEGORY_PROJECTILE, 2F, 0.25F) .addCategory(CATEGORY_FIRE, 0.5F, 0.5F) .addCategory(CATEGORY_EXPLOSION, 5F, 0.25F) .addExact(DamageSource.onFire.damageType, 0F, 1F) @@ -108,10 +133,13 @@ public class DamageResistanceHandler { .addCategory(CATEGORY_FIRE, 5F, 0.5F) .addCategory(CATEGORY_EXPLOSION, 5F, 0.25F) .setOther(2F, 0.25F)); - registerSet(ModItems.fau_helmet, ModItems.fau_plate, ModItems.fau_legs, ModItems.fau_boots, new ResistanceStats()); + registerSet(ModItems.fau_helmet, ModItems.fau_plate, ModItems.fau_legs, ModItems.fau_boots, new ResistanceStats() + .addCategory(CATEGORY_EXPLOSION, 50F, 0.95F) + .addExact(DamageClass.LASER.name(), 25F, 0.95F) + .setOther(100F, 0.99F)); registerSet(ModItems.dns_helmet, ModItems.dns_plate, ModItems.dns_legs, ModItems.dns_boots, new ResistanceStats() - .addCategory(CATEGORY_EXPLOSION, 100F, 0.9F) - .setOther(100F, 100F)); + .addCategory(CATEGORY_EXPLOSION, 100F, 0.99F) + .setOther(100F, 1F)); registerSet(ModItems.trenchmaster_helmet, ModItems.trenchmaster_plate, ModItems.trenchmaster_legs, ModItems.trenchmaster_boots, new ResistanceStats() .addCategory(CATEGORY_PROJECTILE, 5F, 0.5F) .addCategory(CATEGORY_FIRE, 5F, 0.5F) @@ -124,7 +152,8 @@ public class DamageResistanceHandler { registerSet(ModItems.hazmat_helmet_grey, ModItems.hazmat_plate_grey, ModItems.hazmat_legs_grey, ModItems.hazmat_boots_grey, new ResistanceStats()); registerSet(ModItems.liquidator_helmet, ModItems.liquidator_plate, ModItems.liquidator_legs, ModItems.liquidator_boots, new ResistanceStats()); registerSet(ModItems.hazmat_paa_helmet, ModItems.hazmat_paa_plate, ModItems.hazmat_paa_legs, ModItems.hazmat_paa_boots, new ResistanceStats()); - registerSet(ModItems.asbestos_helmet, ModItems.asbestos_plate, ModItems.asbestos_legs, ModItems.asbestos_boots, new ResistanceStats()); + registerSet(ModItems.asbestos_helmet, ModItems.asbestos_plate, ModItems.asbestos_legs, ModItems.asbestos_boots, new ResistanceStats() + .addCategory(CATEGORY_FIRE, 10F, 0.9F)); } public static void registerSet(Item helmet, Item plate, Item legs, Item boots, ResistanceStats stats) { @@ -146,18 +175,45 @@ public class DamageResistanceHandler { } public static void addInfo(ItemStack stack, List desc) { - if(stack == null || stack.getItem() == null || !itemInfoSet.containsKey(stack.getItem())) return; + if(stack == null || stack.getItem() == null) return; - List> sets = itemInfoSet.get(stack.getItem()); - - for(Quartet set : sets) { + if(itemInfoSet.containsKey(stack.getItem())) { + List> sets = itemInfoSet.get(stack.getItem()); - ResistanceStats stats = setStats.get(set); - if(stats == null) continue; + for(Quartet set : sets) { + + ResistanceStats stats = setStats.get(set); + if(stats == null) continue; + + List toAdd = new ArrayList(); + + for(Entry entry : stats.categoryResistances.entrySet()) { + toAdd.add(I18nUtil.resolveKey("damage.category." + entry.getKey()) + ": " + entry.getValue().threshold + "/" + ((int)(entry.getValue().resistance * 100)) + "%"); + } + for(Entry entry : stats.exactResistances.entrySet()) { + toAdd.add(I18nUtil.resolveKey("damage.exact." + entry.getKey()) + ": " + entry.getValue().threshold + "/" + ((int)(entry.getValue().resistance * 100)) + "%"); + } + if(stats.otherResistance != null) toAdd.add(I18nUtil.resolveKey("damage.other") + ": " + stats.otherResistance.threshold + "/" + ((int)(stats.otherResistance.resistance * 100)) + "%"); + + if(!toAdd.isEmpty()) { + desc.add(EnumChatFormatting.DARK_PURPLE + I18nUtil.resolveKey("damage.inset")); + //this sucks ass! + if(set.getW() != null) desc.add(EnumChatFormatting.DARK_PURPLE + " " + new ItemStack(set.getW()).getDisplayName()); + if(set.getX() != null) desc.add(EnumChatFormatting.DARK_PURPLE + " " + new ItemStack(set.getX()).getDisplayName()); + if(set.getY() != null) desc.add(EnumChatFormatting.DARK_PURPLE + " " + new ItemStack(set.getY()).getDisplayName()); + if(set.getZ() != null) desc.add(EnumChatFormatting.DARK_PURPLE + " " + new ItemStack(set.getZ()).getDisplayName()); + desc.addAll(toAdd); + } + + break; //TEMP, only show one set for now + } + } + + if(itemStats.containsKey(stack.getItem())) { + ResistanceStats stats = itemStats.get(stack.getItem()); List toAdd = new ArrayList(); - //TODO: why don't we cache this? for(Entry entry : stats.categoryResistances.entrySet()) { toAdd.add(I18nUtil.resolveKey("damage.category." + entry.getKey()) + ": " + entry.getValue().threshold + "/" + ((int)(entry.getValue().resistance * 100)) + "%"); } @@ -167,16 +223,9 @@ public class DamageResistanceHandler { if(stats.otherResistance != null) toAdd.add(I18nUtil.resolveKey("damage.other") + ": " + stats.otherResistance.threshold + "/" + ((int)(stats.otherResistance.resistance * 100)) + "%"); if(!toAdd.isEmpty()) { - desc.add(EnumChatFormatting.DARK_PURPLE + "Resistances when worn in set:"); - //this sucks ass! - if(set.getW() != null) desc.add(EnumChatFormatting.DARK_PURPLE + " " + new ItemStack(set.getW()).getDisplayName()); - if(set.getX() != null) desc.add(EnumChatFormatting.DARK_PURPLE + " " + new ItemStack(set.getX()).getDisplayName()); - if(set.getY() != null) desc.add(EnumChatFormatting.DARK_PURPLE + " " + new ItemStack(set.getY()).getDisplayName()); - if(set.getZ() != null) desc.add(EnumChatFormatting.DARK_PURPLE + " " + new ItemStack(set.getZ()).getDisplayName()); + desc.add(EnumChatFormatting.DARK_PURPLE + I18nUtil.resolveKey("damage.item")); desc.addAll(toAdd); } - - return; //TEMP, only show one set for now } } diff --git a/src/main/java/com/hbm/world/gen/component/SiloComponent.java b/src/main/java/com/hbm/world/gen/component/SiloComponent.java index 4dd2aaee0..bfee7327c 100644 --- a/src/main/java/com/hbm/world/gen/component/SiloComponent.java +++ b/src/main/java/com/hbm/world/gen/component/SiloComponent.java @@ -81,7 +81,7 @@ public class SiloComponent extends Component { fillWithBlocks(world, box, 24, 25, 13, 26, 25, 18, ModBlocks.asphalt); fillWithBlocks(world, box, 13, 25, 19, 42, 25, 20, ModBlocks.asphalt); fillWithBlocks(world, box, 40, 25, 5, 42, 25, 18, ModBlocks.asphalt); - fillWithBlocks(world, box, 39, 25, 10, 39, 25, 12, ModBlocks.asphalt); + fillWithBlocks(world, box, 39, 25, 10, 39, 25, 12, ModBlocks.asphalt); fillWithMetadataBlocks(world, box, 15, 25, 10, 23, 25, 10, ModBlocks.concrete_colored_ext, 5); fillWithMetadataBlocks(world, box, 15, 25, 11, 15, 25, 17, ModBlocks.concrete_colored_ext, 5); fillWithMetadataBlocks(world, box, 15, 25, 18, 23, 25, 18, ModBlocks.concrete_colored_ext, 5); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index b2e5a8cd3..8c3981528 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -476,6 +476,16 @@ crucible.steelPig=Herstellung - Stahl aus Roheisen crucible.steelWrought=Herstellung - Stahl aus Schmiedeeisen crucible.tcalloy=Herstellung - Technetiumstahl +damage.inset=Resistenz wenn in Set getragen: +damage.item=Resistenz wenn getragen: +damage.category.EXPL=Explosion +damage.category.FIRE=Feuer +damage.category.PROJ=Projektil +damage.exact.drown=Ertrinken +damage.exact.LASER=Laser +damage.exact.onFire=Nachbrennen +damage.other=Andere + death.attack.acid=%1$s fiel in Säure. death.attack.acidPlayer=%1$s wurde von %2$s aufgelöst. death.attack.ams=%1$s wurde in tödlichen Teilchen gebadet, die von der Menschheit erst benannt werden müssen. diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index c2b16bdaa..3e83ef786 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -892,6 +892,16 @@ crucible.steelPig=Steel Production from Pig Iron crucible.steelWrought=Steel Production from Wrought Iron crucible.tcalloy=Technetium Steel Production +damage.inset=Resistances when worn in set: +damage.item=Resistances when worn: +damage.category.EXPL=Explosion +damage.category.FIRE=Fire +damage.category.PROJ=Projectile +damage.exact.drown=Drowning +damage.exact.LASER=Laser +damage.exact.onFire=Afterburn +damage.other=Other + death.attack.acid=%1$s fell into acid. death.attack.acidPlayer=%1$s was dissolved by %2$s. death.attack.ams=%1$s was bathed in deadly particles that have yet to be named by human science. diff --git a/src/main/resources/assets/hbm/sounds.json b/src/main/resources/assets/hbm/sounds.json index 5baf34c5b..7bb46ab65 100644 --- a/src/main/resources/assets/hbm/sounds.json +++ b/src/main/resources/assets/hbm/sounds.json @@ -246,6 +246,9 @@ "weapon.fire.shotgun": {"category": "player", "sounds": ["weapon/fire/shotgun"]}, "weapon.fire.shotgunAlt": {"category": "player", "sounds": ["weapon/fire/shotgunAlt"]}, "weapon.fire.shotgunAuto": {"category": "player", "sounds": ["weapon/fire/shotgunAuto"]}, + "weapon.fire.greaseGun": {"category": "player", "sounds": ["weapon/fire/greaseGun"]}, + "weapon.fire.uzi": {"category": "player", "sounds": ["weapon/fire/uzi"]}, + "weapon.fire.tesla": {"category": "player", "sounds": ["weapon/fire/tesla"]}, "weapon.reload.boltClose": {"category": "player", "sounds": ["weapon/reload/boltClose"]}, "weapon.reload.boltOpen": {"category": "player", "sounds": ["weapon/reload/boltOpen"]}, diff --git a/src/main/resources/assets/hbm/sounds/weapon/fire/greaseGun.ogg b/src/main/resources/assets/hbm/sounds/weapon/fire/greaseGun.ogg new file mode 100644 index 0000000000000000000000000000000000000000..71bad6b354d22c4b17d3b10097873961b9557b8b GIT binary patch literal 42299 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 SFTBUib_~PAG&B$gI7k4!YG`l( literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/sounds/weapon/fire/tesla.ogg b/src/main/resources/assets/hbm/sounds/weapon/fire/tesla.ogg new file mode 100644 index 0000000000000000000000000000000000000000..8c02cb80675e25c7cff1cfa9a60a86f3e837cca6 GIT binary patch literal 31647 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 acs{^B-#7`&x@=M8i`bt&t7JleYySgpb#8S4 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/sounds/weapon/fire/uzi.ogg b/src/main/resources/assets/hbm/sounds/weapon/fire/uzi.ogg new file mode 100644 index 0000000000000000000000000000000000000000..de44d99ab3569783eb08e6085252dac76377a254 GIT binary patch literal 6339 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 l3~UrTI$`VIX_KA7dd_I?RqhjEEy7$QiG`~ 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 LNkvXXu0mjf`gV)8 literal 11441 zcmW-n1ymbN7lwleZII%W;O<&9P_)I1Q{1IUad-C*ch}++DekVt3lw)K?)Gp0oa{+X zvO6<-cjn&bzIVcv6r?fHh|xeG5T>k*gbD}*hw$$JBLly1OdE~@ABc|PvZ`R<@$d6`t;NUbtG5mhH>aQHoC}w49am=P{FX4xi_i9g(WO^?__# zFK+wpD{rRn{!kN|jPd-fkeJf%hO>S96?0CY(OmF<}hW^HpZbUtISO8$#NpmzQ>A_jrui9tXz7~p`^puT@+ilZ*;NfOOU1Oy&la;r z2#$AC@#*HI9>?d>a-meB=LPx;9uE+r$QF1kd%eM=*CI^)muj7<*_EK6bie$>)j+ye zC!8!@#~OuF5j)aqXgV*7x>;p=SNj0|5!WNcayDQ$;+iz?|4#mV8J2^#p zAxrojb7zOAf&+Qww!hu2ue@LRdBY0o3JoMTd||nC*xe?o(0fk1Xms2G_wP3--x|Su z;KV2M`y+?Up%l2d3l2|iqM-GO23JEbp-7XD{VVr;YA1pv#*IG-3FWoZ#?6>M%k%N^ zEYWiGCG8f|w$865DWjf(M8Wt}g_!*+*umm(6@76^ zbVz?BAQ$c=95s>n+*aIhAl|Qk2*VwjEv%U}hWr_{Iq30(BH*wYio~(qX=4A=mdKCu z`%ea%M<0SOE|SAX5GYr?#Oc-Oy9Sq2F4t^0{(G+CXBk7yWy(j4A{+$vB4HFFDNU{Uf7|88Gg5QqgPmgi0110(x)}{qVW$?2`T}Dj<3#oX_)c zct~g?lTTh91~x<{^;_}4{Iu>lpp7$yphWcJpxs}57R_Ok#&1@O%lLtF5iEoj9N?Vo zp9THV)bzV*Rq8G_2dghBM=QKT^v1H0gKE^z3)vafm?rU~P~lK6J-rUHomw8(0H`e4sAP`_~J? z;5sOKapEU>`lOF9lDNdd$H#G7ECQeX*ZTd!=_xf!I;bb+Mmsc;1@?nyru zUBqep8P04L**G!5(~gSKp!G&TW8CO1vxVNai^@>9EUizzeq5h;U@2 zXo5JqB}*7}0yT0F)?cReViU@Em^ckbsWh;ptyF@`%il7w8A1_3TFA9U$rj>_Y2}(o zs0}t!3JE4!-+IVodHhuw)o#e>!)5bwK7PWNr2$%U=&E+c^OK$7O!G@uV$uyU;S5gt z?m^T!fBe3FYJNT>J{}v?weyMG__YIJu8DAmNMeu)CeHGRp{gcHnWs*PCRM0niGv{i zi7`onGpT}k12YjR*IP=kZi(4!lA${9OwrRvDq&3~CS8sq?IT5+oWg_mm~Wlx$e;y$ zw0x;()BsQ6FH7nKS^3U724T$Jg^+2H0lYxBN3cb1%Yh&bU^NU=Ov zc8r8D2fDWT4E_u!l?stAM`kLs%KtTpR~?_7JP!__qW?ii@l~eevtNF$5tmZ(@{)_*{7#i|1jayyI79cc!Pi+VIX#}Rs1B7`u4%7FT;9r+R7xWIU^@q_|25bgaO;4qMo;=fTcrQ0YkQHb6!HkZ5`73vNM*8{u=^8R< z<+clm+V$oW#Z#1dH1YIryyd|&*)%w)na85xY@+sTE~h^4{(%fAZrH@$Sdq_cG7Zz9 zd=xh1UtXR%|BnPAw(QhvYb+P&0JI)Z*pLV`}cj}ap$kT+CYa${bWJF=Tjo1-04}C-4n?l}908(O3 z%7xWtGiHgxMOkdih$kX4Ao_(9%Ked17dN4Nn61j!w4MiaaD<=9mdwb|er~Z4A5jNK-R*Qff%n+>Jq^4#1w!$AQZJ=s!bRh0rVXeNCmA?%Ez4{*0T zbtj)e#l^@Lc6M1SdfDVg8$C!Mzlry&AU_oHmGU1y8iQ0^K{6NNtl?)eil1~Q5@+Xl z2G4)~Ue@_AetS2#`fBlzt!w)+laREn@V@hOJ+Fm8ybc50L#M4>f&er1;80^xr0y~A zSD|G=;!(482{&=~bo_LGpbyjfG*@hqUUZ^%l5G^^dEBA+{CP0y>c@{QZ&cs#K$=`> zDrBk4hiQYteTZbB56S)eCEu1RBudoT*X?YF5FZjsX8Os0Gz3Vj-%l__9&96+i8{y=lJ41LnO)s{V!pnBY-ruXn zhif!DH{S7jedYhpnjmt1bc*d%_i+D(Q&6$;JzRr9a;w1sOvv%UX09<~Z_*eYf1;^v z@d5Le{ZDDZX0-pBw1@X6{14iBXqi5SVj=w%51#uAtj`IfJM2z7R%h4Z??s_WA1M=t zVQOmI-x>rb%*R{utd`X>97M$m${EdwnH>xmkoP9CHEgp*W8qA(!KJn#+~(=JI&Tp- z=%iywzu%J{&99w&knib^pIl#Ay5x7g@tSh3Ei5wiC|sZmYc{qbs#vps!*xiTDd?&9 z-u0%ftP?5&EJGxxV|$m?ysU2ZkW$P7R`|6)cJ&|WvB5DaSwLTG`yPuu^*_T14QLTJ zAF084#>?`lKM)y3-^!bw=rT#>CR4)aLM*tM@f96jXn9{G8y;=N~IU(kbGN&F;J!boxJHP@@q~nU?ucnJ2X#M#%#`3~EKUb4kea;f_ugCqlov(Nx z0I-@{3`!ymn-yw4!E|Qy`n)Pv9{u){9eo0W{d3y=+ z6HH!>xn27%Y@&s}wdAl;d+hQTy9%_(%jkzVQ=sAzaSxEw9qJQkzkRu7!;9*BxkXOD7 zBGAp}O3#gpqFA^e_da^!3Q+^Svm?omytVTO;}+J|gY}a_B|>*o2*<&D`YMg0PtLrY zoKe$?1LqgjdX+Y=j<)sZXkQ>#zS7~!S%+rD1+}$`Bfk96v=~V0NmiNj;h+!~NnM0B zcB?0|2{A1Rn1nu^C0Q8fO)Z$5)w{G@PM6AX`A3dU@iw?nnEX+ z9#1}wG;7Ow^@7hYyH!i+LtE2IldPktjqlx&9CQEk@87?zt)3_wwu!E8b9w*+Ha@aw zAKUgbDY_#oqxw%DPANX!G2|AEYk3Q})UYgCo`v+*V%p|fh_6lww6CN}ONC6&&sQg0y~7bQo+E9XE}#D=-O5#^^)Sa1mHOo$3CP zT^gUKTP%Jyu;Fal2^WAHG_6=pLi2{<@IcT_W}1!j$9nR83=$|zD_g8x0D>x8n-)tc zBj$FmQB9ov=~NRDR8Jb1|2J>Qd~3w49?09-)BmyogQP~3SmD4$#X4mKyrhA_I=qKR z3zG;(iKF)jB|K%-B}Snm^zX`nO(%Oo4EPk|B;6{EOpve%4fNhDp7)S3ENtE{p54iH zvg&Dkp$`xa9PXyDJHH>MW@rB$S@SyA$c^EIgr~Cq_*CZfR)V7RNk4m251GO~U{RR; zkd{+X!AUSs8<~J z55IhFzO1)CpICn6-m!jtu+yw9Z>oD;?(`je>QiV%eLZd*2x2DW@o_-R^FjPh4{{ki zm^_gnt!P2Z2c^D;93g#!;=~)@Zr@tpwUn0=I}Gi7tLp0>69_~12cB^cnm5%f-z+-> z38fStMVauJG#rNDgsbPh(~wU3{_EEqqw@02cG=T|qw43*^17l1BtR<2tGC8dxXBUM zSuPn{sMD#%0NL+l`I@<}nupp}6#bTfow>ui^%Bf@F8|J&R5NUlq93%87vpkE&gHM_ z!mK@|osF1IxAov`@h8zr=@klppw1X?v2~L|SR7kdbSa4}yl6Qa^22uc%Q*Glu|y$W zq~tPz5S9tTM>nLY=!u)loz+m$gwpYh6s{63$L^V?+R_AK{t&$ECm9`RMg z0DFIZU8KJ`;P0(n)y6vos4JZ8+WNKta#wXIb*5NRZ4Zuk*c)lhBCu4l5R#C6=bnXD zAS&A&XEr!5%e&pA?cqJIIB$AtKE0`JHUz&v|Ngy;q?8_w5*HUYX42Hmls|egH3ClG zm;($X(L-1F=oswn*+xdPgs46LybY+UC42H-S#6=s!A+NXp^^Yt=LJ>bHm@!$ZGj^C86iqPqx&8W-=meMBwjz)&#|;g1mUZggT6fZFt${Fw zhR}qQ-=m6Q5#=vU-`O2vC!y=F9N~T|8X2FHg_*d|Rjo7z3j$Yj z(OIuI%9%X5hQEt=1#@7IamvLU6kpcC!P|h&S>MK9fH|9w`8l78jLX~rkmo)QA9&sh zN0|>I4BK*xuc_@f=OKL1DBoM&O73Z_qKoL@i^M+876-3wRk;Bn&@Pii%pXt|xVXCxA7KhRk=TM-udOlZ%_I!g zZ>6VT@Yi9CJ)tz%xLUsr8x*!V_fZuItTsY^?lVFJz6_&>Qo0AoF3UR{tN9^qN8JNvKHmtHaDYQ-5Qh$4gW5pN_$d%m70J_ntR~^pTY>BfwU8nCJblQt8om=2V zgCmDpP%%f1cxhCg(Za*}NSDpYqwPm}kQ_PO&Ob_muQEk0{iPuJHCRTbL^84Th)J(@ z;ia4samN4yE_>f7(h^o;U!Vgxs-cAviO+V`U~ASl&k2#g?R;!~?d431I-pKzxG;T6 zD2_L;*D|Ts^196M6~5kHK!=-FI-`3%;MyInb^Ws#*jF@~%I9lKBVpM9i^|q6QHe}K zn2rK8N>xT(9z`Fe?MtLW6(mo%eGNSBID}ed_Ik7{@fxWVhan9@!S_E44HqS7kQ;9g?!BNbh;U{nM5++Ha^@TI+60|#wJpPTj!8NpZ3HVAG+FtCyFRYhUEiao*jg%b#_QrT2>+K7=m0mQ7s336Eq3UnWRWl zjUNrJPtGZ@?J*iC{SFoV0v52-hbJYo_xchyFQ&vDM!20vt5!N}56E>n$FyP5t3zor zd6EYk;_D`eCWLpZJdmRg_s0r;BS(T|ZnOHT!tOD?V+P9X=d#LI_y& zhWav}q=>)gN{jOTlk&#Kw`oDlbbL$S)@W}4E^7Fs`GU^g&G>qaER%`33W zNSZymBQzc}HYhh+WV#-dLc!gV!!K%!4*z#BAqPebz}0p6*GZAf%%e*TeUcj?6(w3g z^r}{TY~G~Zs?Z}OBg1@7UnYMMu(nO}_$YF|WySOrNRxQ<=@fcrsR$63YKW1^2KM{- zWA0<~kGMEFd7L!ykU%!0-WgLftHB)|B43*AwH#M)6<_?aM7%?Ez%f4P(~SR!#_u8X zoW9ZMOdM2C1*9A!Ab@)xJpR<+uSKCT4Sv;3NU;T=%VxbN*Gy+GTA1+J#40&&I{r6v zsvK?LrTHks;O1R`hrhZZEphrkaLoGqwYjDvlHJL))C!r3ZJYMne(L+)nOeZ3sE$`{ z;{kPqQn){ogp)A^B_$+FHoTj}?sSc-h}Ds$h|}%Rd_xlxeth)y5F{;R31;_=`xN+V zNkk&aFe`CY%YIlVZ@{cI4J3x&Yd?>b4qq_xg!)>UeT9b1W z)P}1Mt=1yancvVQ3L7xMlo$eb$6~-8X#Q}EH)~aP$(LEFfQJqMl?jk3T|VmpxaAxb zmPyY-H+?h6C;Hy8)1Wo$8ew0^V$o_l34j-mJBk2 z1y=Z}T%+~3L}YsZ1PDD`)gBW7#gcDXO@)P5lfEiv%o~l=k!&tX0tJx6?DJ#(e4W5S zGN8&cGPULJk6!#3)X=A?qtkluh0rMdTLH9^a9=v{o})*O76_92ODkU2NehMbN+uz$ za8XmC6_vCj=f5QP57QAqYDbI_nw3TC1YQlaR3V|G#+-%N2!Es<|6|@X(WmqF=IcPH z)|~6ze=yQ_c5|D(pxqp*D{R8;`TOh4Gl=hj@1{fTe&QbsyBjN-7H-_ne6BUF_w4;j z&>e0s3XngujF@J#K~;eZO)y~?=6ZMNI|KE%uJzSqwpoFO{J8yBT2+fKK|EO*8WH{Z z1IK(vloH+Hx3OD&kArZa%iUExE#bboQidDuoDNnHDq&U zVpwFegGjeAJxfg~@^iKN#(8Tbl{K~44|o$t(w1PpAGOmQV;QcvfcV~Tl!Yjq7vZl~ zIwni_^kHwzt~`6l8`&_Id|^F>J=IzI3LD`&I3UBDzfStCRXAnXU_?G72^zNQpFEEr6&(X) zybNOc_M=|oFUAEqcZXBXzgez(?eKLt)@k_&;5$^XAYNDje?q6j?&c)dsR-{WD`3}3 z-y9q=fG0-u(&+QN3(zl6Fkqx~*iAhD;&$EWhXyg`fcQQ&(_RH}jA_u`otaTR>Fq@1 zeD)Q7cKvHQXRH-oNf>4y=?Biv#fknWiQ1FHvo}y@S)itBA?b0{!S439OfwPR<8iEe zTZ@v0E99e6wzaM|;l{JmmD0l#1nsncB5FdsTk}Ep$5!9$I@cl1bb0^0pB`dG)b=o9 z9g*XXY_^Bnlq33TXxf^ijL8LLFg!G4)bwd_?n){Ue(X>W$}8IdEd-Zz^Yv|FL+%Iq zY8FRLj+mcF3h@pxa(oh-Tydtk%I%!&N~}ls3=%`qANV0#5pr8N5_UdRPS~5^aIvgS zr@x^!goMpgQ@TO?Fe9asAt74-QbkH^1kn%{+>0p-+%mPc|6}ErHBA6_ve>lg(k9#Ci}h8aCHZ6eNcc0fC_Kh=2sU@#lo&wW$aEkuQ^I zC+;(dMnuX#GP=B6%^2tSFIUro4W4)t2D6&aF2;DY>YHbyKm5HO9_L=}OUbHRooa() zL>)c^dQ!~u-=6u42wHhoX@440y0nNp7s)t;TA=PWa zsm5Kw27A7m=pR@XQcgTEaW!@|?CjWD-Oecm1O*+=HzmC`(Dl1EdP8fy?k_&xFR#5c zUig@s(|LG$)_UIB+AKF>wz{4Ib-G6PK5(Pgv6-t{5%WqG4?F*+(;RO!47(Q)zd2xvLq^tPT0_F}H>ku(f+3 zf4{t^uy=tkW;6YO7XqgDfLAE7H);+j+^3g=LMVhE`^7P3S zLWUJ<5c0o;$Bl&hLRiYps{2gX-rinOU!QRP?P$Kzra$6sx{6n4Q`3T4FIK_T1(8W< zlO`(wGyj4xlg9PO%S~tPdKaGMAMRAZVQiYQK#+r<6)W!KZv1Jw>#)p;2KhlM-%f%_ zy`t30MwyS)`(TG_NXf3Yq9GpX9=Oz567qzPKtwE;`RSsK7%=oZm&pN>^G zx8GhWb($EvW>pXBFq?LIfBJvpE1q|U+)thD%5ee9eVslXR&@K{uXyL_!`i}ojKjp<&=^%j3fr)sNSiKnd_QKMODk9#jG*Zo4?ayxuTmli z&n^YO_S>FF%@(F}bc6l?pmXkDr3Rcx(-A(OkulFXn%EzoXGBSt_dux3q z+9&gunh+DMiDcZD>}3opCBUwA(pvlX5b6dlt^qM1Ffb**G=jyeh$@#<4XpD+VgqVu zudW{HuZvLU5kYdYw=1MR(F37El!{hR@5weSdq)BMudRb@cB^Z0gqm6?5AhLssw!Qwcbru;fETTAb7e^IK6n7&FUAooA0HuJ3Kw~V zD-5nq3hyvW7bWjFJv~g|rU%+?dbS_=*|3AIQ(aW=rKYr`kBUwgDUBI{YV+7B@$V@9 zhB$k*E71hG#~To8KsFE~(#Av(VrH&Pmil4Twmnd9K103Jx{t$1!1f=gt>H(2ppV~W zieBkS;(=N64_LT_gwq5CJw00F_XJB(K1nN*28n6E^LBXS`5;05@7VH9M;5wX!tYA{SZzo`^Pw3*Dr}fjP^15F9BJt zE{3PNdr_anASP$o%Sm;#H;6PC9hAJ{2_ZwR$Z}6QufOcf>ADtCE&lKcs(a;_vqz*w zUDM;_y#CVAjAIi$I&3y1)P&R}DSO_oIz^jcGh#l(<+|m7*lo@pZm*WF*|@N$$iEXH zDC2p(uEVLkq3m+-*pghG+EO8YMt&Cz<>z2`!yys5Hk|4*go2EWc?AaK3^v(2^0ND& z3dv%^i5<`H#I%tg299Pa{iedMiwJ;_mn?%3@D|>W8G(oyp}I5Dj?do$Ns~vrYtg*x z6~#E+_@oa+Yh*O1TgoR^O2+{mg|Uuyg()#36yO;Va;sA*cNId;QuF{~*%YaPAmRj` z1%sfYP{z?N>t3uea|5IQbhMG4?5L#4os4p^;j^Hr&IC}Ww^2_(6o-RTRy2apjlx1K z{Pm|1={mDcW%+@r5*l8Q^E_9{#B&c43WdqwFz%t&ls$+%m$-hPc+_aBnmsNMQ!bzQ z{z~GPZ})Va7_@Cph4l@iCq@mw;LPPXb%blNf$2ghfc~T5M)FyQYv^^H3I+&Q?CuI} zE0XbdECtp#9Ke+`Z1=H=fmJXTM+b;P)pm6EDD6^}c~+nX%d4@5Q@$elq7`@BSqrTd zPu$YZ#RhY{33MHL5DAV_4?7j7s|9<(7G<+TF^nj7oG>VJpf1YM<838UQ?mc`?c3Ru zLD0Ax9B9t6S6v)LsDt8hXHw>YUU(>AdiY{?{sCf9`tA8MP0c%ImUdIfVyR@oInsjz ziek?G4C&=n&Y!uq5Z2|Ml)b@-j_N|y$gW`))znkk627wwo#xow@&`5!!s!ZeNG;cK}(He!HSQ<|@?9^Uf$Fh!is%!Gm8Yn+}NX&O4jOKX2 z`XJ9;_rT(A`Sya#dR9RaM$U;h`IQ1(+a(9Sf`_Pu)v6a-gyAGATyh_GOiro9$)5@N zbX7{`HenbTCk0(2Ax5V`hW>L@Lg(a`U>G50M&KG_4uq1)j#aGLaw~Sv&^<7UfLh-s zj{R8x_Sfj4Os7EG2+;eGg}tuPew+VUe<0-)z-xCK+|sOiz0JVvt$(nHTJmuzsx#Ht zX?o*@CE=|A$391YjU@ph76av4UP&!SRiSJRRAFFYaVFdz;@47mdjIkTe1~BjY5)eN za>y?s#oi4c-XfWOM`(niWp-#++Cr;b{S+es(hJTS!N#fMU)`4CU-V9!&^b)SR4Tw0 zdEC}R3b*x4lJKXrn)1rL{QP0k`YQ-s50-XF1pYIxN2d-)^7Ty1ie7F+og#Ie8^pdW zJ|JN002`5WEpsrQ?Pwc({j<#o-ycDZ`|%G=7*}P(iauYN{0>W6-{v=f5`$seeW5A; z8sWi*H;k3Tl4KyxM>I`M7Mo&UUGs<)LFfVo6|&muB(K&yb=V*K)AfM(=8m9AHR+>Hhq<5k)lN2d|j#FvtIGI^N~7DfLN4Wqbdd{i4F;LInqjZ7+0X{|6o5=nA;9@>!a?16BzfKI#g=%Ku!Es*m#=UjT(#Tocj{EY Q9%PWLq=H11xIw`G060LlYybcN