From 51b7c715344fb36d3b84f11a42e4b371c5028638 Mon Sep 17 00:00:00 2001 From: Boblet Date: Thu, 20 Mar 2025 15:42:37 +0100 Subject: [PATCH] good god, we gonna rock down to electric avenue --- changelog | 5 +- .../hbm/blocks/machine/BlockWeaponTable.java | 6 +- .../java/com/hbm/crafting/WeaponRecipes.java | 3 + src/main/java/com/hbm/items/ModItems.java | 4 + .../hbm/items/weapon/sedna/ItemGunBaseNT.java | 18 +++- .../weapon/sedna/factory/GunFactory.java | 26 ++++- .../weapon/sedna/factory/XFactory357.java | 31 ++---- .../sedna/mags/MagazineSingleTypeBase.java | 2 +- .../weapon/sedna/mods/WeaponModBase.java | 6 +- .../sedna/mods/WeaponModGenericDamage.java | 23 +++++ .../mods/WeaponModGenericDurability.java | 23 +++++ .../mods/WeaponModLiberatorSpeedloader.java | 57 ++++++++++ .../weapon/sedna/mods/WeaponModManager.java | 97 +++++++++++++++++- .../sedna/mods/WeaponModTestDamage.java | 3 +- .../sedna/mods/WeaponModTestFirerate.java | 3 +- .../weapon/sedna/mods/WeaponModTestMulti.java | 3 +- .../item/weapon/sedna/ItemRenderFatMan.java | 6 +- src/main/resources/assets/hbm/lang/de_DE.lang | 2 + src/main/resources/assets/hbm/lang/en_US.lang | 2 + .../hbm/textures/blocks/gun_table_bottom.png | Bin 0 -> 203 bytes .../hbm/textures/blocks/gun_table_side.png | Bin 0 -> 261 bytes .../hbm/textures/blocks/gun_table_top.png | Bin 0 -> 289 bytes .../assets/hbm/textures/items/ammo.png | Bin 18987 -> 19055 bytes .../textures/items/ammo_standard.p45_ap.png | Bin 0 -> 291 bytes .../textures/items/ammo_standard.p45_du.png | Bin 0 -> 326 bytes .../textures/items/ammo_standard.p45_fmj.png | Bin 0 -> 251 bytes .../textures/items/ammo_standard.p45_jhp.png | Bin 0 -> 293 bytes .../textures/items/ammo_standard.p45_sp.png | Bin 0 -> 290 bytes .../hbm/textures/items/ingot_metal_sheet.png | Bin 6766 -> 6720 bytes .../items/weapon_mod_generic.bigmt_damage.png | Bin 0 -> 280 bytes .../items/weapon_mod_generic.bigmt_dura.png | Bin 0 -> 300 bytes .../weapon_mod_generic.bronze_damage.png | Bin 0 -> 284 bytes .../items/weapon_mod_generic.bronze_dura.png | Bin 0 -> 302 bytes .../items/weapon_mod_generic.desh_damage.png | Bin 0 -> 269 bytes .../items/weapon_mod_generic.desh_dura.png | Bin 0 -> 278 bytes .../items/weapon_mod_generic.dura_damage.png | Bin 0 -> 267 bytes .../items/weapon_mod_generic.dura_dura.png | Bin 0 -> 279 bytes .../items/weapon_mod_generic.ferro_damage.png | Bin 0 -> 277 bytes .../items/weapon_mod_generic.ferro_dura.png | Bin 0 -> 308 bytes .../items/weapon_mod_generic.iron_damage.png | Bin 0 -> 270 bytes .../items/weapon_mod_generic.iron_dura.png | Bin 0 -> 286 bytes .../items/weapon_mod_generic.steel_damage.png | Bin 0 -> 270 bytes .../items/weapon_mod_generic.steel_dura.png | Bin 0 -> 301 bytes .../weapon_mod_generic.tcalloy_damage.png | Bin 0 -> 272 bytes .../items/weapon_mod_generic.tcalloy_dura.png | Bin 0 -> 295 bytes .../weapon_mod_generic.wsteel_damage.png | Bin 0 -> 285 bytes .../items/weapon_mod_generic.wsteel_dura.png | Bin 0 -> 306 bytes .../hbm/textures/items/weapon_mod_sheet.png | Bin 0 -> 1973 bytes .../items/weapon_mod_special.bayonet.png | Bin 0 -> 201 bytes .../items/weapon_mod_special.choke.png | Bin 0 -> 211 bytes .../weapon_mod_special.furniture_black.png | Bin 0 -> 213 bytes .../weapon_mod_special.furniture_green.png | Bin 0 -> 226 bytes .../items/weapon_mod_special.greasegun.png | Bin 0 -> 235 bytes .../textures/items/weapon_mod_special.saw.png | Bin 0 -> 264 bytes .../items/weapon_mod_special.scope.png | Bin 0 -> 367 bytes .../items/weapon_mod_special.silencer.png | Bin 0 -> 221 bytes .../items/weapon_mod_special.slowdown.png | Bin 0 -> 281 bytes .../items/weapon_mod_special.speedloader.png | Bin 0 -> 249 bytes .../items/weapon_mod_special.speedup.png | Bin 0 -> 324 bytes .../{g3-polymer.png => g3_polymer.png} | Bin .../models/weapons/g3_polymer_black.png | Bin 0 -> 11071 bytes .../models/weapons/greasegun_clean.png | Bin 0 -> 4385 bytes 62 files changed, 277 insertions(+), 43 deletions(-) create mode 100644 src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModGenericDamage.java create mode 100644 src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModGenericDurability.java create mode 100644 src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModLiberatorSpeedloader.java create mode 100644 src/main/resources/assets/hbm/textures/blocks/gun_table_bottom.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/gun_table_side.png create mode 100644 src/main/resources/assets/hbm/textures/blocks/gun_table_top.png create mode 100644 src/main/resources/assets/hbm/textures/items/ammo_standard.p45_ap.png create mode 100644 src/main/resources/assets/hbm/textures/items/ammo_standard.p45_du.png create mode 100644 src/main/resources/assets/hbm/textures/items/ammo_standard.p45_fmj.png create mode 100644 src/main/resources/assets/hbm/textures/items/ammo_standard.p45_jhp.png create mode 100644 src/main/resources/assets/hbm/textures/items/ammo_standard.p45_sp.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_generic.bigmt_damage.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_generic.bigmt_dura.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_generic.bronze_damage.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_generic.bronze_dura.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_generic.desh_damage.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_generic.desh_dura.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_generic.dura_damage.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_generic.dura_dura.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_generic.ferro_damage.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_generic.ferro_dura.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_generic.iron_damage.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_generic.iron_dura.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_generic.steel_damage.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_generic.steel_dura.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_generic.tcalloy_damage.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_generic.tcalloy_dura.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_generic.wsteel_damage.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_generic.wsteel_dura.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_sheet.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_special.bayonet.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_special.choke.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_special.furniture_black.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_special.furniture_green.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_special.greasegun.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_special.saw.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_special.scope.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_special.silencer.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_special.slowdown.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_special.speedloader.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_special.speedup.png rename src/main/resources/assets/hbm/textures/models/weapons/{g3-polymer.png => g3_polymer.png} (100%) create mode 100644 src/main/resources/assets/hbm/textures/models/weapons/g3_polymer_black.png create mode 100644 src/main/resources/assets/hbm/textures/models/weapons/greasegun_clean.png diff --git a/changelog b/changelog index 3c6cec450..d17c39117 100644 --- a/changelog +++ b/changelog @@ -9,6 +9,7 @@ * Explosive .50 BMG * Explosive 10 gauge buckshot (unlike 12 gauge which has explosive slugs) * Lincoln's repeater, a b-side to the lever action rifle +* Weapon modification table ## Changed * Fat mines now use the standardized mini nuke code @@ -29,6 +30,7 @@ * Removed the crafting recipe for the small geothermal generator and ZPE generators * Removed the gemothermal, ZPE and ambient radiation generators from the creative menu * Disabled the horrid flicker on the quad rocket launcher's antenna, making steered mode look less terrible +* All non-legendary .357 revolvers now fire a quarter of a second faster ## Fixed * Fixed animation errors on the MAS-36 @@ -40,4 +42,5 @@ * Potentially fixed another issue regarding NPCs firing belt-fed guns * Chunk-loading drones may or may not be fixed * Fixed disperser canisters not actually despawning on impact, endlessly spawning mist clouds -* Fixed issues where the new packet system didn't play nice with machines that are being sent packets by other machines, like watz segments and radar screens \ No newline at end of file +* Fixed issues where the new packet system didn't play nice with machines that are being sent packets by other machines, like watz segments and radar screens +* Fixed fat man's piston not being extended correctly in non-first person rendering when unloaded \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/machine/BlockWeaponTable.java b/src/main/java/com/hbm/blocks/machine/BlockWeaponTable.java index b4d68354f..782b3b332 100644 --- a/src/main/java/com/hbm/blocks/machine/BlockWeaponTable.java +++ b/src/main/java/com/hbm/blocks/machine/BlockWeaponTable.java @@ -29,9 +29,9 @@ public class BlockWeaponTable extends Block implements IGUIProvider { @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister iconRegister) { - this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":armor_table_top"); - this.iconBottom = iconRegister.registerIcon(RefStrings.MODID + ":armor_table_bottom"); - this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":armor_table_side"); + this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":gun_table_top"); + this.iconBottom = iconRegister.registerIcon(RefStrings.MODID + ":gun_table_bottom"); + this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":gun_table_side"); } @Override diff --git a/src/main/java/com/hbm/crafting/WeaponRecipes.java b/src/main/java/com/hbm/crafting/WeaponRecipes.java index 09243c3f7..5ba032b13 100644 --- a/src/main/java/com/hbm/crafting/WeaponRecipes.java +++ b/src/main/java/com/hbm/crafting/WeaponRecipes.java @@ -31,6 +31,9 @@ public class WeaponRecipes { public static void register() { + //Weapon mod table + CraftingManager.addRecipeAuto(new ItemStack(ModBlocks.machine_weapon_table, 1), new Object[] { "PPP", "TCT", "TST", 'P', GUNMETAL.plate(), 'T', STEEL.ingot(), 'C', Blocks.crafting_table, 'S', STEEL.block() }); + //SEDNA Parts CraftingManager.addRecipeAuto(new ItemStack(ModItems.part_stock, 1, Mats.MAT_WOOD.id), new Object[] { "WWW", " W", 'W', KEY_PLANKS }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.part_grip, 1, Mats.MAT_WOOD.id), new Object[] { "W ", " W", " W", 'W', KEY_PLANKS }); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 517423b5d..89f409537 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1507,6 +1507,8 @@ public class ModItems { public static Item ammo_secret; public static Item weapon_mod_test; + public static Item weapon_mod_generic; + public static Item weapon_mod_special; public static Item crucible; @@ -6489,6 +6491,8 @@ public class ModItems { GameRegistry.registerItem(ammo_secret, ammo_secret.getUnlocalizedName()); GameRegistry.registerItem(weapon_mod_test, weapon_mod_test.getUnlocalizedName()); + GameRegistry.registerItem(weapon_mod_generic, weapon_mod_generic.getUnlocalizedName()); + GameRegistry.registerItem(weapon_mod_special, weapon_mod_special.getUnlocalizedName()); //Ammo GameRegistry.registerItem(gun_b92_ammo, gun_b92_ammo.getUnlocalizedName()); 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 60b8b7b25..b9c80f3a8 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java +++ b/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java @@ -1,13 +1,18 @@ package com.hbm.items.weapon.sedna; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; import java.util.ArrayList; import java.util.List; +import java.util.Locale; import java.util.concurrent.ConcurrentHashMap; import java.util.function.BiConsumer; import com.hbm.config.GeneralConfig; import com.hbm.handler.HbmKeybinds.EnumKeybind; import com.hbm.interfaces.IItemHUD; +import com.hbm.inventory.RecipesCommon.ComparableStack; +import com.hbm.inventory.gui.GUIWeaponTable; import com.hbm.items.IEquipReceiver; import com.hbm.items.IKeybindReceiver; import com.hbm.items.weapon.sedna.hud.IHUDComponent; @@ -49,6 +54,10 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei public double shotRand = 0D; public static List secrets = new ArrayList(); + public List recognizedMods = new ArrayList(); + + public static final DecimalFormatSymbols SYMBOLS_US = new DecimalFormatSymbols(Locale.US); + public static final DecimalFormat FORMAT_DMG = new DecimalFormat("#.##", SYMBOLS_US); public static float recoilVertical = 0; public static float recoilHorizontal = 0; @@ -144,10 +153,10 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei IMagazine mag = rec.getMagazine(stack); list.add("Ammo: " + mag.getIconForHUD(stack, player).getDisplayName() + " " + mag.reportAmmoStateForHUD(stack, player)); float dmg = rec.getBaseDamage(stack); - list.add("Base Damage: " + dmg); + list.add("Base Damage: " + FORMAT_DMG.format(dmg)); if(mag.getType(stack, player.inventory) instanceof BulletConfig) { BulletConfig bullet = (BulletConfig) mag.getType(stack, player.inventory); - list.add("Damage with current ammo: " + dmg * bullet.damageMult + (bullet.projectilesMin > 1 ? (" x" + (bullet.projectilesMin != bullet.projectilesMax ? (bullet.projectilesMin + "-" + bullet.projectilesMax) : bullet.projectilesMin)) : "")); + list.add("Damage with current ammo: " + FORMAT_DMG.format(dmg * bullet.damageMult) + (bullet.projectilesMin > 1 ? (" x" + (bullet.projectilesMin != bullet.projectilesMax ? (bullet.projectilesMin + "-" + bullet.projectilesMax) : bullet.projectilesMin)) : "")); } } @@ -164,6 +173,11 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei case SECRET: list.add((BobMathUtil.getBlink() ? EnumChatFormatting.DARK_RED : EnumChatFormatting.RED) + "SECRET"); break; case DEBUG: list.add((BobMathUtil.getBlink() ? EnumChatFormatting.YELLOW : EnumChatFormatting.GOLD) + "DEBUG"); break; } + + if(Minecraft.getMinecraft().currentScreen instanceof GUIWeaponTable) { + list.add(EnumChatFormatting.RED + "Accepts:"); + for(ComparableStack comp : this.recognizedMods) list.add(EnumChatFormatting.RED + " " + comp.toStack().getDisplayName()); + } } @Override 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 0a26addd9..e33609e10 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 @@ -67,7 +67,9 @@ public class GunFactory { XFactory10ga.init(); XFactory35800.init(); - ModItems.weapon_mod_test = new ItemEnumMulti(EnumModTest.class, true, true).setUnlocalizedName("weapon_mod_test"); + ModItems.weapon_mod_test = new ItemEnumMulti(EnumModTest.class, true, true).setUnlocalizedName("weapon_mod_test").setMaxStackSize(1); + ModItems.weapon_mod_generic = new ItemEnumMulti(EnumModGeneric.class, true, true).setUnlocalizedName("weapon_mod_generic").setMaxStackSize(1).setCreativeTab(MainRegistry.weaponTab); + ModItems.weapon_mod_special = new ItemEnumMulti(EnumModSpecial.class, true, true).setUnlocalizedName("weapon_mod_special").setMaxStackSize(1).setCreativeTab(MainRegistry.weaponTab); /// PROXY BULLSHIT /// MainRegistry.proxy.registerGunCfg(); @@ -93,7 +95,8 @@ public class GunFactory { COIL_TUNGSTEN, COIL_FERROURANIUM, NUKE_STANDARD, NUKE_DEMO, NUKE_HIGH, NUKE_TOTS, NUKE_HIVE, G10, G10_SHRAPNEL, G10_DU, G10_SLUG, - R762_HE, BMG50_HE, G10_EXPLOSIVE + R762_HE, BMG50_HE, G10_EXPLOSIVE, + P45_SP, P45_FMJ, P45_JHP, P45_AP, P45_DU, //ONLY ADD NEW ENTRIES AT THE BOTTOM TO AVOID SHIFTING! ; @@ -105,6 +108,7 @@ public class GunFactory { M44_BP, M44_SP, M44_FMJ, M44_JHP, M44_AP, M44_EXPRESS, P22_SP, P22_FMJ, P22_JHP, P22_AP, P9_SP, P9_FMJ, P9_JHP, P9_AP, + P45_SP, P45_FMJ, P45_JHP, P45_AP, P45_DU, R556_SP, R556_FMJ, R556_JHP, R556_AP, R762_SP, R762_FMJ, R762_JHP, R762_AP, R762_DU, R762_HE, BMG50_SP, BMG50_FMJ, BMG50_JHP, BMG50_AP, BMG50_DU, BMG50_HE, @@ -135,4 +139,22 @@ public class GunFactory { public static enum EnumModTest { FIRERATE, DAMAGE, MULTI; } + + public static enum EnumModGeneric { + IRON_DAMAGE, IRON_DURA, + STEEL_DAMAGE, STEEL_DURA, + DURA_DAMAGE, DURA_DURA, + DESH_DAMAGE, DESH_DURA, + WSTEEL_DAMAGE, WSTEEL_DURA, + FERRO_DAMAGE, FERRO_DURA, + TCALLOY_DAMAGE, TCALLOY_DURA, + BIGMT_DAMAGE, BIGMT_DURA, + BRONZE_DAMAGE, BRONZE_DURA, + } + + public static enum EnumModSpecial { + SILENCER, SCOPE, SAW, GREASEGUN, SLOWDOWN, + SPEEDUP, CHOKE, SPEEDLOADER, + FURNITURE_GREEN, FURNITURE_BLACK, BAYONET + } } 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 4ed982903..d0b2863a3 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 @@ -41,7 +41,7 @@ public class XFactory357 { ModItems.gun_light_revolver = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(300).draw(4).inspect(23).crosshair(Crosshair.CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) - .dmg(7.5F).delay(16).reload(55).jam(45).sound("hbm:weapon.fire.pistol", 1.0F, 1.0F) + .dmg(7.5F).delay(11).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(LAMBDA_RECOIL_ATLAS)) @@ -51,7 +51,7 @@ public class XFactory357 { ModItems.gun_light_revolver_atlas = new ItemGunBaseNT(WeaponQuality.B_SIDE, new GunConfig() .dura(300).draw(4).inspect(23).crosshair(Crosshair.CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) - .dmg(12.5F).delay(16).reload(55).jam(45).sound("hbm:weapon.fire.pistol", 1.0F, 1.0F) + .dmg(12.5F).delay(11).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(LAMBDA_RECOIL_ATLAS)) @@ -67,7 +67,7 @@ public class XFactory357 { .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), + .anim(LAMBDA_ATLAS_ANIMS).orchestra(Orchestras.ORCHESTRA_DANI), new GunConfig().dura(30_000).draw(20).inspect(23).crosshair(Crosshair.CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) .dmg(15F).spreadHipfire(0F).delay(11).reload(55).jam(45).sound("hbm:weapon.fire.pistol", 1.0F, 0.9F) @@ -76,7 +76,7 @@ public class XFactory357 { .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) + .anim(LAMBDA_ATLAS_ANIMS).orchestra(Orchestras.ORCHESTRA_DANI) ).setUnlocalizedName("gun_light_revolver_dani"); } @@ -94,11 +94,11 @@ public class XFactory357 { .addBus("EQUIP", new BusAnimationSequence().addPos(-90, 0, 0, 0).addPos(0, 0, 0, 350, IType.SIN_DOWN)); case CYCLE: return new BusAnimation() .addBus("RECOIL", new BusAnimationSequence().addPos(0, 0, 0, 50).addPos(0, 0, -3, 50).addPos(0, 0, 0, 250)) - .addBus("HAMMER", new BusAnimationSequence().addPos(0, 0, 1, 50).addPos(0, 0, 1, 550).addPos(0, 0, 0, 200)) - .addBus("DRUM", new BusAnimationSequence().addPos(0, 0, 0, 600).addPos(0, 0, 1, 200)); + .addBus("HAMMER", new BusAnimationSequence().addPos(0, 0, 1, 50).addPos(0, 0, 1, 300).addPos(0, 0, 0, 200)) + .addBus("DRUM", new BusAnimationSequence().addPos(0, 0, 0, 350).addPos(0, 0, 1, 200)); case CYCLE_DRY: return new BusAnimation() - .addBus("HAMMER", new BusAnimationSequence().addPos(0, 0, 1, 50).addPos(0, 0, 1, 550).addPos(0, 0, 0, 200)) - .addBus("DRUM", new BusAnimationSequence().addPos(0, 0, 0, 600).addPos(0, 0, 1, 200)); + .addBus("HAMMER", new BusAnimationSequence().addPos(0, 0, 1, 50).addPos(0, 0, 1, 200).addPos(0, 0, 0, 200)) + .addBus("DRUM", new BusAnimationSequence().addPos(0, 0, 0, 350).addPos(0, 0, 1, 200)); case RELOAD: return new BusAnimation() .addBus("LATCH", new BusAnimationSequence().addPos(0, 0, 90, 300).addPos(0, 0, 90, 2000).addPos(0, 0, 0, 150)) .addBus("FRONT", new BusAnimationSequence().addPos(0, 0, 0, 200).addPos(0, 0, 45, 150).addPos(0, 0, 45, 2000).addPos(0, 0, 0, 75)) @@ -119,19 +119,4 @@ public class XFactory357 { return null; }; - - @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_DANI_ANIMS = (stack, type) -> { - switch(type) { - case EQUIP: return new BusAnimation().addBus("EQUIP", new BusAnimationSequence().addPos(360 * 3, 0, 0, 1000, IType.SIN_DOWN)); - case CYCLE: return new BusAnimation() - .addBus("RECOIL", new BusAnimationSequence().addPos(0, 0, 0, 50).addPos(0, 0, -3, 50).addPos(0, 0, 0, 250)) - .addBus("HAMMER", new BusAnimationSequence().addPos(0, 0, 1, 50).addPos(0, 0, 1, 300).addPos(0, 0, 0, 200)) - .addBus("DRUM", new BusAnimationSequence().addPos(0, 0, 0, 350).addPos(0, 0, 1, 200)); - case CYCLE_DRY: return new BusAnimation() - .addBus("HAMMER", new BusAnimationSequence().addPos(0, 0, 1, 50).addPos(0, 0, 1, 200).addPos(0, 0, 0, 200)) - .addBus("DRUM", new BusAnimationSequence().addPos(0, 0, 0, 350).addPos(0, 0, 1, 200)); - } - - return LAMBDA_ATLAS_ANIMS.apply(stack, type); - }; } diff --git a/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineSingleTypeBase.java b/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineSingleTypeBase.java index 343d45b1a..a6e4d9bb6 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineSingleTypeBase.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineSingleTypeBase.java @@ -19,7 +19,7 @@ public abstract class MagazineSingleTypeBase implements IMagazine public static final String KEY_MAG_PREV = "magprev"; public static final String KEY_MAG_AFTER = "magafter"; - protected List acceptedBullets = new ArrayList(); + public List acceptedBullets = new ArrayList(); /** A number so the gun tell multiple mags apart */ public int index; diff --git a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModBase.java b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModBase.java index ad3dc0b5a..3b8892776 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModBase.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModBase.java @@ -1,6 +1,10 @@ package com.hbm.items.weapon.sedna.mods; public abstract class WeaponModBase implements IWeaponMod { + + public static final int PRIORITY_MULTIPLICATIVE = 1_000; + public static final int PRIORITY_ADDITIVE = 500; + public static final int PRIORITY_MULT_FINAL = -1; public String[] slots; public int priority = 0; @@ -20,5 +24,5 @@ public abstract class WeaponModBase implements IWeaponMod { * @param Any value with the type that should be cast to * @return */ - public T fagSlop(Object arg, T castTo) { return (T) arg; } //TODO: rename this to something more tactful + public T cast(Object arg, T castTo) { return (T) arg; } } diff --git a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModGenericDamage.java b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModGenericDamage.java new file mode 100644 index 000000000..677d1f9ab --- /dev/null +++ b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModGenericDamage.java @@ -0,0 +1,23 @@ +package com.hbm.items.weapon.sedna.mods; + +import com.hbm.items.weapon.sedna.Receiver; + +import net.minecraft.item.ItemStack; + +public class WeaponModGenericDamage extends WeaponModBase { + + public WeaponModGenericDamage(int id) { + super(id, "GENERIC_DAMAGE"); + this.setPriority(PRIORITY_MULTIPLICATIVE); + } + + @Override + public T eval(T base, ItemStack gun, String key, Object parent) { + + if(parent instanceof Receiver && key == Receiver.F_BASEDAMAGE && base instanceof Float) { + return cast((Float) base * 1.33F, base); + } + + return base; + } +} diff --git a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModGenericDurability.java b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModGenericDurability.java new file mode 100644 index 000000000..577250b78 --- /dev/null +++ b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModGenericDurability.java @@ -0,0 +1,23 @@ +package com.hbm.items.weapon.sedna.mods; + +import com.hbm.items.weapon.sedna.GunConfig; + +import net.minecraft.item.ItemStack; + +public class WeaponModGenericDurability extends WeaponModBase { + + public WeaponModGenericDurability(int id) { + super(id, "GENERIC_DURABILITY"); + this.setPriority(PRIORITY_MULTIPLICATIVE); + } + + @Override + public T eval(T base, ItemStack gun, String key, Object parent) { + + if(parent instanceof GunConfig && key == GunConfig.F_DURABILITY && base instanceof Float) { + return cast((Float) base * 2F, base); + } + + return base; + } +} diff --git a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModLiberatorSpeedloader.java b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModLiberatorSpeedloader.java new file mode 100644 index 000000000..8d4070708 --- /dev/null +++ b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModLiberatorSpeedloader.java @@ -0,0 +1,57 @@ +package com.hbm.items.weapon.sedna.mods; + +import java.util.function.BiFunction; + +import com.hbm.items.weapon.sedna.GunConfig; +import com.hbm.items.weapon.sedna.Receiver; +import com.hbm.items.weapon.sedna.factory.XFactory12ga; +import com.hbm.items.weapon.sedna.mags.IMagazine; +import com.hbm.items.weapon.sedna.mags.MagazineFullReload; +import com.hbm.items.weapon.sedna.mags.MagazineSingleReload; +import com.hbm.render.anim.BusAnimation; +import com.hbm.render.anim.BusAnimationSequence; +import com.hbm.render.anim.BusAnimationKeyframe.IType; +import com.hbm.render.anim.HbmAnimations.AnimType; + +import net.minecraft.item.ItemStack; + +public class WeaponModLiberatorSpeedloader extends WeaponModBase { + + public static MagazineFullReload MAG = new MagazineFullReload(0, 4); + + public WeaponModLiberatorSpeedloader(int id) { + super(id, "SPEEDLOADER"); + } + + @Override + public T eval(T base, ItemStack gun, String key, Object parent) { + if(key == GunConfig.FUN_ANIMNATIONS) { return (T) LAMBDA_LIBERATOR_ANIMS; } + if(parent instanceof Receiver && base instanceof IMagazine && key == Receiver.O_MAGAZINE) { + MagazineSingleReload originalMag = (MagazineSingleReload) base; + if(MAG.acceptedBullets.isEmpty()) MAG.acceptedBullets.addAll(originalMag.acceptedBullets); + return (T) MAG; + } + + return base; + } + + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_LIBERATOR_ANIMS = (stack, type) -> { + switch(type) { + case RELOAD: return new BusAnimation() + .addBus("LATCH", new BusAnimationSequence().addPos(15, 0, 0, 100)) + .addBus("BREAK", new BusAnimationSequence().addPos(0, 0, 0, 100).addPos(60, 0, 0, 350, IType.SIN_DOWN)) + .addBus("SHELL1", new BusAnimationSequence().addPos(2, -4, -2, 0).addPos(2, -4, -2, 400).addPos(0, 0, -2, 450, IType.SIN_FULL).addPos(0, 0, 0, 50, IType.SIN_UP)) + .addBus("SHELL2", new BusAnimationSequence().addPos(2, -4, -2, 0).addPos(2, -4, -2, 400).addPos(0, 0, -2, 450, IType.SIN_FULL).addPos(0, 0, 0, 50, IType.SIN_UP)) + .addBus("SHELL3", new BusAnimationSequence().addPos(2, -4, -2, 0).addPos(2, -4, -2, 400).addPos(0, 0, -2, 450, IType.SIN_FULL).addPos(0, 0, 0, 50, IType.SIN_UP)) + .addBus("SHELL4", new BusAnimationSequence().addPos(2, -4, -2, 0).addPos(2, -4, -2, 400).addPos(0, 0, -2, 450, IType.SIN_FULL).addPos(0, 0, 0, 50, IType.SIN_UP)); + case RELOAD_END: return new BusAnimation() + .addBus("LATCH", new BusAnimationSequence().addPos(15, 0, 0, 0).addPos(15, 0, 0, 250).addPos(0, 0, 0, 50)) + .addBus("BREAK", new BusAnimationSequence().addPos(60, 0, 0, 0).addPos(0, 0, 0, 250, IType.SIN_UP)); + case JAMMED: return new BusAnimation() + .addBus("LATCH", new BusAnimationSequence().addPos(15, 0, 0, 0).addPos(15, 0, 0, 250).addPos(0, 0, 0, 50).addPos(0, 0, 0, 550).addPos(15, 0, 0, 100).addPos(15, 0, 0, 600).addPos(0, 0, 0, 50)) + .addBus("BREAK", new BusAnimationSequence().addPos(60, 0, 0, 0).addPos(0, 0, 0, 250, IType.SIN_UP).addPos(0, 0, 0, 600).addPos(45, 0, 0, 250, IType.SIN_DOWN).addPos(45, 0, 0, 300).addPos(0, 0, 0, 150, IType.SIN_UP)); + } + + return XFactory12ga.LAMBDA_LIBERATOR_ANIMS.apply(stack, type); + }; +} diff --git a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModManager.java b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModManager.java index 1a08b871b..066b55969 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModManager.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModManager.java @@ -8,6 +8,9 @@ import java.util.List; import com.google.common.collect.HashBiMap; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.ItemGunBaseNT; +import com.hbm.items.weapon.sedna.factory.GunFactory.EnumModGeneric; +import com.hbm.items.weapon.sedna.factory.GunFactory.EnumModSpecial; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumModTest; import net.minecraft.item.Item; @@ -35,14 +38,80 @@ public class WeaponModManager { public static void init() { /* ORDER MATTERS! */ - /* CTOR contains registering to the ID_LIST, avoid reordering to prevent ID shifting! */ - IWeaponMod TEST_FIRERATE = new WeaponModTestFirerate(0); - IWeaponMod TEST_DAMAGE = new WeaponModTestDamage(1); - IWeaponMod TEST_MULTI = new WeaponModTestMulti(2); + /* CTOR contains registering to the idToMod, avoid reordering to prevent ID shifting! */ + /// TEST /// + IWeaponMod TEST_FIRERATE = new WeaponModTestFirerate(0, "FIRERATE"); + IWeaponMod TEST_DAMAGE = new WeaponModTestDamage(1, "DAMAGE"); + IWeaponMod TEST_MULTI = new WeaponModTestMulti(2, "MULTI"); new WeaponModDefinition(new ItemStack(ModItems.weapon_mod_test, 1, EnumModTest.FIRERATE.ordinal())).addDefault(TEST_FIRERATE); new WeaponModDefinition(new ItemStack(ModItems.weapon_mod_test, 1, EnumModTest.DAMAGE.ordinal())).addDefault(TEST_DAMAGE); new WeaponModDefinition(new ItemStack(ModItems.weapon_mod_test, 1, EnumModTest.MULTI.ordinal())).addDefault(TEST_MULTI); + + new WeaponModDefinition(new ItemStack(ModItems.weapon_mod_generic, 1, EnumModGeneric.IRON_DAMAGE.ordinal())).addMod(ModItems.gun_pepperbox, new WeaponModGenericDamage(100)); + new WeaponModDefinition(new ItemStack(ModItems.weapon_mod_generic, 1, EnumModGeneric.IRON_DURA.ordinal())).addMod(ModItems.gun_pepperbox, new WeaponModGenericDurability(101)); + + Item[] steelGuns = new Item[] { + ModItems.gun_light_revolver, + ModItems.gun_light_revolver_atlas, + ModItems.gun_henry, + ModItems.gun_henry_lincoln, + ModItems.gun_greasegun, + ModItems.gun_maresleg, + ModItems.gun_maresleg_akimbo, + ModItems.gun_flaregun }; + Item[] duraGuns = new Item[] { + ModItems.gun_am180, + ModItems.gun_liberator, + ModItems.gun_congolake, + ModItems.gun_flamer, + ModItems.gun_flamer_topaz }; + Item[] deshGuns = new Item[] { + ModItems.gun_heavy_revolver, + ModItems.gun_carbine, + ModItems.gun_uzi, + ModItems.gun_uzi_akimbo, + ModItems.gun_spas12, + ModItems.gun_panzerschreck }; + Item[] wsteelGuns = new Item[] { + ModItems.gun_g3, + ModItems.gun_stinger, + ModItems.gun_chemthrower }; + Item[] ferroGuns = new Item[] { + ModItems.gun_m2, + ModItems.gun_autoshotgun, + ModItems.gun_autoshotgun_shredder, + ModItems.gun_quadro }; + Item[] tcalloyGuns = new Item[] { + ModItems.gun_lag, + ModItems.gun_minigun, + ModItems.gun_missile_launcher, + ModItems.gun_tesla_cannon }; + Item[] bigmtGuns = new Item[] { + ModItems.gun_stg77, + ModItems.gun_fatman, + ModItems.gun_tau }; + Item[] bronzeGuns = new Item[] { + ModItems.gun_lasrifle }; + + new WeaponModDefinition(EnumModGeneric.STEEL_DAMAGE).addMod(steelGuns, new WeaponModGenericDamage(102)); + new WeaponModDefinition(EnumModGeneric.STEEL_DURA).addMod(steelGuns, new WeaponModGenericDurability(103)); + new WeaponModDefinition(EnumModGeneric.DURA_DAMAGE).addMod(duraGuns, new WeaponModGenericDamage(104)); + new WeaponModDefinition(EnumModGeneric.DURA_DURA).addMod(duraGuns, new WeaponModGenericDurability(105)); + new WeaponModDefinition(EnumModGeneric.DESH_DAMAGE).addMod(deshGuns, new WeaponModGenericDamage(106)); + new WeaponModDefinition(EnumModGeneric.DESH_DURA).addMod(deshGuns, new WeaponModGenericDurability(107)); + new WeaponModDefinition(EnumModGeneric.WSTEEL_DAMAGE).addMod(wsteelGuns, new WeaponModGenericDamage(108)); + new WeaponModDefinition(EnumModGeneric.WSTEEL_DURA).addMod(wsteelGuns, new WeaponModGenericDurability(109)); + new WeaponModDefinition(EnumModGeneric.FERRO_DAMAGE).addMod(ferroGuns, new WeaponModGenericDamage(110)); + new WeaponModDefinition(EnumModGeneric.FERRO_DURA).addMod(ferroGuns, new WeaponModGenericDurability(111)); + new WeaponModDefinition(EnumModGeneric.TCALLOY_DAMAGE).addMod(tcalloyGuns, new WeaponModGenericDamage(112)); + new WeaponModDefinition(EnumModGeneric.TCALLOY_DURA).addMod(tcalloyGuns, new WeaponModGenericDurability(113)); + new WeaponModDefinition(EnumModGeneric.BIGMT_DAMAGE).addMod(bigmtGuns, new WeaponModGenericDamage(114)); + new WeaponModDefinition(EnumModGeneric.BIGMT_DURA).addMod(bigmtGuns, new WeaponModGenericDurability(115)); + new WeaponModDefinition(EnumModGeneric.BRONZE_DAMAGE).addMod(bronzeGuns, new WeaponModGenericDamage(116)); + new WeaponModDefinition(EnumModGeneric.BRONZE_DURA).addMod(bronzeGuns, new WeaponModGenericDurability(117)); + + new WeaponModDefinition(EnumModSpecial.SPEEDLOADER).addMod(ModItems.gun_liberator, new WeaponModLiberatorSpeedloader(200)); } public static ItemStack[] getUpgradeItems(ItemStack stack, int cfg) { @@ -104,7 +173,9 @@ public class WeaponModManager { if(checkMutex) for(int i : gun.stackTagCompound.getIntArray(KEY_MOD_LIST + cfg)) { IWeaponMod iMod = idToMod.get(i); - if(iMod != null) for(String mutex0 : newMod.getSlots()) for(String mutex1 : iMod.getSlots()) if(mutex0.equals(mutex1)) return false; //if any of the mod's slots are already taken + if(iMod != null) for(String mutex0 : newMod.getSlots()) for(String mutex1 : iMod.getSlots()) { + if(mutex0.equals(mutex1)) return false; //if any of the mod's slots are already taken + } } return true; //yippie! @@ -143,12 +214,28 @@ public class WeaponModManager { this.stack = stack; stackToMod.put(new ComparableStack(stack), this); } + + public WeaponModDefinition(EnumModGeneric num) { + this.stack = new ItemStack(ModItems.weapon_mod_generic, 1, num.ordinal()); + stackToMod.put(new ComparableStack(stack), this); + } + + public WeaponModDefinition(EnumModSpecial num) { + this.stack = new ItemStack(ModItems.weapon_mod_special, 1, num.ordinal()); + stackToMod.put(new ComparableStack(stack), this); + } public WeaponModDefinition addMod(ItemStack gun, IWeaponMod mod) { return addMod(new ComparableStack(gun), mod); } public WeaponModDefinition addMod(Item gun, IWeaponMod mod) { return addMod(new ComparableStack(gun), mod); } + public WeaponModDefinition addMod(Item[] gun, IWeaponMod mod) { for(Item item : gun) addMod(new ComparableStack(item), mod); return this; } public WeaponModDefinition addMod(ComparableStack gun, IWeaponMod mod) { modByGun.put(gun, mod); modToStack.put(mod, stack); + if(gun != null) { + ItemGunBaseNT nt = (ItemGunBaseNT) gun.item; + ComparableStack comp = new ComparableStack(stack); + if(!nt.recognizedMods.contains(comp)) nt.recognizedMods.add(comp); + } return this; } diff --git a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModTestDamage.java b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModTestDamage.java index bfde63994..214650bd7 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModTestDamage.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModTestDamage.java @@ -8,13 +8,14 @@ public class WeaponModTestDamage extends WeaponModBase { public WeaponModTestDamage(int id, String... slots) { super(id, slots); + this.setPriority(PRIORITY_MULT_FINAL); } @Override public T eval(T base, ItemStack gun, String key, Object parent) { if(parent instanceof Receiver && key == Receiver.F_BASEDAMAGE && base instanceof Float) { - return fagSlop((Float) base * 1.5F, base); + return cast((Float) base * 1.5F, base); } return base; diff --git a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModTestFirerate.java b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModTestFirerate.java index 5c5bf0af2..67aeb2157 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModTestFirerate.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModTestFirerate.java @@ -8,13 +8,14 @@ public class WeaponModTestFirerate extends WeaponModBase { public WeaponModTestFirerate(int id, String... slots) { super(id, slots); + this.setPriority(PRIORITY_MULT_FINAL); } @Override public T eval(T base, ItemStack gun, String key, Object parent) { if(parent instanceof Receiver && key == Receiver.I_DELAYAFTERFIRE && base instanceof Integer) { - return fagSlop(Math.max((Integer) base / 2, 1), base); + return cast(Math.max((Integer) base / 2, 1), base); } return base; diff --git a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModTestMulti.java b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModTestMulti.java index 7f5b89823..6c92fe6e3 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModTestMulti.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModTestMulti.java @@ -8,13 +8,14 @@ public class WeaponModTestMulti extends WeaponModBase { public WeaponModTestMulti(int id, String... slots) { super(id, slots); + this.setPriority(PRIORITY_MULT_FINAL); } @Override public T eval(T base, ItemStack gun, String key, Object parent) { if(parent instanceof Receiver && key == Receiver.I_ROUNDSPERCYCLE && base instanceof Integer) { - return fagSlop((Integer) base * 3, base); + return cast((Integer) base * 3, base); } return base; diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderFatMan.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderFatMan.java index 2ff627a40..100cb62e9 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderFatMan.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderFatMan.java @@ -121,6 +121,8 @@ public class ItemRenderFatMan extends ItemRenderWeaponBase { public void renderOther(ItemStack stack, ItemRenderType type) { GL11.glEnable(GL11.GL_LIGHTING); + ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem(); + boolean isLoaded = gun.getConfig(stack, 0).getReceivers(stack)[0].getMagazine(stack).getAmount(stack, null) > 0; Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.fatman_tex); GL11.glShadeModel(GL11.GL_SMOOTH); @@ -128,10 +130,10 @@ public class ItemRenderFatMan extends ItemRenderWeaponBase { ResourceManager.fatman.renderPart("Handle"); ResourceManager.fatman.renderPart("Gauge"); ResourceManager.fatman.renderPart("Lid"); + if(!isLoaded) GL11.glTranslated(0, 0, 3); ResourceManager.fatman.renderPart("Piston"); Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.fatman_mininuke_tex); - ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem(); - if(gun.getConfig(stack, 0).getReceivers(stack)[0].getMagazine(stack).getAmount(stack, null) > 0) ResourceManager.fatman.renderPart("MiniNuke"); + if(isLoaded) ResourceManager.fatman.renderPart("MiniNuke"); GL11.glShadeModel(GL11.GL_FLAT); } } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 4a688f5b0..ce5b85950 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -461,6 +461,7 @@ container.uf6_tank=UF6 Tank container.vacuumDistill=Vakuumraffinerie container.wasteDrum=Abklingbecken-Trommel container.watzPowerplant=Watzkraftwerk +container.weaponsTable=Waffenmodifikationstisch container.zirnox=ZIRNOX Atomreaktor crucible.aa=Herstellung - Fortgeschrittene Legierung @@ -4630,6 +4631,7 @@ tile.machine_turbofan.name=Turbofan tile.machine_uf6_tank.name=Uranhexafluorid-Tank tile.machine_vacuum_distill.name=Vakuumraffinerie tile.machine_waste_drum.name=Abklingbecken-Trommel +tile.machine_weapon_table.name=Waffenmodifikationstisch tile.machine_wood_burner.name=Brennholzgenerator tile.machine_wood_burner.desc=Erzeugt 100HE/t aus Items$Sammelt Asche$Kann 40mB/s Flüssigkeiten mit 50%% Effizienz verbrennen tile.machine_well.name=Ölbohrturm diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 90140273e..792b45bc3 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -866,6 +866,7 @@ container.uf6_tank=UF6 Tank container.vacuumDistill=Vacuum Refinery container.wasteDrum=Spent Fuel Pool Drum container.watzPowerplant=Watz Power Plant +container.weaponsTable=Weapon Modification Table container.zirnox=ZIRNOX Nuclear Reactor copytool.filter=Filter @@ -5760,6 +5761,7 @@ tile.machine_turbofan.name=Turbofan tile.machine_uf6_tank.name=Uranium Hexafluoride Tank tile.machine_vacuum_distill.name=Vacuum Refinery tile.machine_waste_drum.name=Spent Fuel Pool Drum +tile.machine_weapon_table.name=Weapon Modification Table tile.machine_wood_burner.name=Wood-Burning Generator tile.machine_wood_burner.desc=Generates 100HE/t when burning items$Collects ashes$Can burn fluids at 50%% efficiency at 40mB/s tile.machine_well.name=Oil Derrick diff --git a/src/main/resources/assets/hbm/textures/blocks/gun_table_bottom.png b/src/main/resources/assets/hbm/textures/blocks/gun_table_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..3e72319ac76e434936584116ac60e1639b9ec892 GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf zwQl5;WBZ`9{^m`tCy`I}Z@mA>FC+Bk(6Zd@oK(D_TEqKt4j0+N~q5M66fgY#d_(fb86CY!&iz*{Qp*PGlYCCO_Vsf zm4TtdLt!#c%I|Hv?^%b4K0o)w=bI=?*~z-6&MtENYs$_sub2GMn#!(nU-8*8nT$Bq z6a(dY-)&NSJUMGwf2%B96%cwQs-0PwTe4#JwUp%@KFoHuH@nZA3-Wrw%Ve#zxn`Zu zx~*(No_D^>=2WvkPXAQ>{hsp%u|?|9?;{ewg{)3zZIE|cvBuxu_QNNjKNvh+{an^L HB{Ts5Geco% literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/blocks/gun_table_top.png b/src/main/resources/assets/hbm/textures/blocks/gun_table_top.png new file mode 100644 index 0000000000000000000000000000000000000000..70893a92d3a159646df39771540bc7add1b8f0d4 GIT binary patch literal 289 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 literal 18987 zcmYIw1z1#F)b631p;Kw3q`N~w5RmT106}S`nE?dpln`kHkWw0v20 z^laZWHQ*Y0YG#JkR}IbuI-=V>EczU-nFg_^AHE_Y6LWKK(Xg_T0kb~?Yb)GE?%w4A zj`nIt2QY~ukWa-pu$XtmfSO$y{rldN92Rj^pBh3`qj~veuyvcU3cWJmT5k=&#$Dh1 zev;N(QcMIJdvpIxMz*-InYv*SoB7`*W=Ri1AmqYIz#gT22QCr>WTys^4Z>T8)#*K zllymhfAs%m0o1m1gn${Y_0!KI6M=se3PZkc*INtg-Ju0Ko=B*dPyLX>{l1OtDnTh+ z9(cRqhm5;RjRUY!{)-LN0Yp7_q=HkHpxR!f#y!!6IIlVnO(w-8~j_|C_t zsd;%6K)^T zIUDzJgPpNadMDLHLk$Tm#HoVcxXjBQWfTz3V$;10{(xnz#R&`y6k|yQmd(+Gk>My? zQ`7rZchTaj7AoN*amu+(I9scbslN^+v4Gli-~F{D#mwTb|5yPpA&laIrJHIM1)yz; zzQ6F@QQ)f^q!zUpgH0lM9rl(Ph-qiSp~qgG?;2TK4@{vaskYnBcW3Yb%G(NW()kS1 z@)Z4jX4(T!pWWf(ds|Mv*GFTaMTHAwxfyWZQKSb8yzRrUhAR+*+oRMsj}<=065cOx zjs7=`;^}2i&x>Q4hB?`qfY&&;Uo@?DY!!Tfvbp(* enhJshPtlDn1HHEyX!Ifnq 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 diff --git a/src/main/resources/assets/hbm/textures/items/ammo_standard.p45_ap.png b/src/main/resources/assets/hbm/textures/items/ammo_standard.p45_ap.png new file mode 100644 index 0000000000000000000000000000000000000000..9e91d888a6857df6834e32eb2f4bf0b5ea09a674 GIT binary patch literal 291 zcmV+;0o?wHP)$j_UshyZ-R7N1rxfFEU_} ze!GrK%t&(*@9Og9fdcVc^ULnD_eVas#Z_~8NA?Ws^vyaNcKTXh4zFz&yLH!0OrASu zpV_uK`u$FMHIEPdv~vHvuk%*!*;P$T8N|@8s* zMR#a%6kIR0c&~3Ur*F2(`3{cLn^LkxZ*p7SwJ_6Mtg?>befZgpo+slXLa)yEu>0hf xEqYvSskVTAA?t~_M-NOrO>Cy`;jK62e?EKi`u?>nyMeA}@O1TaS?83{1OUlIUf2Kt literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/ammo_standard.p45_jhp.png b/src/main/resources/assets/hbm/textures/items/ammo_standard.p45_jhp.png new file mode 100644 index 0000000000000000000000000000000000000000..687469728ac4c551face10b16094034f12c1fead GIT binary patch literal 293 zcmV+=0owkFP)SOahJ}GqfPL7(L+Q_JUG*i9)RuO7ciE8)v_or(?*ZE6CfF zo~`kd+}GeTIdWK(VJL0xbCU+Y>jjUP16i)5-15XCs5)TGCf

literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/ammo_standard.p45_sp.png b/src/main/resources/assets/hbm/textures/items/ammo_standard.p45_sp.png new file mode 100644 index 0000000000000000000000000000000000000000..8f48f40903f703c64bbc4ebdc33ac22c94aca90e GIT binary patch literal 290 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf~nA4yBKR2BF|F^QFhj~i9%HjY2-@o;| m+;di7lBu$^)3&r(Obk2b_4Zo+E8+xtlEKr}&t;ucLK6Vrb%5Uh literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/ingot_metal_sheet.png b/src/main/resources/assets/hbm/textures/items/ingot_metal_sheet.png index 29693d23893318904736e5bd7b7911fb922dcc70..3697db98cf314a2c83edea391c7156e6624070ae 100644 GIT binary patch literal 6720 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 UQxkN@{1O7FC}}>gQM3sA5Bd7_$p8QV literal 6766 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/weapon_mod_generic.bronze_dura.png b/src/main/resources/assets/hbm/textures/items/weapon_mod_generic.bronze_dura.png new file mode 100644 index 0000000000000000000000000000000000000000..5ae1544967ed9d0c80e4953fdfc82a8f8fe276f3 GIT binary patch literal 302 zcmV+}0nz@6P)%`L zDDC3l8V8$LYSCIBg#0hzy}aZP{0Y&;c^j(zAvGJNSj<;D0XVHa<%gLh8&6GVnP?6$ z)PnsXr4-8;9PcAj`{7fh(wCXu8+3`8Y&^vU{ADIwD*lVXbe0KYI4wNIxZ+KNQY?=5 zkr~(WW(;&}nY^yk<={?`=0XqzDvo1p+XldOUD|jQMF2ARLk!g3ppO`8{~*tEilPAc zI@i(KM#phJ@~;NJpw*xmwJkbT2m2;?YkzM%0D&ifE=xfe_5c6?07*qoM6N<$g5Rfl Aga7~l literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/weapon_mod_generic.desh_damage.png b/src/main/resources/assets/hbm/textures/items/weapon_mod_generic.desh_damage.png new file mode 100644 index 0000000000000000000000000000000000000000..308e4b273be6bf661ad025b6944c89c3d0570682 GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfwHDliV3U-o!=;LOXNLykgLd#`(jg2LpW z{m5P8%(lPTsULq?MCue+go?>c5fA?mW#_VR%AJEpc*Wi(7`ufXGMHj>eq*jQ!%~r8 z8{c4t?CpsXFLVpf8XVZCz2(}KQeK1Ezh~Gieryr{bIk$$86px2cgrPo)+Do{#-}8;P=KA$9HG4ncqDeaA}(``>~+a)7LRC;Am>R ze3aKOQ;R|9@)dCz8~=AY*&B|T?tJgR3jU=OuFs?33CFxnF#31(2SebkL|!v_g$+R8 OFnGH9xvX!Y>+WHZUC8TXQ$s z`O?#m&N6aK7gVTA=4`m<>Bw+1aVf{VJ>9MESI^AdzDiX7GmqM0an&xRsmnC`9y2_s zlvA6h!r8Dvt%EVQBl!r!=Vt-aR6|1@AP@?lm!2u?b~y_R31Hxo|0?NjhuAH8+kEZXz{j&z(Ov zd%H2Wv7(f6SDzKnV>886w@GhYzkfRW`OB}Omq(}d3bq*rrR6Ttk>Bgbe*b#NRfmI* zqF3JD#r9y|%@>|5t3O9FJehX2d%OPxqt_?HUS+A=n(KFH#*8k;XaN?h^Tj#0*$$M( z`qa%@#*k#VSmFgwp_gGvTZ9O!muADo&D@WrWRL%R(J%CeN%`RJkjW)+(sNclsGt9m Z^Nm>gf7x!X%|L%Kc)I$ztaD0e0s!5dZ%hCH literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/weapon_mod_generic.ferro_dura.png b/src/main/resources/assets/hbm/textures/items/weapon_mod_generic.ferro_dura.png new file mode 100644 index 0000000000000000000000000000000000000000..96e5d22ab04da7a280750753c4a10ef6b0ddfe86 GIT binary patch literal 308 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfiTxaFI`$taa>W0YHA5Yl0s+HrEZ$^jJJ@Wvq<+=Lr zGGZ;6tvA=)c{KfGe$&Yb|D0uxFVo<%InS)X!PHhUEtSD&wgTI`e+fMj33=ViGA~3i z+w6UBxWn!Kcll4t+1@8ySRh}jVRe`7xZ02H|1R!es;FxVU|k-47wByUPgg&ebxsLQ E05iaRKmY&$ literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/weapon_mod_generic.iron_damage.png b/src/main/resources/assets/hbm/textures/items/weapon_mod_generic.iron_damage.png new file mode 100644 index 0000000000000000000000000000000000000000..ea6534b216fb3acc70a8480af26b9e95e7979c49 GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfSe-XQLy=_(#SB9D5EJYcHRa*s_HVLxEZ~nab^Ru^S z4*9J(XmCto?bjIsf{!f1E}#CcVDNm^tfPI+3%9zt9CL}izS(cPhEd5~r-KipS5Du@ z{y?xTP59tS9Z`pe7Mp+kU=f^o((m#WuadLHslGW!n{+*ef<;)@y=Hpw+s@4Xv=Kw; zjX)lswjE0))SPo>wQb8~3_Gv6Ci{!c`^EdcK5(yLc^{N}sWP`JGg5YC S_C5f5h{4m<&t;ucLK6T7u5Ky- literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/weapon_mod_generic.iron_dura.png b/src/main/resources/assets/hbm/textures/items/weapon_mod_generic.iron_dura.png new file mode 100644 index 0000000000000000000000000000000000000000..d6992943b42848c9d7255f758174f5c3c7193637 GIT binary patch literal 286 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf~6 z*U$2gRZwv4*6vL@sk2NgH5h(bJ?Ug#vGPJx_ttBiQpp~ZTx>fe6q+ouW9z?nTGz@> zd+fd1pj=&^TgHE_QqwaTu8Sw8GhK`7G1Ti?RKVmb=QU@mmn_@w&(eQ*w&pC!)GCdA zTq(!kD6rw!>QzhuyXB`f-sIh;!~ACXqSscx_OVyYejZV~`2BDFpV5u^8?-iT*_Af; hV{^2u&E9(BymbA}oque8Y63mT;OXk;vd$@?2>^;6Zngjb literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/weapon_mod_generic.steel_damage.png b/src/main/resources/assets/hbm/textures/items/weapon_mod_generic.steel_damage.png new file mode 100644 index 0000000000000000000000000000000000000000..b507fa059b19c21472b686c66ddf639f38bc9b4e GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfJ{W?QH@RLpWV1u~u+mdg0|WdAn3PpO!^yeAqX&>Qyzv zy26}r!8fm?7(@2iclY}XOq`jM+%x$_%(PQ8Bf43mXD!>dN~=kML7_`2rY=x~;neL5 zJU(qZmPx8P=iHvQ?lptmykLv#5^WEo|0^HVFA&<}RqFYCXO^E^{5HKOSPhvz#Bpruy2kT70D>T3j#pI$Ae$9p;NcIJhyk{?==+{w7y#bh zkCo_$+QXt6MS^eFG=mObq_f|eXntjpzs9smM zk@-!_jNVPFLKL4)Qb>#W9P?uO`@%JTrMXA=HV1leCdCQWUYDGkm$}M-N1OHD_Mr2R zIT$KbI*XJnjJO#T?wdb4E!=T)Lacf3)E7b14$Ue!+NFEi$km0T3Fux|!JK_Hxjq%v zU5pvdC7Nto6u0Ge=Se-fw({_4 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/weapon_mod_generic.tcalloy_dura.png b/src/main/resources/assets/hbm/textures/items/weapon_mod_generic.tcalloy_dura.png new file mode 100644 index 0000000000000000000000000000000000000000..518d86057fc02eba93349700e756a30e388d89d3 GIT binary patch literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfyUwn%YAYF3$B_XB5#&fvDr3rhv)5SkUNPxOZ~OW zZ+>&N<1OyWdDd%914S4osBp%{*a}a+D1X-BF>jlR^JDpt(AKq^|C^a#luVX6F8?#U rG5&()g>AP|=UN?H$an9Nd=IgTe~DWM4fg#L8S literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/weapon_mod_generic.wsteel_damage.png b/src/main/resources/assets/hbm/textures/items/weapon_mod_generic.wsteel_damage.png new file mode 100644 index 0000000000000000000000000000000000000000..77eddcd86dc0150683033439e63fdf5cc24817fc GIT binary patch literal 285 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf??Qev~_Nv_rQqIeeO` zqX2_|tDv3z`C^96KNd>7FfH^m{4y&dRJ1gfx#rGqiL;Cj5^ec^`&sTE@cy86RekPr g{&S%p_9s>`?9RmdKI;Vst0BXK*WB>pF literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/weapon_mod_generic.wsteel_dura.png b/src/main/resources/assets/hbm/textures/items/weapon_mod_generic.wsteel_dura.png new file mode 100644 index 0000000000000000000000000000000000000000..70331a8528a7a311f534b00853d68351efff07b9 GIT binary patch literal 306 zcmV-20nPr2P)G&KAvunEH*VCp$-)m9 zjPIad#7Z1nBz$KYX?B^>tR(mnCT!}u_RhISLshA&$^cx?xi5~L(M#^-(3!viwn5;W z!&(b~h@h$uv*LIc`QN8m=xyeaLpF literal 0 HcmV?d00001 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 new file mode 100644 index 0000000000000000000000000000000000000000..a3b0cc89d856680fdcff3b1829e7da5c0de43ede GIT binary patch literal 1973 zcmV;m2TJ&fP)~hG5S-#7MNlN9$TEo`O{x`zIfNA1 zMU*JlKyj4lgixe#1wlG!?Ir|Fifa&xAlBieCP6MXIpu;kLRj2xZk?qd3ZS7_|IO@p z);sI-L5}!IE3aqg&CGu@^Jo9J89xV(0odnY(7_xJIQ)$#l-MEnlbzQ`+1gU=j=ytmRfP6j=QH&^litfpH0LesvKU)hQF5&*eKJMOG z$7dfb4Yko|G?Zg94dsF+Tt0RWjy2C5m7L4&j`E8qeM z1U-53Bmf|r&7xYZ4z<;2G`Ol9@V8PXlffvTK*kRYXXFs``8@LZJi6Vk(kBcRY)1r{ zOUBcEtJNCGA6Ep~cq$h~Ajl#pI~zv?8a#1r+Xev4&dve=_V3@XCE~aut6+EM3R`)HlTCK9h`2)Oj@AtrX)$-Q?iO^^?7&%QJVqh==<#L(Rb^Q2o4h-Um z2>$Z&G8dOIam6~L_$r(~J;xX44{%!ky8L`TAJh?z_v45J1CWh~8-Of=j3ffc#wXB#vqgv-bC1(IXN3k6dGMNkjfA*t-vCxZ9 zyWI}%d%a$$qAbd&&Z%Q~XYts4003IAz@qU4-F$=!mSw@RtdVs>0+dRn;69hjLEH-R zwur-9AHNjbFI+jAhzlT5dQP?XX~t>R#T*6jMA%?SR4Nq?_=c*sK)>I|nKNf%og#&- zz>`;I3Z;SJJs4$-m{^Gm#l=2}D=&As4z-s8{Jl>zY?>x|y>e01xn8W`k^@0p-Y}^8jDzm+D-w(dq0=Uq2KQZpQTa>g+c+XRx1!_ln9>Z z!F63&mW6J&3(xbkj3*?GLMgza3kds;TCK({%NnW^2%y^gg+c+nUJr#rArMIP3sFw- z$dMzFhKZ@EI3$Te<>gK*kA7rP@rW}6_$xqka-wmjX`<8Vuu7%E#Vv9D`gP@gbX^zU zezb`_g}?FGd;sU(CbBR71?S!-7Ov#Aj28zJg2q^$)Hk&MJ?^9Bv z*=#b}5~G~p#>PhI1RyM2Ihtr25JZD@j5iE}i|4+03drF&0Qk}1Ad0F~D%>>9;3N<; zIx6sU;Ou)Iioy;ZI>cvZXM;@e*47sG?%j*6tt|k+ty{O)D1H*ie8Vuf=Xpq{(?chQ zXgrC+&mkNO(9Cu^opHv40hg(i2ExYg1jy*9{#7ez*W?3sioa{}0XxP2U*-dn@ME*W zgm>SY=kLBZKXzxuVv!e%#YleQKW9t`Dc!%7{I=;wb#K3OBIGl4`HtfN01h5JsN`Fg z6(lWm2cM+>NIu}t?r)n9@WS)^LeHt};wN8*>H)yzOWy?@7mG#iI1aMeY=}=~H*VZu zVm$!3efzfZhuL&GjksTeCy5!rH zn>8BIWo{V8kYk**@xkoqdU)~& zGDdlL5#$ea5akofnvn z1R2?EmJdFa&sE+(4m)`|L^ei3hHHECGP92s(eY(M4<{vJkEBeoWM{ zEQI4YV-K7}n3VB868yX@Bk9l6+vRWf{{^c4wPS&&0h99lBK%W;R2(Co-tGKpKH$HO z$Ny{ouJQp>Ofkh2Q%o_%6jMwwN$jG0z)tX=`B>nY&jQYXTQxEMbhj8 x%-R+HX2ODLE3{e#+HN+dtU987F!{&kHGW0zPOEbaWPxsB@O1TaS?83{1OQSqNtplu literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/weapon_mod_special.choke.png b/src/main/resources/assets/hbm/textures/items/weapon_mod_special.choke.png new file mode 100644 index 0000000000000000000000000000000000000000..d3f0ad6911de7b947aa83f9093915a8019754485 GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf@w1g%P9f$pVFBg2dRd;QE-{&OOisd0&S7uf3 zIdi6WroQ90Ld)lWggF%FIBmOnpqk&9S#YkC-QtgHW4#)S`4}8r42+LREdP_j(9rRv z`@ceagY|@`{6Su}A=#`9Gj2|aHnYewYSQ<1xy4a6v8-L&Uh>h5QyM^5F?hQAxvXp&H>^1Fy*(ZaW7+;ke)ZFqHo}8bg=d#Wzp$PyOMNNGG literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/weapon_mod_special.greasegun.png b/src/main/resources/assets/hbm/textures/items/weapon_mod_special.greasegun.png new file mode 100644 index 0000000000000000000000000000000000000000..ea4abf21626241b411baf05d0d1edbe451bd4543 GIT binary patch literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vfl%TebP0l+XkKx(8qI literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/weapon_mod_special.saw.png b/src/main/resources/assets/hbm/textures/items/weapon_mod_special.saw.png new file mode 100644 index 0000000000000000000000000000000000000000..857cddd6b896cdd87b2dcd33d1c0994e85c2b1cc GIT binary patch literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfwO`XZJcb82jg0}*XZQAzY(lz-Fxg>A(zlPhYuP;EJ?1eo?2|q=6@Ha zN~_I$6tKhKBc&TkGbcfOpnG@Rnk(9yB?`@;z;o+d0VN4zxi-cJd-<7aZ(Mmk93 z=!zHo3f=oWvUQIs+`cOL`V~v|lRqkz(>~R0Ph{BO)>b#+L9kG^%6&P1nZ9yHhJ9cM literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/weapon_mod_special.scope.png b/src/main/resources/assets/hbm/textures/items/weapon_mod_special.scope.png new file mode 100644 index 0000000000000000000000000000000000000000..99d697e626f2b51007de2b41c3da8be076c2aa42 GIT binary patch literal 367 zcmV-#0g(QQP)64HY%@uGHNK~(YfS#^hnz;tkifJ&LuC3uF zs@k*y>>)Yrxq&mq7dF^hv3-i4?>z6%fxn(S&t0D9?$Q0H;X#1)cGG`yWm$Un0JGuC zdb^>$U1@Ju02YhIT_>|%{rPo8d%JQzo_Kp%VT{4|eSuU}H3<_3=i`a<@x=c9V^XQ> zx=Dy+>^o?h2BnlNSZe`Dk_3SHd`^~S-Ut8?$FV3VrQ~q`T-WueREbbkl^ZTxE*G@c z;vx*g$x;QNwHC+_q_svVH7a#7LQxbh2m;9%MUe}FKw<#+zK=16-EQZ7aR9JfF1_9f zz~OKZfxZu8%yfjGAZeP)KWi=4T2cRXilT7CdynJT4R7h8`40J)`2@?Dp($FL7gYcN N002ovPDHLkV1gV(po{uiKJ6E3&w} zgX4~@<#XLU?**%RXD*L(sZpIdEA864*G?`z3!=0;GQ5j=_{-hChS%kTGACHG`F>)XYPpi?6k>>=PJ8beD3AV7%xV_hc@T07*{ymsg(a87aHyIKA_(iJYD@<);T3K0RWXwaybA1 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/weapon_mod_special.speedloader.png b/src/main/resources/assets/hbm/textures/items/weapon_mod_special.speedloader.png new file mode 100644 index 0000000000000000000000000000000000000000..7fd3c5f4902d8c24166a68c6b89766c269f4141a GIT binary patch literal 249 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfyyawPc-P6n zkhQkMa9fmikeB$+(_ETN7h0{~-ALFY;Pm3%s;)Vo7nPrW%eYj8q2c?#6_pn+ioNg% zzwP1@CGY4W_4v}wV_T*4F88u*?3QtwVY2F%=DqK>y$VXbf|iS}e)#i0Ji^N8*NYvG vxAD3xS*f+>`{{n^@(t3dO|dsRe{k)UrqMHRbz$fBnhxKdLUaa=mc}- UV!!NL1`GxUPgg&ebxsLQ00Rz(^#A|> literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/weapons/g3-polymer.png b/src/main/resources/assets/hbm/textures/models/weapons/g3_polymer.png similarity index 100% rename from src/main/resources/assets/hbm/textures/models/weapons/g3-polymer.png rename to src/main/resources/assets/hbm/textures/models/weapons/g3_polymer.png diff --git a/src/main/resources/assets/hbm/textures/models/weapons/g3_polymer_black.png b/src/main/resources/assets/hbm/textures/models/weapons/g3_polymer_black.png new file mode 100644 index 0000000000000000000000000000000000000000..c54829488ad2cf89b2c777017d90852588bcfe21 GIT binary patch literal 11071 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/weapons/greasegun_clean.png b/src/main/resources/assets/hbm/textures/models/weapons/greasegun_clean.png new file mode 100644 index 0000000000000000000000000000000000000000..bd6e34a6940b0f76120da3d21e1c2741e5e8b933 GIT binary patch literal 4385 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 bCrbPuB0iiW9QPBs00000NkvXXu0mjf?8shJ literal 0 HcmV?d00001