From 96a7058f385b7958e312730540cdeaddfd1be450 Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 24 Apr 2025 22:26:58 +0200 Subject: [PATCH] pew pew --- changelog | 2 + .../java/com/hbm/crafting/WeaponRecipes.java | 1 + .../inventory/recipes/PedestalRecipes.java | 5 ++ src/main/java/com/hbm/items/ModItems.java | 4 ++ .../sedna/factory/GunFactoryClient.java | 6 ++ .../weapon/sedna/factory/LegoClient.java | 3 + .../weapon/sedna/factory/Orchestras.java | 12 ++++ .../weapon/sedna/factory/XFactoryEnergy.java | 63 +++++++++++++++--- .../java/com/hbm/main/ResourceManager.java | 1 + .../weapon/sedna/ItemRenderLaserPistol.java | 62 ++++++++++++++++- .../item/weapon/sedna/ItemRenderLasrifle.java | 9 +++ .../weapon/sedna/ItemRenderWeaponBase.java | 35 +++++++++- src/main/resources/assets/hbm/lang/de_DE.lang | 3 + src/main/resources/assets/hbm/lang/en_US.lang | 3 + src/main/resources/assets/hbm/sounds.json | 1 + .../hbm/sounds/weapon/fire/laserPistol.ogg | Bin 0 -> 18396 bytes .../textures/models/weapons/laser_flash.png | Bin 0 -> 11457 bytes .../weapons/laser_pistol_morning_glory.png | Bin 0 -> 13127 bytes 18 files changed, 195 insertions(+), 15 deletions(-) create mode 100644 src/main/resources/assets/hbm/sounds/weapon/fire/laserPistol.ogg create mode 100644 src/main/resources/assets/hbm/textures/models/weapons/laser_flash.png create mode 100644 src/main/resources/assets/hbm/textures/models/weapons/laser_pistol_morning_glory.png diff --git a/changelog b/changelog index 4b0a875c9..2986d3d8f 100644 --- a/changelog +++ b/changelog @@ -1,5 +1,7 @@ ## Added * Laser pistol + * Saturnite-tier pistol using capacitors + * Also has variants ## Changed * Trenchmaster armor now has the fast reload and more ammo traits again diff --git a/src/main/java/com/hbm/crafting/WeaponRecipes.java b/src/main/java/com/hbm/crafting/WeaponRecipes.java index 3c5f95eae..d299065d4 100644 --- a/src/main/java/com/hbm/crafting/WeaponRecipes.java +++ b/src/main/java/com/hbm/crafting/WeaponRecipes.java @@ -87,6 +87,7 @@ public class WeaponRecipes { CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_missile_launcher, 1), new Object[] { " CM", "BBB", "G ", 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'M', WEAPONSTEEL.mechanism(), 'B', ANY_RESISTANTALLOY.heavyBarrel(), 'G', ANY_PLASTIC.grip() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_tesla_cannon, 1), new Object[] { "CCC", "BRB", "MGE", 'C', ModItems.coil_advanced_alloy, 'B', ANY_RESISTANTALLOY.heavyBarrel(), 'R', ANY_RESISTANTALLOY.heavyReceiver(), 'M', WEAPONSTEEL.mechanism(), 'G', ANY_PLASTIC.grip(), 'E', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED) }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_laser_pistol, 1), new Object[] { "CRM", "GG ", 'C', ModItems.crystal_redstone, 'R', BIGMT.lightReceiver(), 'M', BIGMT.mechanism(), 'G', ANY_HARDPLASTIC.grip() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_laser_pistol_pew_pew, 1), new Object[] { " M ", "MPM", " M ", 'M', BIGMT.mechanism(), 'P', ModItems.gun_laser_pistol }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_stg77, 1), new Object[] { " D ", "BRS", "GGM", 'D', DictFrame.fromOne(ModItems.weapon_mod_special, EnumModSpecial.SCOPE), 'B', BIGMT.lightBarrel(), 'R', BIGMT.lightReceiver(), 'S', ANY_HARDPLASTIC.stock(), 'G', ANY_HARDPLASTIC.grip(), 'M', BIGMT.mechanism() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_fatman, 1), new Object[] { "PPP", "BSR", "G M", 'P', BIGMT.plate(), 'B', BIGMT.heavyBarrel(), 'S', BIGMT.shell(), 'R', BIGMT.heavyReceiver(), 'G', ANY_HARDPLASTIC.grip(), 'M', BIGMT.mechanism() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_tau, 1), new Object[] { " RD", "CTT", "GMS", 'D', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BISMOID), 'C', CU.pipe(), 'T', ModItems.coil_advanced_torus, 'G', ANY_HARDPLASTIC.grip(), 'R', BIGMT.lightReceiver(), 'M', BIGMT.mechanism(), 'S', ANY_HARDPLASTIC.stock() }); diff --git a/src/main/java/com/hbm/inventory/recipes/PedestalRecipes.java b/src/main/java/com/hbm/inventory/recipes/PedestalRecipes.java index a5bbe99b1..11234efc9 100644 --- a/src/main/java/com/hbm/inventory/recipes/PedestalRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/PedestalRecipes.java @@ -72,6 +72,11 @@ public class PedestalRecipes extends SerializableRecipe { null, new ComparableStack(ModItems.powder_magic, 4), null) .extra(PedestalExtraCondition.FULL_MOON)); + register(new PedestalRecipe(new ItemStack(ModItems.gun_laser_pistol_morning_glory), + null, new ComparableStack(ModItems.morning_glory, 1), null, + new ComparableStack(ModItems.item_secret, 2, EnumSecretType.SELENIUM_STEEL), new ComparableStack(ModItems.gun_laser_pistol), new ComparableStack(ModItems.item_secret, 2, EnumSecretType.SELENIUM_STEEL), + null, new OreDictStack(STAR.ingot(), 4), null)); + register(new PedestalRecipe(new ItemStack(ModItems.gun_folly), new ComparableStack(ModItems.item_secret, 4, EnumSecretType.FOLLY), new ComparableStack(ModItems.item_secret, 2, EnumSecretType.CONTROLLER), new ComparableStack(ModItems.item_secret, 4, EnumSecretType.FOLLY), new OreDictStack(BSCCO.ingot(), 16), new OreDictStack(STAR.block(), 64), new OreDictStack(BSCCO.ingot(), 16), diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index be231222b..8c9c58d18 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1476,6 +1476,8 @@ public class ModItems { public static Item gun_missile_launcher; public static Item gun_tesla_cannon; public static Item gun_laser_pistol; + public static Item gun_laser_pistol_pew_pew; + public static Item gun_laser_pistol_morning_glory; public static Item gun_stg77; public static Item gun_tau; public static Item gun_fatman; @@ -6416,6 +6418,8 @@ public class ModItems { GameRegistry.registerItem(gun_missile_launcher, gun_missile_launcher.getUnlocalizedName()); GameRegistry.registerItem(gun_tesla_cannon, gun_tesla_cannon.getUnlocalizedName()); GameRegistry.registerItem(gun_laser_pistol, gun_laser_pistol.getUnlocalizedName()); + GameRegistry.registerItem(gun_laser_pistol_pew_pew, gun_laser_pistol_pew_pew.getUnlocalizedName()); + GameRegistry.registerItem(gun_laser_pistol_morning_glory, gun_laser_pistol_morning_glory.getUnlocalizedName()); GameRegistry.registerItem(gun_stg77, gun_stg77.getUnlocalizedName()); GameRegistry.registerItem(gun_tau, gun_tau.getUnlocalizedName()); GameRegistry.registerItem(gun_fatman, gun_fatman.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java index c65be16e2..0eb91cbe3 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java @@ -78,6 +78,8 @@ public class GunFactoryClient { MinecraftForgeClient.registerItemRenderer(ModItems.gun_missile_launcher, new ItemRenderMissileLauncher()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_tesla_cannon, new ItemRenderTeslaCannon()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_laser_pistol, new ItemRenderLaserPistol(ResourceManager.laser_pistol_tex)); + MinecraftForgeClient.registerItemRenderer(ModItems.gun_laser_pistol_pew_pew, new ItemRenderLaserPistol(ResourceManager.laser_pistol_pew_pew_tex)); + MinecraftForgeClient.registerItemRenderer(ModItems.gun_laser_pistol_morning_glory, new ItemRenderLaserPistol(ResourceManager.laser_pistol_morning_glory_tex)); MinecraftForgeClient.registerItemRenderer(ModItems.gun_stg77, new ItemRenderSTG77()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_tau, new ItemRenderTau()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_fatman, new ItemRenderFatMan()); @@ -200,6 +202,7 @@ public class GunFactoryClient { setRendererBulkBeam(LegoClient.RENDER_TAU_CHARGE, tau_uranium_charge); setRendererBulkBeam(LegoClient.RENDER_LASER_RED, energy_las, energy_las_overcharge, energy_las_ir); setRendererBulkBeam(LegoClient.RENDER_LASER_PURPLE, energy_lacunae, energy_lacunae_overcharge, energy_lacunae_ir); + setRendererBulkBeam(LegoClient.RENDER_LASER_EMERALD, energy_emerald, energy_emerald_overcharge, energy_emerald_ir); setRendererBulk(LegoClient.RENDER_AP_BULLET, coil_tungsten, coil_ferrouranium); @@ -247,6 +250,9 @@ public class GunFactoryClient { ((ItemGunBaseNT) ModItems.gun_minigun_lacunae) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_missile_launcher) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_tesla_cannon) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); + ((ItemGunBaseNT) ModItems.gun_laser_pistol) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); + ((ItemGunBaseNT) ModItems.gun_laser_pistol_pew_pew) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); + ((ItemGunBaseNT) ModItems.gun_laser_pistol_morning_glory) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_stg77) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_tau) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_fatman) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java b/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java index 01a06960c..cbc73d0cd 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/LegoClient.java @@ -347,6 +347,9 @@ public class LegoClient { public static BiConsumer RENDER_LASER_RED = (bullet, interp) -> { renderStandardLaser(bullet, interp, 0x80, 0x15, 0x15); }; + public static BiConsumer RENDER_LASER_EMERALD = (bullet, interp) -> { + renderStandardLaser(bullet, interp, 0x15, 0x80, 0x15); + }; public static BiConsumer RENDER_LASER_CYAN = (bullet, interp) -> { renderStandardLaser(bullet, interp, 0x15, 0x15, 0x80); }; diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java index 729d08ec7..eafbd1ad2 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java @@ -984,7 +984,19 @@ public class Orchestras { if(entity.worldObj.isRemote) return; AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); + + if(type == AnimType.RELOAD) { + if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 1F); + if(timer == 10) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallRemove", 1F, 1.25F); + if(timer == 34) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magSmallInsert", 1F, 1.25F); + if(timer == 40) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1.25F); + } + if(type == AnimType.JAMMED) { + if(timer == 10) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverCock", 1F, 1F); + if(timer == 15) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1.25F); + if(timer == 30) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.impact", 0.25F, 1.5F); + } }; public static BiConsumer ORCHESTRA_STG77 = (stack, ctx) -> { 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 b81318b02..5ec5df8c3 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 @@ -53,6 +53,9 @@ public class XFactoryEnergy { public static BulletConfig energy_las; public static BulletConfig energy_las_overcharge; public static BulletConfig energy_las_ir; + public static BulletConfig energy_emerald; + public static BulletConfig energy_emerald_overcharge; + public static BulletConfig energy_emerald_ir; public static BiConsumer LAMBDA_LIGHTNING_HIT = (beam, mop) -> { @@ -131,8 +134,12 @@ public class XFactoryEnergy { energy_las_overcharge = new BulletConfig().setItem(EnumAmmo.CAPACITOR_OVERCHARGE).setCasing(new ItemStack(ModItems.ingot_polymer, 2), 4).setupDamageClass(DamageClass.LASER).setBeam().setSpread(0.0F).setLife(5).setRenderRotations(false).setDoesPenetrate(true).setOnBeamImpact(BulletConfig.LAMBDA_STANDARD_BEAM_HIT); energy_las_ir = new BulletConfig().setItem(EnumAmmo.CAPACITOR_IR).setCasing(new ItemStack(ModItems.ingot_polymer, 2), 4).setupDamageClass(DamageClass.FIRE).setBeam().setSpread(0.0F).setLife(5).setRenderRotations(false).setOnBeamImpact(LAMBDA_IR_HIT); + energy_emerald = energy_las.clone().setArmorPiercing(0.5F).setThresholdNegation(5F); + energy_emerald_overcharge = energy_las_overcharge.clone().setArmorPiercing(0.5F).setThresholdNegation(5F); + energy_emerald_ir = energy_las_ir.clone().setArmorPiercing(0.5F).setThresholdNegation(5F); + ModItems.gun_tesla_cannon = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() - .dura(2_000).draw(10).inspect(33).crosshair(Crosshair.CIRCLE) + .dura(1_000).draw(10).inspect(33).crosshair(Crosshair.CIRCLE) .rec(new Receiver(0) .dmg(35F).delay(20).spreadHipfire(1.5F).reload(44).jam(19).sound("hbm:weapon.fire.tesla", 1.0F, 1.0F) .mag(new MagazineBelt().addConfigs(energy_tesla, energy_tesla_overcharge)) @@ -143,15 +150,35 @@ public class XFactoryEnergy { ).setUnlocalizedName("gun_tesla_cannon"); ModItems.gun_laser_pistol = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() - .dura(2_000).draw(10).inspect(26).crosshair(Crosshair.CIRCLE) + .dura(500).draw(10).inspect(26).crosshair(Crosshair.CIRCLE) .rec(new Receiver(0) - .dmg(50F).delay(8).spread(1F).spreadHipfire(2.5F).reload(44).jam(36).sound("hbm:weapon.fire.laser", 1.0F, 1.0F) + .dmg(25F).delay(5).spread(1F).spreadHipfire(1F).reload(45).jam(37).sound("hbm:weapon.fire.laserPistol", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 30).addConfigs(energy_las, energy_las_overcharge, energy_las_ir)) .offset(0.75, -0.0625 * 1.5, -0.1875) .setupStandardFire().recoil(LAMBDA_RECOIL_ENERGY)) .setupStandardConfiguration() .anim(LAMBDA_LASER_PISTOL).orchestra(Orchestras.ORCHESTRA_LASER_PISTOL) ).setUnlocalizedName("gun_laser_pistol"); + ModItems.gun_laser_pistol_pew_pew = new ItemGunBaseNT(WeaponQuality.B_SIDE, new GunConfig() + .dura(500).draw(10).inspect(26).crosshair(Crosshair.CIRCLE) + .rec(new Receiver(0) + .dmg(20F).rounds(5).delay(10).spread(0.25F).spreadHipfire(1F).reload(45).jam(37).sound("hbm:weapon.fire.laserPistol", 1.0F, 0.8F) + .mag(new MagazineFullReload(0, 10).addConfigs(energy_las, energy_las_overcharge, energy_las_ir)) + .offset(0.75, -0.0625 * 1.5, -0.1875) + .setupStandardFire().recoil(LAMBDA_RECOIL_ENERGY)) + .setupStandardConfiguration() + .anim(LAMBDA_LASER_PISTOL).orchestra(Orchestras.ORCHESTRA_LASER_PISTOL) + ).setUnlocalizedName("gun_laser_pistol_pew_pew"); + ModItems.gun_laser_pistol_morning_glory = new ItemGunBaseNT(WeaponQuality.LEGENDARY, new GunConfig() + .dura(1_500).draw(10).inspect(26).crosshair(Crosshair.CIRCLE) + .rec(new Receiver(0) + .dmg(20F).delay(7).spread(0F).spreadHipfire(0.5F).reload(45).jam(37).sound("hbm:weapon.fire.laserPistol", 1.0F, 1.1F) + .mag(new MagazineFullReload(0, 20).addConfigs(energy_emerald, energy_emerald_overcharge, energy_emerald_ir)) + .offset(0.75, -0.0625 * 1.5, -0.1875) + .setupStandardFire().recoil(LAMBDA_RECOIL_ENERGY)) + .setupStandardConfiguration() + .anim(LAMBDA_LASER_PISTOL).orchestra(Orchestras.ORCHESTRA_LASER_PISTOL) + ).setUnlocalizedName("gun_laser_pistol_morning_glory"); ModItems.gun_lasrifle = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(2_000).draw(10).inspect(26).crosshair(Crosshair.CIRCLE).scopeTexture(scope_luna) @@ -187,18 +214,32 @@ public class XFactoryEnergy { }; @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_LASER_PISTOL = (stack, type) -> { - return null; - }; - - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_LASRIFLE = (stack, type) -> { - int amount = ((ItemGunBaseNT) stack.getItem()).getConfig(stack, 0).getReceivers(stack)[0].getMagazine(stack).getAmount(stack, MainRegistry.proxy.me().inventory); switch(type) { case EQUIP: return new BusAnimation() .addBus("EQUIP", new BusAnimationSequence().addPos(60, 0, 0, 0).addPos(0, 0, 0, 500, IType.SIN_DOWN)); case CYCLE: return new BusAnimation() - .addBus("RECOIL", new BusAnimationSequence().addPos(0, 0, -0.5, 50, IType.SIN_DOWN).addPos(0, 0, 0, 150, IType.SIN_FULL)) - .addBus("CYCLE", new BusAnimationSequence().addPos(0, 0, 0, 150).addPos(0, 0, 22.5, 350)) - .addBus("COUNT", new BusAnimationSequence().addPos(amount, 0, 0, 0)); + .addBus("RECOIL", new BusAnimationSequence().addPos(0, 0, -0.5, 50, IType.SIN_DOWN).addPos(0, 0, 0, 150, IType.SIN_FULL)); + case RELOAD: return new BusAnimation() + .addBus("LATCH", new BusAnimationSequence().addPos(0, -20, 0, 100).hold(1900).addPos(0, 0, 0, 100)) + .addBus("LIFT", new BusAnimationSequence().hold(100).addPos(-45, 0, 0, 250, IType.SIN_FULL).hold(500).addPos(0, 0, 0, 500, IType.SIN_FULL)) + .addBus("JOLT", new BusAnimationSequence().hold(350).addPos(0, 0, 0.5, 100, IType.SIN_FULL).addPos(0, 0, -1.5, 100, IType.SIN_UP).addPos(0, 0, 0, 150, IType.SIN_FULL).holdUntil(2100).addPos(-0.0625, 0, 0, 50, IType.SIN_UP).addPos(0, 0, 0, 100, IType.SIN_FULL)) + .addBus("BATTERY", new BusAnimationSequence().hold(550).addPos(0, 0, 5, 250).hold(550).setPos(0, -2, -2).addPos(0, 0, -2, 250, IType.SIN_FULL).addPos(0, 0, 0, 250, IType.SIN_UP)); + case JAMMED: return new BusAnimation() + .addBus("LATCH", new BusAnimationSequence().hold(500).addPos(0, -20, 0, 100).hold(250).addPos(0, 0, 0, 100)) + .addBus("JOLT", new BusAnimationSequence().hold(950).addPos(-0.0625, 0, 0, 50, IType.SIN_UP).addPos(0, 0, 0, 100, IType.SIN_FULL)) + .addBus("EQUIP", new BusAnimationSequence().hold(1500).addPos(7.5, 0, 0, 100, IType.SIN_DOWN).addPos(0, 0, 0, 250, IType.SIN_FULL)); + case INSPECT: return new BusAnimation() + .addBus("SWIRL", new BusAnimationSequence().addPos(-720, 0, 0, 750, IType.SIN_FULL).hold(500).addPos(0, 0, 0, 750, IType.SIN_FULL)); + } + return null; + }; + + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_LASRIFLE = (stack, type) -> { + switch(type) { + case EQUIP: return new BusAnimation() + .addBus("EQUIP", new BusAnimationSequence().addPos(60, 0, 0, 0).addPos(0, 0, 0, 500, IType.SIN_DOWN)); + case CYCLE: return new BusAnimation() + .addBus("RECOIL", new BusAnimationSequence().addPos(0, 0, -0.5, 50, IType.SIN_DOWN).addPos(0, 0, 0, 150, IType.SIN_FULL)); case RELOAD: return new BusAnimation() .addBus("LEVER", new BusAnimationSequence().addPos(-90, 0, 0, 350, IType.SIN_UP).addPos(-90, 0, 0, 1500).addPos(0, 0, 0, 350, IType.SIN_UP)) .addBus("MAG", new BusAnimationSequence().addPos(0, 0, 0, 350).addPos(0, -5, 0, 350, IType.SIN_UP).addPos(0, -5, 0, 500).addPos(0, -0.25, 0, 500, IType.SIN_FULL).addPos(0, -0.25, 0, 150).addPos(0, 0, 0, 350)) diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 24b5ed5d7..983197ceb 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -996,6 +996,7 @@ public class ResourceManager { public static final ResourceLocation tesla_cannon_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/tesla_cannon.png"); public static final ResourceLocation laser_pistol_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/laser_pistol.png"); public static final ResourceLocation laser_pistol_pew_pew_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/laser_pistol_pew_pew.png"); + public static final ResourceLocation laser_pistol_morning_glory_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/laser_pistol_morning_glory.png"); public static final ResourceLocation stg77_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/stg77.png"); public static final ResourceLocation tau_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/tau.png"); public static final ResourceLocation fatman_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/fatman.png"); diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderLaserPistol.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderLaserPistol.java index ba8c1d161..208a26aed 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderLaserPistol.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderLaserPistol.java @@ -2,8 +2,10 @@ package com.hbm.render.item.weapon.sedna; import org.lwjgl.opengl.GL11; +import com.hbm.items.ModItems; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.main.ResourceManager; +import com.hbm.render.anim.HbmAnimations; import net.minecraft.client.Minecraft; import net.minecraft.item.ItemStack; @@ -43,11 +45,52 @@ public class ItemRenderLaserPistol extends ItemRenderWeaponBase { Minecraft.getMinecraft().renderEngine.bindTexture(texture); double scale = 0.375D; GL11.glScaled(scale, scale, scale); + + double[] equip = HbmAnimations.getRelevantTransformation("EQUIP"); + double[] recoil = HbmAnimations.getRelevantTransformation("RECOIL"); + double[] latch = HbmAnimations.getRelevantTransformation("LATCH"); + double[] lift = HbmAnimations.getRelevantTransformation("LIFT"); + double[] jolt = HbmAnimations.getRelevantTransformation("JOLT"); + double[] battery = HbmAnimations.getRelevantTransformation("BATTERY"); + double[] swirl = HbmAnimations.getRelevantTransformation("SWIRL"); + + GL11.glTranslated(0, -1, -6); + GL11.glRotated(equip[0], 1, 0, 0); + GL11.glTranslated(0, 1, 6); + + GL11.glTranslated(0, 2, -2); + GL11.glRotated(lift[0], 1, 0, 0); + GL11.glTranslated(0, -2, 2); + + GL11.glTranslated(0, -1, -1); + GL11.glRotated(swirl[0], 1, 0, 0); + GL11.glTranslated(0, 1, 1); + + GL11.glTranslated(0, 0, recoil[2]); + GL11.glTranslated(jolt[0], jolt[1], jolt[2]); GL11.glShadeModel(GL11.GL_SMOOTH); ResourceManager.laser_pistol.renderPart("Gun"); + if(hasCapacitors(stack)) ResourceManager.laser_pistol.renderPart("Capacitors"); + if(hasTape(stack)) ResourceManager.laser_pistol.renderPart("Tape"); + + GL11.glPushMatrix(); + GL11.glTranslated(1.125, 0, -1.9125); + GL11.glRotated(latch[1], 0, 1, 0); + GL11.glTranslated(-1.125, 0, 1.9125); ResourceManager.laser_pistol.renderPart("Latch"); + GL11.glTranslated(battery[0], battery[1], battery[2]); + ResourceManager.laser_pistol.renderPart("Battery"); + GL11.glPopMatrix(); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 2, 4.75); + GL11.glRotated(90, 0, 1, 0); + renderLaserFlash(gun.lastShot[0], 150, 1.5D, hasEmerald(stack) ? 0x008000 : 0xff0000); + GL11.glTranslated(0, 0, -0.25); + renderLaserFlash(gun.lastShot[0], 150, 0.75D, hasEmerald(stack) ? 0x80ff00 : 0xff8000); + GL11.glPopMatrix(); GL11.glShadeModel(GL11.GL_FLAT); } @@ -55,10 +98,9 @@ public class ItemRenderLaserPistol extends ItemRenderWeaponBase { @Override public void setupThirdPerson(ItemStack stack) { super.setupThirdPerson(stack); - double scale = 1.75D; + double scale = 1.25D; GL11.glScaled(scale, scale, scale); - GL11.glTranslated(0, -3, 4); - + GL11.glTranslated(0, -0.5, 1); } @Override @@ -87,6 +129,20 @@ public class ItemRenderLaserPistol extends ItemRenderWeaponBase { Minecraft.getMinecraft().renderEngine.bindTexture(texture); ResourceManager.laser_pistol.renderPart("Gun"); ResourceManager.laser_pistol.renderPart("Latch"); + if(hasCapacitors(stack)) ResourceManager.laser_pistol.renderPart("Capacitors"); + if(hasTape(stack)) ResourceManager.laser_pistol.renderPart("Tape"); GL11.glShadeModel(GL11.GL_FLAT); } + + public boolean hasCapacitors(ItemStack stack) { + return stack.getItem() == ModItems.gun_laser_pistol_pew_pew; + } + + public boolean hasTape(ItemStack stack) { + return stack.getItem() == ModItems.gun_laser_pistol_pew_pew; + } + + public boolean hasEmerald(ItemStack stack) { + return stack.getItem() == ModItems.gun_laser_pistol_morning_glory; + } } diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderLasrifle.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderLasrifle.java index 20c22b3f1..477b3dd0b 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderLasrifle.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderLasrifle.java @@ -42,6 +42,7 @@ public class ItemRenderLasrifle extends ItemRenderWeaponBase { public void renderFirstPerson(ItemStack stack) { if(hasScope(stack) && ItemGunBaseNT.prevAimingProgress == 1 && ItemGunBaseNT.aimingProgress == 1) return; + ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem(); Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.lasrifle_tex); double scale = 0.3125D; GL11.glScaled(scale, scale, scale); @@ -79,6 +80,14 @@ public class ItemRenderLasrifle extends ItemRenderWeaponBase { Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.lasrifle_mods_tex); if(hasShotgun(stack)) ResourceManager.lasrifle_mods.renderPart("BarrelShotgun"); if(hasCapacitor(stack)) ResourceManager.lasrifle_mods.renderPart("UnderBarrel"); + + GL11.glPushMatrix(); + GL11.glTranslated(0, 1.5, 12); + GL11.glRotated(90, 0, 1, 0); + renderLaserFlash(gun.lastShot[0], 150, 1.5D, 0xff0000); + GL11.glTranslated(0, 0, -0.25); + renderLaserFlash(gun.lastShot[0], 150, 0.75D, 0xff8000); + GL11.glPopMatrix(); GL11.glShadeModel(GL11.GL_FLAT); } diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderWeaponBase.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderWeaponBase.java index fc0f2f86a..cc7ba4b30 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderWeaponBase.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderWeaponBase.java @@ -28,8 +28,9 @@ import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.IItemRenderer; public abstract class ItemRenderWeaponBase implements IItemRenderer { - + public static final ResourceLocation flash_plume = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/lilmac_plume.png"); + public static final ResourceLocation laser_flash = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/laser_flash.png"); public static float interp; @@ -430,4 +431,36 @@ public abstract class ItemRenderWeaponBase implements IItemRenderer { GL11.glDisable(GL11.GL_BLEND); } } + + public static void renderLaserFlash(long lastShot, int flash, double scale, int color) { + Tessellator tess = Tessellator.instance; + + if(System.currentTimeMillis() - lastShot < flash) { + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + GL11.glDepthMask(false); + GL11.glPushMatrix(); + + double fire = (System.currentTimeMillis() - lastShot) / (double) flash; + + double size = 4 * fire * scale; + + Minecraft.getMinecraft().renderEngine.bindTexture(laser_flash); + tess.startDrawingQuads(); + tess.setBrightness(240); + tess.setNormal(0F, 1F, 0F); + + tess.setColorRGBA_I(color, 255); + + tess.addVertexWithUV(0, -size, -size, 1, 1); + tess.addVertexWithUV(0, size, -size, 0, 1); + tess.addVertexWithUV(0, size, size, 0 ,0); + tess.addVertexWithUV(0, -size, size, 1, 0); + + tess.draw(); + GL11.glPopMatrix(); + GL11.glDepthMask(true); + GL11.glDisable(GL11.GL_BLEND); + } + } } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 2ccd162bc..8b223d03b 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -2094,6 +2094,9 @@ item.gun_henry_lincoln.name=Lincolns Repetiergewehr item.gun_kit_1.name=Waffenöl item.gun_kit_2.name=Waffenreparatursatz item.gun_lag.name=Komisch lange Pistole +item.gun_laser_pistol.name=Laserpistole +item.gun_laser_pistol_morning_glory.name=Morning Glory +item.gun_laser_pistol_pew_pew.name=Piu Piu item.gun_lasrifle.name=Lasergewehr item.gun_liberator.name=Liberator item.gun_light_revolver.name=Kipplaufrevolver diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 16da79af3..6f99a7e22 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -2907,6 +2907,9 @@ item.gun_henry_lincoln.name=Lincoln's Repeater item.gun_kit_1.name=Gun Oil item.gun_kit_2.name=Gun Repair Kit item.gun_lag.name=Comically Long Pistol +item.gun_laser_pistol.name=Laser Pistol +item.gun_laser_pistol_morning_glory.name=Morning Glory +item.gun_laser_pistol_pew_pew.name=Pew Pew item.gun_lasrifle.name=Laser Rifle item.gun_liberator.name=Liberator item.gun_light_revolver.name=Break-Action Revolver diff --git a/src/main/resources/assets/hbm/sounds.json b/src/main/resources/assets/hbm/sounds.json index 82f6816d3..2b1a590d2 100644 --- a/src/main/resources/assets/hbm/sounds.json +++ b/src/main/resources/assets/hbm/sounds.json @@ -240,6 +240,7 @@ "weapon.fire.loudestNoiseOnEarth": {"category": "player", "sounds": ["weapon/fire/loudestNoiseOnEarth"]}, "weapon.fire.disintegration": {"category": "player", "sounds": ["weapon/fire/disintegration"]}, "weapon.fire.laser": {"category": "player", "sounds": ["weapon/fire/laser"]}, + "weapon.fire.laserPistol": {"category": "player", "sounds": ["weapon/fire/laserPistol"]}, "weapon.fire.laserGatling": {"category": "player", "sounds": ["weapon/fire/laserGatling"]}, "weapon.fire.silenced": {"category": "player", "sounds": ["weapon/fire/silenced"]}, "weapon.fire.assault": {"category": "player", "sounds": ["weapon/fire/assault"]}, diff --git a/src/main/resources/assets/hbm/sounds/weapon/fire/laserPistol.ogg b/src/main/resources/assets/hbm/sounds/weapon/fire/laserPistol.ogg new file mode 100644 index 0000000000000000000000000000000000000000..47ad2a2091e1ae173a3039a2adcebca16474dcd7 GIT binary patch literal 18396 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/weapons/laser_flash.png b/src/main/resources/assets/hbm/textures/models/weapons/laser_flash.png new file mode 100644 index 0000000000000000000000000000000000000000..da2e6bba16855dc11d128da50496582d2185a4f7 GIT binary patch literal 11457 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 Xhm*{qn=0kiABc6e9z7`6unqekI!a!k literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/weapons/laser_pistol_morning_glory.png b/src/main/resources/assets/hbm/textures/models/weapons/laser_pistol_morning_glory.png new file mode 100644 index 0000000000000000000000000000000000000000..51ba64680d2394a6828a926f1530d9e8a96fcfba GIT binary patch literal 13127 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

