From fe38e61ba41551ac4a3cdb6ca099aee55d288e4a Mon Sep 17 00:00:00 2001 From: Boblet Date: Mon, 13 Oct 2025 16:47:39 +0200 Subject: [PATCH] drilldo --- .../weapon/sedna/factory/GunFactory.java | 4 ++- .../weapon/sedna/factory/XFactoryDrill.java | 31 ++++++++++++++++-- .../sedna/mags/MagazineLiquidEngine.java | 2 +- .../item/weapon/sedna/ItemRenderDrill.java | 24 ++++++++++++-- src/main/resources/assets/hbm/lang/de_DE.lang | 9 +++++ src/main/resources/assets/hbm/lang/en_US.lang | 9 +++++ .../hbm/textures/items/weapon_mod_sheet.png | Bin 3703 -> 5316 bytes .../items/weapon_mod_special.drill_hss.png | Bin 0 -> 342 bytes .../weapon_mod_special.drill_saturnite.png | Bin 0 -> 361 bytes .../weapon_mod_special.drill_tcalloy.png | Bin 0 -> 315 bytes .../weapon_mod_special.drill_weaponsteel.png | Bin 0 -> 301 bytes .../weapon_mod_special.engine_aviation.png | Bin 0 -> 280 bytes .../weapon_mod_special.engine_diesel.png | Bin 0 -> 239 bytes .../weapon_mod_special.engine_electric.png | Bin 0 -> 327 bytes .../items/weapon_mod_special.engine_turbo.png | Bin 0 -> 333 bytes 15 files changed, 71 insertions(+), 8 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_special.drill_hss.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_special.drill_saturnite.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_special.drill_tcalloy.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_special.drill_weaponsteel.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_special.engine_aviation.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_special.engine_diesel.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_special.engine_electric.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_special.engine_turbo.png 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 e7787c983..bccb184c5 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 @@ -166,7 +166,9 @@ public class GunFactory { FURNITURE_GREEN, FURNITURE_BLACK, BAYONET, STACK_MAG, SKIN_SATURNITE, LAS_SHOTGUN, LAS_CAPACITOR, LAS_AUTO, - NICKEL, DOUBLOONS + NICKEL, DOUBLOONS, + DRILL_HSS, DRILL_WEAPONSTEEL, DRILL_TCALLOY, DRILL_SATURNITE, + ENGINE_DIESEL, ENGINE_AVIATION, ENGINE_ELECTRIC, ENGINE_TURBO, } public static enum EnumModCaliber { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryDrill.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryDrill.java index 65ef98f00..a45f3eccc 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryDrill.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryDrill.java @@ -1,6 +1,7 @@ package com.hbm.items.weapon.sedna.factory; import java.util.function.BiConsumer; +import java.util.function.BiFunction; import com.hbm.blocks.ModBlocks; import com.hbm.inventory.fluid.Fluids; @@ -15,7 +16,11 @@ import com.hbm.items.weapon.sedna.impl.ItemGunDrill; import com.hbm.items.weapon.sedna.mags.IMagazine; import com.hbm.items.weapon.sedna.mags.MagazineLiquidEngine; import com.hbm.items.weapon.sedna.mods.WeaponModManager; +import com.hbm.render.anim.BusAnimation; +import com.hbm.render.anim.BusAnimationSequence; +import com.hbm.render.anim.HbmAnimations; import com.hbm.render.anim.AnimationEnums.GunAnimation; +import com.hbm.render.anim.BusAnimationKeyframe.IType; import com.hbm.util.EntityDamageUtil; import net.minecraft.block.Block; @@ -42,12 +47,12 @@ public class XFactoryDrill { ModItems.gun_drill = new ItemGunDrill(WeaponQuality.UTILITY, new GunConfig() .dura(3_000).draw(10).inspect(55).hideCrosshair(false).crosshair(Crosshair.L_CIRCUMFLEX) .rec(new Receiver(0) - .dmg(10F).delay(20).auto(true).jam(0) + .dmg(10F).delay(20).dry(30).auto(true).jam(0) .mag(new MagazineLiquidEngine(0, 4_000, Fluids.GASOLINE, Fluids.GASOLINE_LEADED, Fluids.COALGAS, Fluids.COALGAS_LEADED)) .offset(1, -0.0625 * 2.5, -0.25D) .canFire(Lego.LAMBDA_STANDARD_CAN_FIRE).fire(LAMBDA_DRILL_FIRE)) .pp(Lego.LAMBDA_STANDARD_CLICK_PRIMARY).pr(Lego.LAMBDA_STANDARD_RELOAD).decider(GunStateDecider.LAMBDA_STANDARD_DECIDER) - //.anim(LAMBDA_CT_ANIMS).orchestra(Orchestras.ORCHESTRA_CHARGE_THROWER) + .anim(LAMBDA_DRILL_ANIMS) ).setUnlocalizedName("gun_drill"); } @@ -75,7 +80,7 @@ public class XFactoryDrill { } if(player != null && mop.typeOfHit == mop.typeOfHit.BLOCK) { - int aoe = getModdableAoE(stack, 1); + int aoe = player.isSneaking() ? 0 : getModdableAoE(stack, 1); for(int i = -aoe; i <= aoe; i++) for(int j = -aoe; j <= aoe; j++) for(int k = -aoe; k <= aoe; k++) { breakExtraBlock(player.worldObj, mop.blockX + i, mop.blockY + j, mop.blockZ + k, player, mop.blockX, mop.blockY, mop.blockZ); } @@ -113,4 +118,24 @@ public class XFactoryDrill { public static float getModdablePiercing(ItemStack stack, float base) { return WeaponModManager.eval(base, stack, F_PIERCE, ModItems.gun_drill, 0); } public static int getModdableAoE(ItemStack stack, int base) { return WeaponModManager.eval(base, stack, I_AOE, ModItems.gun_drill, 0); } public static int getModdableHarvestLevel(ItemStack stack, int base) { return WeaponModManager.eval(base, stack, I_HARVEST, ModItems.gun_drill, 0); } + + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_DRILL_ANIMS = (stack, type) -> { + switch(type) { + case EQUIP: return new BusAnimation() + .addBus("EQUIP", new BusAnimationSequence().setPos(-1, 0, 0).addPos(0, 0, 0, 750, IType.SIN_DOWN)); + case CYCLE: + double deploy = HbmAnimations.getRelevantTransformation("DEPLOY")[0]; + double spin = HbmAnimations.getRelevantTransformation("SPIN")[2] % 360; + return new BusAnimation() + .addBus("DEPLOY", new BusAnimationSequence().setPos(deploy, 0, 0).addPos(1, 0, 0, (int) (500 * (1 - deploy)), IType.SIN_FULL).hold(1000).addPos(0, 0, 0, 500, IType.SIN_FULL)) + .addBus("SPIN", new BusAnimationSequence().setPos(spin, 0, 0).addPos(spin + 360 * 1.5, 0, 0, 1500).addPos(spin + 360 * 2, 0, 0, 750, IType.SIN_DOWN)); + case CYCLE_DRY: return new BusAnimation() + .addBus("DEPLOY", new BusAnimationSequence().addPos(0.25, 0, 0, 250, IType.SIN_FULL).addPos(0, 0, 0, 250, IType.SIN_FULL)) + .addBus("SPIN", new BusAnimationSequence().addPos(360 * 1, 0, 0, 1500, IType.SIN_DOWN)); + case INSPECT: return new BusAnimation() + .addBus("LIFT", new BusAnimationSequence().addPos(-45, 0, 0, 500, IType.SIN_FULL).hold(1000).addPos(0, 0, 0, 500, IType.SIN_DOWN)); + } + + return null; + }; } diff --git a/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineLiquidEngine.java b/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineLiquidEngine.java index 4dd8e984b..5f0469ed3 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineLiquidEngine.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineLiquidEngine.java @@ -47,7 +47,7 @@ public class MagazineLiquidEngine implements IMagazine { @Override public SpentCasing getCasing(ItemStack stack, IInventory inventory) { return null; } @Override public ItemStack getIconForHUD(ItemStack stack, EntityPlayer player) { return new ItemStack(ModItems.fluid_icon, 1, this.getType(stack, player.inventory).getID()); } - @Override public String reportAmmoStateForHUD(ItemStack stack, EntityPlayer player) { return getAmount(stack, player.inventory) + "mB"; } + @Override public String reportAmmoStateForHUD(ItemStack stack, EntityPlayer player) { return getAmount(stack, player.inventory) + "/" + this.capacity + "mB"; } @Override public void setAmountBeforeReload(ItemStack stack, int amount) { ItemGunBaseNT.setValueInt(stack, KEY_MAG_PREV + index, amount); } @Override public int getAmountBeforeReload(ItemStack stack) { return ItemGunBaseNT.getValueInt(stack, KEY_MAG_PREV + index); } diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderDrill.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderDrill.java index e16341924..709c306b1 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderDrill.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderDrill.java @@ -5,6 +5,7 @@ import org.lwjgl.opengl.GL11; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.mags.IMagazine; import com.hbm.main.ResourceManager; +import com.hbm.render.anim.HbmAnimations; import net.minecraft.client.Minecraft; import net.minecraft.item.ItemStack; @@ -35,9 +36,26 @@ public class ItemRenderDrill extends ItemRenderWeaponBase { IMagazine mag = gun.getConfig(stack, 0).getReceivers(stack)[0].getMagazine(stack); double gauge = (double) mag.getAmount(stack, null) / (double) mag.getCapacity(stack); - float aimingProgress = ItemGunBaseNT.prevAimingProgress + (ItemGunBaseNT.aimingProgress - ItemGunBaseNT.prevAimingProgress) * interp; + double[] equip = HbmAnimations.getRelevantTransformation("EQUIP"); + double[] deploy = HbmAnimations.getRelevantTransformation("DEPLOY"); + double[] lift = HbmAnimations.getRelevantTransformation("LIFT"); + double[] spin = HbmAnimations.getRelevantTransformation("SPIN"); + + /*float aimingProgress = ItemGunBaseNT.prevAimingProgress + (ItemGunBaseNT.aimingProgress - ItemGunBaseNT.prevAimingProgress) * interp; GL11.glRotated(15 * (1 - aimingProgress), 0, 1, 0); - GL11.glRotated(-10 * (1 - aimingProgress), 1, 0, 0); + GL11.glRotated(-10 * (1 - aimingProgress), 1, 0, 0);*/ + + GL11.glRotated(15 * (1 - deploy[0] * 0.5), 0, 1, 0); + GL11.glRotated(-10 * (1 - deploy[0] * 0.5), 1, 0, 0); + + GL11.glTranslated(0, 2, -6); + GL11.glRotated(equip[0] * -45, 0, 1, 0); + GL11.glRotated(equip[0] * -20, 1, 0, 0); + GL11.glTranslated(0, -2, 6); + + GL11.glRotated(lift[0], 1, 0, 0); + + GL11.glTranslated(0, 0, deploy[0]); GL11.glShadeModel(GL11.GL_SMOOTH); ResourceManager.drill.renderPart("Base"); @@ -51,7 +69,7 @@ public class ItemRenderDrill extends ItemRenderWeaponBase { ResourceManager.drill.renderPart("Gauge"); GL11.glPopMatrix(); - double rot = System.currentTimeMillis() / 3 % 360D; + double rot = spin[0]; double rot2 = rot * 5; GL11.glPushMatrix(); diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index b44c7a5ff..8da8f4d1a 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -2133,6 +2133,7 @@ item.gun_cryolator_ammo.name=Kryozelle item.gun_detonator.name=Laserzünder item.gun_double_barrel.name=Ein alter Klassiker item.gun_double_barrel_sacred_dragon.name=Sacred Dragon +item.gun_drill.name=Motorisierter Bohrer item.gun_fatman.name=Fat Man item.gun_fireext.name=Feuerlöscher item.gun_flamer.name=Flammenwerfer @@ -3659,6 +3660,14 @@ item.weapon_mod_generic.wsteel_dura.name=Langlebige Waffenstahl-Teile item.weapon_mod_special.bayonet.name=Bayonet item.weapon_mod_special.choke.name=Choke item.weapon_mod_special.doubloons.name=Zwei Golddublonen +item.weapon_mod_special.drill_hss.name=Motorisierter Bohrer - Schnellarbeitsstahl-Bohrkopf +item.weapon_mod_special.drill_saturnite.name=Motorisierter Bohrer - Saturnit-Bohrkopf +item.weapon_mod_special.drill_tcalloy.name=Motorisierter Bohrer - Technetiumstahl-Bohrkopf +item.weapon_mod_special.drill_weaponsteel.name=Motorisierter Bohrer - Waffenstahl-Bohrkopf +item.weapon_mod_special.engine_aviation.name=Motorisierter Bohrer - Flugzeugmotor +item.weapon_mod_special.engine_diesel.name=Motorisierter Bohrer - Dieselmotor +item.weapon_mod_special.engine_electric.name=Motorisierter Bohrer - Electromotor +item.weapon_mod_special.engine_turbo.name=Motorisierter Bohrer - Turbomotor item.weapon_mod_special.furniture_black.name=Polymergriff (Schwarz) item.weapon_mod_special.furniture_green.name=Polymergriff (Grün) item.weapon_mod_special.greasegun.name=Grease Gun Modernisierungskit diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 6ef224c31..c68ebd25f 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -2975,6 +2975,7 @@ item.gun_cryolator_ammo.name=Cryo Cell item.gun_detonator.name=Laser Detonator item.gun_double_barrel.name=An Old Classic item.gun_double_barrel_sacred_dragon.name=Sacred Dragon +item.gun_drill.name=Powered Drill item.gun_fatman.name=Fat Man item.gun_fireext.name=Fire Extinguisher item.gun_flamer.name=Flamethrower @@ -4806,6 +4807,14 @@ item.weapon_mod_generic.wsteel_dura.name=High-Durability Weapon Steel Parts item.weapon_mod_special.bayonet.name=Bayonet item.weapon_mod_special.choke.name=Choke item.weapon_mod_special.doubloons.name=Two Gold Doubloons +item.weapon_mod_special.drill_hss.name=Powered Drill - High-Speed Steel Drillbit +item.weapon_mod_special.drill_saturnite.name=Powered Drill - Saturnite Drillbit +item.weapon_mod_special.drill_tcalloy.name=Powered Drill - Technetium Steel Drillbit +item.weapon_mod_special.drill_weaponsteel.name=Powered Drill - Weapon Steel Drillbit +item.weapon_mod_special.engine_aviation.name=Powered Drill - Aircraft Engine +item.weapon_mod_special.engine_diesel.name=Powered Drill - Diesel Engine +item.weapon_mod_special.engine_electric.name=Powered Drill - Electric Engine +item.weapon_mod_special.engine_turbo.name=Powered Drill - Turbo Engine item.weapon_mod_special.furniture_black.name=Polymer Furniture (Black) item.weapon_mod_special.furniture_green.name=Polymer Furniture (Green) item.weapon_mod_special.greasegun.name=Grease Gun Modernization Kit diff --git a/src/main/resources/assets/hbm/textures/items/weapon_mod_sheet.png b/src/main/resources/assets/hbm/textures/items/weapon_mod_sheet.png index 3bad2cfdaf8cef7b0bb55979cb5a40ad0d4cb8bd..4eb0e8aa0f330ece0fbb30b9652675d088b076e0 100644 GIT binary patch literal 5316 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 SdKmdy5->5a(Ep(8g84rWJ1VRI literal 3703 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 N002ovPDHLkV1m^Cg+%}W literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/weapon_mod_special.drill_weaponsteel.png b/src/main/resources/assets/hbm/textures/items/weapon_mod_special.drill_weaponsteel.png new file mode 100644 index 0000000000000000000000000000000000000000..ff7f8b0de050c5cafd3a4dbe46c2e7a49552d9d1 GIT binary patch literal 301 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf-4P2kemoyfVSNp%A!OPj62t8D3%r#4?X6kGrQcolCx z`HrzW&xia)Qyy*0{h9f`RHlQ&U-41SMHAkn9)^a@SuWd3Qw5v^PH$@HcrfSpsb}ij zdkha%^FNni_%PSEY~_?kn{*sq42~VB?w3dw`*e!Yi6bfY`rRWE%u0tW`qpfH7SA|8 z=k_+|XO+hccwYRLOFxl1B`79T)LZjr)ah$c>t4_5SKH2}$a1k%wri1t7bnAnpj*EC xx~3HEU$HeUTi082e(f8lgB9ps22WQ%mvv4FO#lm+c{cz6 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/weapon_mod_special.engine_aviation.png b/src/main/resources/assets/hbm/textures/items/weapon_mod_special.engine_aviation.png new file mode 100644 index 0000000000000000000000000000000000000000..8f99fe37fefd2a8982b7bb5d5f4cdbe6626e11a3 GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf*P#HBw*A`2S~>3>nX1xhpeDx9Y4c6V2nP(q#H6ML_NX@6M zcG+sb_1b11wf{eqJNLi%U88-}B8^iu_s@4_wFVrmxN+Xp@8M2^BZan%0bz&NF6+&` z$}l03$6;?)kYVrkhfj)FPsm&sR{fe0ZJHvXeE3IRh#_xZBg=`Gn=?Drmu*&Ee9~sR z*^APxt4uv6wV3#Fm)EPNZ-~^tksHo``1Dl2-3voo8UCuvF?;UKs`I%g&jd6qe*Q=H a9gHu6Qm^p6FIoC{Xrgv%-^tj5MYZ%GVxHoj(tnVt7`-oQV4A+NV0&r=!71Co%GWf?V^ zrWq7*&LsfjFr4Q(T5ABj_W-16ic+dG+_o)%IOmd4C~B?o-s8RB5Gkdo>lz@6+oU75 zFuyrve!Ul|6-Ch-dkJ`d;N$J7^X04c8h~u~veSzQj?NxAzG$OejWGZiV{k81cE;zy z1K`U$Ba0R5et2qDw002ovPDHLkV1jm>h(-Va literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/weapon_mod_special.engine_turbo.png b/src/main/resources/assets/hbm/textures/items/weapon_mod_special.engine_turbo.png new file mode 100644 index 0000000000000000000000000000000000000000..574e2b442e903885c182b9b0bc0dc360b4a20ba0 GIT binary patch literal 333 zcmV-T0kZyyP)A#fj6EnMROpgHT^xi|6sh3o(j_0E_`&=fMJI99 zvB}V}&>`p1Tkdsh9O4}bO2Jk9E%$QoJ-_$Q!M}dgVzFq7qG%4qUXc&(XR}^nyW1Ts zvaG5IAolR_WWqQ}0H}=tAW@2uQav!5P64=u24LV5<0PRrhT525G*XK7ehbi^d5&`q z=NwvVwAO70UhClyYc2E6-ObfG_3JyQ7jr}e5h2}dcw4PlR#i0U8dz(w)_xy2&jWmR z^ufy)9CqM!8OM;O=q%$T%K*@O5OIhIaaodG-vQ5o2?pKSHQ-zeg@