{Z-3!;R(#`5x4odVf^3HfB&k zQFbhn%2<+G^^Hhrn(Ai94hNUjR1g*r8t&(0&K-A$$ieKH+!#J1Av9^`j6+^c)%FIb zhUQRf6QZ5LarP2u)fGoR^h*#g+CJ-|pbTtLsQg|Rdjh+gWP*I*{rxZPq>&AM3vnP( zHMfV}T&jA&UJ()Obam}(fl_d+bk!t38i+dfnVS~zn#*vp?nO>0m^E(S^$wsVisu};KNHcf=QhYwIf zs1~EFgr3&&t@!=$k6vX+7Uc`Yk-OQ#)3AXZ5Ze3^`DG{g_t##3gg2UZwdh&oG?Fm* zr%KA{F5aOdPENQ_Joo48k#~0;E}|k0~_A zb=KO73Il)|2@=%frwi(ySvWv}SIwx^Jv3uF7~J&Bf>!z7weQ**Hw6*8Ct@ezxaQ`6 zzEmyLs+EA0$N<|TMl%O79+sAKkEjDf#k-ENn8-mCVT8m|G(*(Zx@QPqt3Z$jAz9ea z&`^yw2B?qkrtWuC4w5D!d$*O}I7KR+mXC16hiE9xl>s(#uQg8~Dh9szq1xt5Q!YE| z`;K_+9@m`vC7QZuTcKuo{?#TUo@ri8riL&1xzf-7tj(*3Gpk<)JU zY0Dw~a#39rNq;_4uWQSoK#kgoU&4L^j>k@{C5jy9mZ8^RQHluvt+8$jQ61*__-yORFYb_z^5OtdSP zG^@B7gQ3|!<5>o`XF$$3X^!<>pY{87pWALq&#o%OP+<-pe^Cr_SXB`hcE_55W)Ryy z2dFiLaWH2ZU|Qg|C@)Z8GOw~*QhvZ{h^%Y{*B@;{=;%#i>9 literal 0 HcmV?d00001