From d6c15c8ff2d5e235a9c32706bc7091288bc4d6e8 Mon Sep 17 00:00:00 2001 From: Bob Date: Sun, 23 Mar 2025 21:46:56 +0100 Subject: [PATCH] the malicious gigglefish from the silly dimension --- changelog | 7 ++++- gradle.properties | 2 +- src/main/java/api/hbm/fluid/IFluidUser.java | 0 .../java/com/hbm/crafting/WeaponRecipes.java | 16 +++++++++++ .../inventory/recipes/AmmoPressRecipes.java | 17 ++++++++--- .../hbm/items/weapon/sedna/ItemGunBaseNT.java | 19 ++++++++++-- .../weapon/sedna/factory/GunFactory.java | 3 +- .../weapon/sedna/factory/XFactory556mm.java | 2 +- .../weapon/sedna/factory/XFactory9mm.java | 27 +++++++++++++++++- .../weapon/sedna/mods/WeaponModManager.java | 11 ++++++- .../weapon/sedna/mods/WeaponModOverride.java | 22 ++++++++++++++ src/main/java/com/hbm/lib/RefStrings.java | 2 +- src/main/java/com/hbm/main/ClientProxy.java | 10 +++---- .../packet/toclient/GunAnimationPacket.java | 4 +-- .../com/hbm/render/anim/HbmAnimations.java | 8 ++++-- .../weapon/sedna/ItemRenderWeaponBase.java | 10 +++++++ .../machine/storage/TileEntityBarrel.java | 8 +++++- .../storage/TileEntityMachineFluidTank.java | 16 ++++++----- src/main/resources/META-INF/HBM_at.cfg | 2 ++ src/main/resources/assets/hbm/lang/de_DE.lang | 10 +++++++ src/main/resources/assets/hbm/lang/en_US.lang | 10 +++++++ .../items/weapon_mod_test.override_10.png | Bin 0 -> 267 bytes .../items/weapon_mod_test.override_12_5.png | Bin 0 -> 267 bytes .../items/weapon_mod_test.override_15.png | Bin 0 -> 267 bytes .../items/weapon_mod_test.override_20.png | Bin 0 -> 267 bytes .../items/weapon_mod_test.override_2_5.png | Bin 0 -> 267 bytes .../items/weapon_mod_test.override_5.png | Bin 0 -> 267 bytes .../items/weapon_mod_test.override_7_5.png | Bin 0 -> 267 bytes 28 files changed, 175 insertions(+), 31 deletions(-) delete mode 100644 src/main/java/api/hbm/fluid/IFluidUser.java create mode 100644 src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModOverride.java create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_test.override_10.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_test.override_12_5.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_test.override_15.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_test.override_20.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_test.override_2_5.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_test.override_5.png create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_test.override_7_5.png diff --git a/changelog b/changelog index b970bea8a..7514dcf6c 100644 --- a/changelog +++ b/changelog @@ -44,6 +44,10 @@ * Crates will not longer show their contents when locked * Crates found in structures will sometimes contain things that aren't items * Beam weapons are no longer pinpoint accurate when firing unscoped +* Reduced the recoil animation's intensity on the G3 by 66%, unless if the stock is sawed off +* The comically long pistol no longer cancels the inspect animation when fired while inspecting + * Instead, it will fire where the gun is pointing, at the player's face + * There's no special animation for this, since in survival mode, that would be lethal anyway ## Fixed * Fixed animation errors on the MAS-36 @@ -56,4 +60,5 @@ * 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 -* Fixed fat man's piston not being extended correctly in non-first person rendering when unloaded \ No newline at end of file +* Fixed fat man's piston not being extended correctly in non-first person rendering when unloaded +* Fixed weapon equip animation not playing when switching between two weapons of the same type diff --git a/gradle.properties b/gradle.properties index 7e329bde9..ca8db7f3d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=5257 +mod_build_number=5278 credits=HbMinecraft,\ \ rodolphito (explosion algorithms),\ diff --git a/src/main/java/api/hbm/fluid/IFluidUser.java b/src/main/java/api/hbm/fluid/IFluidUser.java deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/main/java/com/hbm/crafting/WeaponRecipes.java b/src/main/java/com/hbm/crafting/WeaponRecipes.java index 5ba032b13..6ae2883c3 100644 --- a/src/main/java/com/hbm/crafting/WeaponRecipes.java +++ b/src/main/java/com/hbm/crafting/WeaponRecipes.java @@ -16,6 +16,7 @@ import com.hbm.items.ModItems; import com.hbm.items.weapon.GunB92Cell; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmoSecret; +import com.hbm.items.weapon.sedna.factory.GunFactory.EnumModSpecial; import com.hbm.main.CraftingManager; import net.minecraft.init.Blocks; @@ -96,6 +97,21 @@ public class WeaponRecipes { CraftingManager.addRecipeAuto(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.STONE_SHOT, 6), new Object[] { "C", "P", "G", 'C', Blocks.gravel, 'P', Items.paper, 'G', Items.gunpowder }); CraftingManager.addRecipeAuto(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.STONE_IRON, 6), new Object[] { "C", "P", "G", 'C', IRON.ingot(), 'P', Items.paper, 'G', Items.gunpowder }); + //SEDNA Mods + CraftingManager.addRecipeAuto(new ItemStack(ModItems.weapon_mod_special, 1, EnumModSpecial.SILENCER.ordinal()), new Object[] { "P", "B", "P", 'P', ANY_PLASTIC.ingot(), 'B', STEEL.lightBarrel() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.weapon_mod_special, 1, EnumModSpecial.SCOPE.ordinal()), new Object[] { "SPS", "G G", "SPS", 'P', ANY_PLASTIC.ingot(), 'S', STEEL.plate(), 'G', KEY_ANYPANE }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.weapon_mod_special, 1, EnumModSpecial.SAW.ordinal()), new Object[] { "BBS", "BHB", 'B', STEEL.bolt(), 'S', KEY_STICK, 'H', DURA.plate() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.weapon_mod_special, 1, EnumModSpecial.SPEEDLOADER.ordinal()), new Object[] { " B ", "BSB", " B ", 'B', STEEL.bolt(), 'S', WEAPONSTEEL.plate() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.weapon_mod_special, 1, EnumModSpecial.SLOWDOWN.ordinal()), new Object[] { " I ", " M ", "I I", 'I', WEAPONSTEEL.ingot(), 'M', WEAPONSTEEL.mechanism() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.weapon_mod_special, 1, EnumModSpecial.SPEEDUP.ordinal()), new Object[] { "PIP", "WWW", "PIP", 'P', WEAPONSTEEL.plate(), 'I', GUNMETAL.ingot(), 'W', GOLD.wireDense() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.weapon_mod_special, 1, EnumModSpecial.GREASEGUN.ordinal()), new Object[] { "BRM", "P G", 'B', WEAPONSTEEL.lightBarrel(), 'R', WEAPONSTEEL.lightReceiver(), 'M', WEAPONSTEEL.mechanism(), 'P', DURA.plate(), 'G', ANY_PLASTIC.grip() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.weapon_mod_special, 1, EnumModSpecial.CHOKE.ordinal()), new Object[] { "P", "B", "P", 'P', WEAPONSTEEL.plate(), 'B', DURA.lightBarrel() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.weapon_mod_special, 1, EnumModSpecial.FURNITURE_GREEN.ordinal()), new Object[] { "PDS", " G", 'P', ANY_PLASTIC.ingot(), 'D', KEY_GREEN, 'S', ANY_PLASTIC.stock(), 'G', ANY_PLASTIC.grip() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.weapon_mod_special, 1, EnumModSpecial.FURNITURE_BLACK.ordinal()), new Object[] { "PDS", " G", 'P', ANY_PLASTIC.ingot(), 'D', KEY_BLACK, 'S', ANY_PLASTIC.stock(), 'G', ANY_PLASTIC.grip() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.weapon_mod_special, 1, EnumModSpecial.SKIN_SATURNITE.ordinal()), new Object[] { "BRM", " P ", 'B', BIGMT.lightBarrel(), 'R', BIGMT.lightReceiver(), 'M', BIGMT.mechanism(), 'P', BIGMT.plate() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.weapon_mod_special, 1, EnumModSpecial.STACK_MAG.ordinal()), new Object[] { "P P", "P P", "PMP", 'P', WEAPONSTEEL.plate(), 'M', BIGMT.mechanism() }); + CraftingManager.addRecipeAuto(new ItemStack(ModItems.weapon_mod_special, 1, EnumModSpecial.BAYONET.ordinal()), new Object[] { " P", "BBB", 'P', WEAPONSTEEL.plate(), 'B', STEEL.bolt() }); + //Nitra! CraftingManager.addShapelessAuto(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.M357_SP, 6), new Object[] { DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.M357_SP), ModItems.nitra }); CraftingManager.addShapelessAuto(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.M44_SP, 6), new Object[] { DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.M44_SP), ModItems.nitra }); diff --git a/src/main/java/com/hbm/inventory/recipes/AmmoPressRecipes.java b/src/main/java/com/hbm/inventory/recipes/AmmoPressRecipes.java index 557ee78e3..de3fd9e09 100644 --- a/src/main/java/com/hbm/inventory/recipes/AmmoPressRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AmmoPressRecipes.java @@ -39,6 +39,7 @@ public class AmmoPressRecipes extends SerializableRecipe { OreDictStack copper = new OreDictStack(CU.ingot()); OreDictStack plastic = new OreDictStack(ANY_PLASTIC.ingot()); OreDictStack uranium = new OreDictStack(U238.ingot()); + OreDictStack ferro = new OreDictStack(FERRO.ingot()); ComparableStack smokeful = new ComparableStack(Items.gunpowder); OreDictStack smokeless = new OreDictStack(ANY_SMOKELESS.dust()); ComparableStack rocket = new ComparableStack(ModItems.rocket_fuel); @@ -195,6 +196,10 @@ public class AmmoPressRecipes extends SerializableRecipe { null, uranium.copy(2), null, null, smokeless.copy(4), null, null, sSmall.copy(2), null)); + recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.R762_HE, 12), + he, ferro, null, + null, smokeless.copy(4), null, + null, sSmall.copy(2), null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.BMG50_SP, 12), null, lead.copy(2), null, @@ -216,6 +221,10 @@ public class AmmoPressRecipes extends SerializableRecipe { null, uranium.copy(2), null, null, smokeless.copy(6), null, null, sBig, null)); + recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.BMG50_HE, 12), + he, ferro, null, + null, smokeless.copy(6), null, + null, sBig, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.G12_BP, 6), null, nugget.copy(6), null, @@ -259,21 +268,22 @@ public class AmmoPressRecipes extends SerializableRecipe { null, nugget.copy(8), null, null, smokeless.copy(2), null, null, sShell, null)); - recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.G10_SHRAPNEL, 4), plastic, nugget.copy(8), null, null, smokeless.copy(2), null, null, sShell, null)); - recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.G10_DU, 4), null, uranium, null, null, smokeless.copy(2), null, null, sShell, null)); - recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.G10_SLUG, 4), null, lead, null, null, smokeless.copy(2), null, null, sShell, null)); + recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.G10_EXPLOSIVE, 4), + he, ferro, null, + null, smokeless.copy(2), null, + null, sShell, null)); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.G26_FLARE, 4), null, rp, null, @@ -387,7 +397,6 @@ public class AmmoPressRecipes extends SerializableRecipe { null, lPlate , null)); OreDictStack tungsten = new OreDictStack(W.ingot()); - OreDictStack ferro = new OreDictStack(FERRO.ingot()); recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.COIL_TUNGSTEN, 4), null, null, null, null, tungsten, null, 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 ed086e56e..b0b659935 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java +++ b/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java @@ -14,7 +14,6 @@ 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; import com.hbm.items.weapon.sedna.mags.IMagazine; @@ -48,7 +47,7 @@ import net.minecraft.world.World; import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType; import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; -public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipReceiver, IItemHUD { +public class ItemGunBaseNT extends Item implements IKeybindReceiver, IItemHUD { /** Timestamp for rendering smoke nodes and muzzle flashes */ public long[] lastShot; @@ -96,6 +95,7 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei public static final String KEY_LOCKONTARGET = "lockontarget"; public static final String KEY_LOCKEDON = "lockedon"; public static final String KEY_CANCELRELOAD = "cancel"; + public static final String KEY_EQUIPPED = "eqipped"; public static ConcurrentHashMap loopedSounds = new ConcurrentHashMap(); @@ -228,7 +228,6 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei } } - @Override public void onEquip(EntityPlayer player, ItemStack stack) { for(int i = 0; i < this.configs_DNA.length; i++) { playAnimation(player, stack, AnimType.EQUIP, i); @@ -291,6 +290,17 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei return; } + /// ON EQUIP /// + if(player != null) { + boolean wasHeld = this.getIsEquipped(stack); + + if(!wasHeld && isHeld && player != null) { + this.onEquip(player, stack); + } + } + + this.setIsEquipped(stack, isHeld); + /// RESET WHEN NOT EQUIPPED /// if(!isHeld) { for(int i = 0; i < confNo; i++) { @@ -359,6 +369,9 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei // RELOAD CANCEL // public static boolean getReloadCancel(ItemStack stack) { return getValueBool(stack, KEY_CANCELRELOAD); } public static void setReloadCancel(ItemStack stack, boolean value) { setValueBool(stack, KEY_CANCELRELOAD, value); } + // EQUIPPED // + public static boolean getIsEquipped(ItemStack stack) { return getValueBool(stack, KEY_EQUIPPED); } + public static void setIsEquipped(ItemStack stack, boolean value) { setValueBool(stack, KEY_EQUIPPED, value); } /// UTIL /// 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 1d58a9f7f..f456c204e 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 @@ -139,7 +139,8 @@ public class GunFactory { } public static enum EnumModTest { - FIRERATE, DAMAGE, MULTI; + FIRERATE, DAMAGE, MULTI, + OVERRIDE_2_5, OVERRIDE_5, OVERRIDE_7_5, OVERRIDE_10, OVERRIDE_12_5, OVERRIDE_15, OVERRIDE_20; } public static enum EnumModGeneric { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory556mm.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory556mm.java index 4aafb28ea..d59d23a9e 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory556mm.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory556mm.java @@ -111,7 +111,7 @@ public class XFactory556mm { .addBus("EQUIP", new BusAnimationSequence().addPos(45, 0, 0, 0).addPos(0, 0, 0, 500, IType.SIN_FULL)); case CYCLE: return new BusAnimation() .addBus("BOLT", new BusAnimationSequence().addPos(0, 0, 0, 20).addPos(0, 0, -4.5, 40).addPos(0, 0, 0, 40)) - .addBus("RECOIL", new BusAnimationSequence().addPos(0, 0, ItemGunBaseNT.getIsAiming(stack) ? -0.5 : -0.75, 25, IType.SIN_DOWN).addPos(0, 0, 0, 75, IType.SIN_FULL)); + .addBus("RECOIL", new BusAnimationSequence().addPos(0, 0, (ItemGunBaseNT.getIsAiming(stack) || !WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_NO_STOCK)) ? -0.25 : -0.75, 25, IType.SIN_DOWN).addPos(0, 0, 0, 75, IType.SIN_FULL)); case CYCLE_DRY: return new BusAnimation() .addBus("BOLT", new BusAnimationSequence().addPos(0, 0, 0, 250).addPos(0, 0, -0.3125, 100).hold(25).addPos(0, 0, -2.75, 130).hold(50).addPos(0, 0, -2.4375, 50).addPos(0, 0, 0, 85)) .addBus("PLUG", new BusAnimationSequence().addPos(0, 0, 0, 250).hold(125).addPos(0, 0, -2.4375, 130).hold(100).addPos(0, 0, 0, 85)) diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory9mm.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory9mm.java index 0cd151888..e8749552f 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory9mm.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory9mm.java @@ -15,6 +15,7 @@ import com.hbm.items.weapon.sedna.ItemGunBaseNT.GunState; import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; +import com.hbm.items.weapon.sedna.mags.IMagazine; import com.hbm.items.weapon.sedna.mags.MagazineFullReload; import com.hbm.items.weapon.sedna.mods.WeaponModManager; import com.hbm.main.MainRegistry; @@ -25,7 +26,10 @@ 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 com.hbm.util.EntityDamageUtil; +import com.hbm.util.DamageResistanceHandler.DamageClass; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; public class XFactory9mm { @@ -64,7 +68,7 @@ public class XFactory9mm { .dmg(25F).delay(4).dry(10).spread(0.005F).reload(53).jam(44).sound("hbm:weapon.fire.pistol", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 17).addConfigs(p9_sp, p9_fmj, p9_jhp, p9_ap)) .offset(1, -0.0625 * 2.5, -0.25D) - .setupStandardFire().recoil(LAMBDA_RECOIL_LAG)) + .setupStandardFire().fire(LAMBDA_FIRE_LAG).recoil(LAMBDA_RECOIL_LAG)) .setupStandardConfiguration() .anim(LAMBDA_LAG_ANIMS).orchestra(Orchestras.ORCHESTRA_LAG) ).setUnlocalizedName("gun_lag"); @@ -133,6 +137,27 @@ public class XFactory9mm { GunStateDecider.deciderAutoRefire(stack, ctx, lastState, 0, index, () -> { return ItemGunBaseNT.getSecondary(stack, index) && ItemGunBaseNT.getMode(stack, ctx.configIndex) == 0; }); }; + public static BiConsumer LAMBDA_FIRE_LAG = (stack, ctx) -> { + AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); + EntityPlayer player = ctx.getPlayer(); + if(player != null && type == AnimType.INSPECT && timer > 20 && timer < 60) { + int index = ctx.configIndex; + Receiver primary = ctx.config.getReceivers(stack)[0]; + IMagazine mag = primary.getMagazine(stack); + BulletConfig config = (BulletConfig) mag.getType(stack, ctx.inventory); + player.addStat(MainRegistry.statBullets, 1); + mag.useUpAmmo(stack, ctx.inventory, 1); + ItemGunBaseNT.setWear(stack, index, Math.min(ItemGunBaseNT.getWear(stack, index) + config.wear, ctx.config.getDurability(stack))); + player.worldObj.playSoundEffect(player.posX, player.posY, player.posZ, primary.getFireSound(stack), primary.getFireVolume(stack), primary.getFirePitch(stack)); + ItemGunBaseNT.setState(stack, index, GunState.COOLDOWN); + ItemGunBaseNT.setTimer(stack, index, primary.getDelayAfterFire(stack)); + EntityDamageUtil.attackEntityFromNT(player, BulletConfig.getDamage(player, player, DamageClass.PHYSICAL), 1_000F, true, false, 1D, 5F, 0F); + } else { + Lego.doStandardFire(stack, ctx, AnimType.CYCLE, true); + } + }; + public static BiConsumer LAMBDA_SMOKE = (stack, ctx) -> { Lego.handleStandardSmoke(ctx.entity, stack, 2000, 0.05D, 1.1D, ctx.configIndex); }; 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 c2fb9d39b..359936bd2 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 @@ -58,6 +58,14 @@ public class WeaponModManager { 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_test, 1, EnumModTest.OVERRIDE_2_5.ordinal())).addDefault(new WeaponModOverride(3, 2.5F, "OVERRIDE")); + new WeaponModDefinition(new ItemStack(ModItems.weapon_mod_test, 1, EnumModTest.OVERRIDE_5.ordinal())).addDefault(new WeaponModOverride(4, 5F, "OVERRIDE")); + new WeaponModDefinition(new ItemStack(ModItems.weapon_mod_test, 1, EnumModTest.OVERRIDE_7_5.ordinal())).addDefault(new WeaponModOverride(5, 7.5F, "OVERRIDE")); + new WeaponModDefinition(new ItemStack(ModItems.weapon_mod_test, 1, EnumModTest.OVERRIDE_10.ordinal())).addDefault(new WeaponModOverride(6, 10F, "OVERRIDE")); + new WeaponModDefinition(new ItemStack(ModItems.weapon_mod_test, 1, EnumModTest.OVERRIDE_12_5.ordinal())).addDefault(new WeaponModOverride(7, 12_5F, "OVERRIDE")); + new WeaponModDefinition(new ItemStack(ModItems.weapon_mod_test, 1, EnumModTest.OVERRIDE_15.ordinal())).addDefault(new WeaponModOverride(8, 15F, "OVERRIDE")); + new WeaponModDefinition(new ItemStack(ModItems.weapon_mod_test, 1, EnumModTest.OVERRIDE_20.ordinal())).addDefault(new WeaponModOverride(9, 20F, "OVERRIDE")); + 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)); @@ -151,7 +159,7 @@ public class WeaponModManager { .addMod(ModItems.gun_greasegun, new WeaponModCaliber(311, 24, 3F, p45)) .addMod(ModItems.gun_uzi, new WeaponModCaliber(312, 24, 3F, p45)) .addMod(ModItems.gun_uzi_akimbo, new WeaponModCaliber(313, 24, 3F, p45)) - .addMod(ModItems.gun_lag, new WeaponModCaliber(314, 24, 25F, p45)); + .addMod(ModItems.gun_lag, new WeaponModCaliber(314, 15, 25F, p45)); new WeaponModDefinition(EnumModCaliber.P22) .addMod(ModItems.gun_henry, new WeaponModCaliber(320, 28, 10F, p22)) .addMod(ModItems.gun_uzi, new WeaponModCaliber(321, 40, 3F, p22)) @@ -260,6 +268,7 @@ public class WeaponModManager { WeaponModDefinition def = stackToMod.get(new ComparableStack(mod)); if(def == null) return null; IWeaponMod newMod = def.modByGun.get(new ComparableStack(gun).makeSingular()); //shift clicking causes the gun to have stack size 0! + if(newMod == null) newMod = def.modByGun.get(null); return newMod; } diff --git a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModOverride.java b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModOverride.java new file mode 100644 index 000000000..54f68163b --- /dev/null +++ b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModOverride.java @@ -0,0 +1,22 @@ +package com.hbm.items.weapon.sedna.mods; + +import com.hbm.items.weapon.sedna.Receiver; + +import net.minecraft.item.ItemStack; + +public class WeaponModOverride extends WeaponModBase { + + protected final float baseDamage; + + public WeaponModOverride(int id, float baseDamage, String... slots) { + super(id, slots); + this.baseDamage = baseDamage; + this.setPriority(PRIORITY_SET); + } + + @Override + public T eval(T base, ItemStack gun, String key, Object parent) { + if(key == Receiver.F_BASEDAMAGE) return cast(baseDamage, base); + return base; + } +} diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index d939975a4..c7dd243c2 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -3,7 +3,7 @@ package com.hbm.lib; public class RefStrings { public static final String MODID = "hbm"; public static final String NAME = "Hbm's Nuclear Tech Mod"; - public static final String VERSION = "1.0.27 BETA (5257)"; + public static final String VERSION = "1.0.27 BETA (5278)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 6928ba30b..b726eff94 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -1760,7 +1760,7 @@ public class ClientProxy extends ServerProxy { .addPos(90, 0, 1, 800) .addPos(0, 0, 1, 50)); - HbmAnimations.hotbar[player.inventory.currentItem][0] = new Animation(player.getHeldItem().getItem().getUnlocalizedName(), System.currentTimeMillis(), animation); + HbmAnimations.hotbar[player.inventory.currentItem][0] = new Animation(player.getHeldItem().getItem().getUnlocalizedName(), System.currentTimeMillis(), animation, null); } /* crucible swing */ @@ -1782,7 +1782,7 @@ public class ClientProxy extends ServerProxy { Minecraft.getMinecraft().getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("hbm:weapon.cSwing"), 0.8F + player.getRNG().nextFloat() * 0.2F)); - HbmAnimations.hotbar[player.inventory.currentItem][0] = new Animation(player.getHeldItem().getItem().getUnlocalizedName(), System.currentTimeMillis(), animation); + HbmAnimations.hotbar[player.inventory.currentItem][0] = new Animation(player.getHeldItem().getItem().getUnlocalizedName(), System.currentTimeMillis(), animation, null); } } @@ -1806,7 +1806,7 @@ public class ClientProxy extends ServerProxy { .addPos(0, 0, 0, retire)); - HbmAnimations.hotbar[player.inventory.currentItem][0] = new Animation(player.getHeldItem().getItem().getUnlocalizedName(), System.currentTimeMillis(), animation); + HbmAnimations.hotbar[player.inventory.currentItem][0] = new Animation(player.getHeldItem().getItem().getUnlocalizedName(), System.currentTimeMillis(), animation, null); } else { @@ -1827,7 +1827,7 @@ public class ClientProxy extends ServerProxy { .addPos(2, 0, 2, sideways) .addPos(0, 0, 0, retire)); - HbmAnimations.hotbar[player.inventory.currentItem][0] = new Animation(player.getHeldItem().getItem().getUnlocalizedName(), System.currentTimeMillis(), animation); + HbmAnimations.hotbar[player.inventory.currentItem][0] = new Animation(player.getHeldItem().getItem().getUnlocalizedName(), System.currentTimeMillis(), animation, null); } } @@ -1839,7 +1839,7 @@ public class ClientProxy extends ServerProxy { BusAnimation anim = item.getAnimation(data, stack); if(anim != null) { - HbmAnimations.hotbar[player.inventory.currentItem][0] = new Animation(player.getHeldItem().getItem().getUnlocalizedName(), System.currentTimeMillis(), anim); + HbmAnimations.hotbar[player.inventory.currentItem][0] = new Animation(player.getHeldItem().getItem().getUnlocalizedName(), System.currentTimeMillis(), anim, null); } } } diff --git a/src/main/java/com/hbm/packet/toclient/GunAnimationPacket.java b/src/main/java/com/hbm/packet/toclient/GunAnimationPacket.java index 922d19200..f72fddb63 100644 --- a/src/main/java/com/hbm/packet/toclient/GunAnimationPacket.java +++ b/src/main/java/com/hbm/packet/toclient/GunAnimationPacket.java @@ -105,7 +105,7 @@ public class GunAnimationPacket implements IMessage { if(animation != null) { boolean isReloadAnimation = type == AnimType.RELOAD || type == AnimType.RELOAD_CYCLE || type == AnimType.RELOAD_EMPTY; - HbmAnimations.hotbar[slot][0] = new Animation(stack.getItem().getUnlocalizedName(), System.currentTimeMillis(), animation, isReloadAnimation && base.mainConfig.reloadAnimationsSequential); + HbmAnimations.hotbar[slot][0] = new Animation(stack.getItem().getUnlocalizedName(), System.currentTimeMillis(), animation, type, isReloadAnimation && base.mainConfig.reloadAnimationsSequential); } } catch(Exception x) { } @@ -143,7 +143,7 @@ public class GunAnimationPacket implements IMessage { Minecraft.getMinecraft().entityRenderer.itemRenderer.resetEquippedProgress(); Minecraft.getMinecraft().entityRenderer.itemRenderer.itemToRender = stack; boolean isReloadAnimation = type == AnimType.RELOAD || type == AnimType.RELOAD_CYCLE || type == AnimType.RELOAD_EMPTY; - HbmAnimations.hotbar[slot][gunIndex] = new Animation(stack.getItem().getUnlocalizedName(), System.currentTimeMillis(), animation, isReloadAnimation && config.getReloadAnimSequential(stack)); + HbmAnimations.hotbar[slot][gunIndex] = new Animation(stack.getItem().getUnlocalizedName(), System.currentTimeMillis(), animation, type, isReloadAnimation && config.getReloadAnimSequential(stack)); } } } diff --git a/src/main/java/com/hbm/render/anim/HbmAnimations.java b/src/main/java/com/hbm/render/anim/HbmAnimations.java index e5cc8becd..218042e44 100644 --- a/src/main/java/com/hbm/render/anim/HbmAnimations.java +++ b/src/main/java/com/hbm/render/anim/HbmAnimations.java @@ -47,18 +47,22 @@ public class HbmAnimations { public BusAnimation animation; // If set, don't cancel this animation when the timer ends, instead wait for the next to start public boolean holdLastFrame = false; + // so we know what type of animation we're playing, only used rarely + public AnimType type; - public Animation(String key, long startMillis, BusAnimation animation) { + public Animation(String key, long startMillis, BusAnimation animation, AnimType type) { this.key = key; this.startMillis = startMillis; this.animation = animation; + this.type = type; } - public Animation(String key, long startMillis, BusAnimation animation, boolean holdLastFrame) { + public Animation(String key, long startMillis, BusAnimation animation, AnimType type, boolean holdLastFrame) { this.key = key; this.startMillis = startMillis; this.animation = animation; this.holdLastFrame = holdLastFrame; + this.type = type; } } 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 634f50e4a..e365bf670 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 @@ -84,6 +84,16 @@ public abstract class ItemRenderWeaponBase implements IItemRenderer { GL11.glPushMatrix(); if(mc.gameSettings.thirdPersonView == 0 && !mc.renderViewEntity.isPlayerSleeping() && !mc.gameSettings.hideGUI && !mc.playerController.enableEverythingIsScrewedUpMode()) { + /*ItemRenderer ir = mc.entityRenderer.itemRenderer; + float equip = ir.prevEquippedProgress + (ir.equippedProgress- ir.prevEquippedProgress) * interp; + Animation current = HbmAnimations.getRelevantAnim(); + // flicker prevention, if equip is in progress, only render if an animation is playing + if(!(equip < 0.25 && ir.prevEquippedProgress < ir.equippedProgress && (current == null || current.type != AnimType.EQUIP))) { + entityRenderer.enableLightmap(interp); + this.setupTransformsAndRender(stack); + entityRenderer.disableLightmap(interp); + }*/ + entityRenderer.enableLightmap(interp); this.setupTransformsAndRender(stack); entityRenderer.disableLightmap(interp); diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java index 88b69a4c1..84db4a9ae 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityBarrel.java @@ -1,5 +1,6 @@ package com.hbm.tileentity.machine.storage; +import api.hbm.energymk2.IEnergyReceiverMK2.ConnectionPriority; import api.hbm.fluidmk2.IFluidStandardTransceiverMK2; import com.hbm.blocks.ModBlocks; @@ -91,7 +92,7 @@ public class TileEntityBarrel extends TileEntityMachineBase implements SimpleCom tank.unloadTank(4, 5, slots); for(DirPos pos : getConPos()) { - if(mode == 0 || mode == 2) this.trySubscribe(tank.getTankType(), worldObj, pos); + if(mode == 0 || mode == 1) this.trySubscribe(tank.getTankType(), worldObj, pos); if(mode == 1 || mode == 2) this.tryProvide(tank, worldObj, pos); } @@ -234,6 +235,11 @@ public class TileEntityBarrel extends TileEntityMachineBase implements SimpleCom return new FluidTank[] { tank }; } + @Override + public ConnectionPriority getFluidPriority() { + return mode == 1 ? ConnectionPriority.LOW : ConnectionPriority.NORMAL; + } + @Override public int[] getFluidIDToCopy() { return new int[] {tank.getTankType().getID()}; diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java index 891343625..af722a0d5 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineFluidTank.java @@ -1,5 +1,6 @@ package com.hbm.tileentity.machine.storage; +import api.hbm.energymk2.IEnergyReceiverMK2.ConnectionPriority; import api.hbm.fluid.IFluidStandardTransceiver; import com.hbm.blocks.BlockDummyable; import com.hbm.blocks.ModBlocks; @@ -48,7 +49,7 @@ import java.util.List; import java.util.Random; @Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "opencomputers")}) -public class TileEntityMachineFluidTank extends TileEntityMachineBase implements SimpleComponent, OCComponent, IFluidStandardTransceiver, IPersistentNBT, IOverpressurable, IGUIProvider, IRepairable, IFluidCopiable{ +public class TileEntityMachineFluidTank extends TileEntityMachineBase implements SimpleComponent, OCComponent, IFluidStandardTransceiver, IPersistentNBT, IOverpressurable, IGUIProvider, IRepairable, IFluidCopiable { public FluidTank tank; public short mode = 0; @@ -107,7 +108,7 @@ public class TileEntityMachineFluidTank extends TileEntityMachineBase implements } for(DirPos pos : getConPos()) { - if(mode == 0 || mode == 2) this.trySubscribe(tank.getTankType(), worldObj, pos); + if(mode == 0 || mode == 1) this.trySubscribe(tank.getTankType(), worldObj, pos); if(mode == 1 || mode == 2) this.tryProvide(tank, worldObj, pos); } @@ -331,12 +332,8 @@ public class TileEntityMachineFluidTank extends TileEntityMachineBase implements @Override public long getDemand(FluidType type, int pressure) { - - if(this.mode == 2 || this.mode == 3 || this.sendingBrake) - return 0; - + if(this.mode == 2 || this.mode == 3) return 0; if(tank.getPressure() != pressure) return 0; - return type == tank.getTankType() ? tank.getMaxFill() - tank.getFill() : 0; } @@ -377,6 +374,11 @@ public class TileEntityMachineFluidTank extends TileEntityMachineBase implements return (mode == 0 || mode == 1) ? new FluidTank[] {tank} : new FluidTank[0]; } + @Override + public ConnectionPriority getFluidPriority() { + return mode == 1 ? ConnectionPriority.LOW : ConnectionPriority.NORMAL; + } + @Override public int[] getFluidIDToCopy() { return new int[] {tank.getTankType().getID()}; diff --git a/src/main/resources/META-INF/HBM_at.cfg b/src/main/resources/META-INF/HBM_at.cfg index 60e1b0364..28454115f 100644 --- a/src/main/resources/META-INF/HBM_at.cfg +++ b/src/main/resources/META-INF/HBM_at.cfg @@ -40,6 +40,8 @@ public net.minecraft.nbt.NBTTagList * # Mo # ItemRenderer public net.minecraft.client.renderer.ItemRenderer field_78453_b # itemToRender +public net.minecraft.client.renderer.ItemRenderer field_78454_c # equippedProgress +public net.minecraft.client.renderer.ItemRenderer field_78451_d # prevEquippedProgress # AbstractResourcePack public net.minecraft.client.resources.AbstractResourcePack field_110597_b # resourcePackFile diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 577bbd545..401f3fcaa 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -3736,6 +3736,16 @@ item.weapon_mod_special.slowdown.name=Rädergetriebe item.weapon_mod_special.speedloader.name=Schnelllader item.weapon_mod_special.speedup.name=Elektrischer Servomotor item.weapon_mod_special.stack_mag.name=Zweistapel-Magazin +item.weapon_mod_test.damage.name=DAMAGE UPGRADE +item.weapon_mod_test.firerate.name=FIRE RATE UPGRADE +item.weapon_mod_test.multi.name=MULTI SHOT UPGRADE +item.weapon_mod_test.override_2_5.name=DAMAGE OVERRIDE (2.5) +item.weapon_mod_test.override_5.name=DAMAGE OVERRIDE (5) +item.weapon_mod_test.override_7_5.name=DAMAGE OVERRIDE (7.5) +item.weapon_mod_test.override_10.name=DAMAGE OVERRIDE (10) +item.weapon_mod_test.override_12_5.name=DAMAGE OVERRIDE (12.5) +item.weapon_mod_test.override_15.name=DAMAGE OVERRIDE (15) +item.weapon_mod_test.override_20.name=DAMAGE OVERRIDE (20) item.weapon_pipe_lead.name=Die Handüberbrückung item.weapon_pipe_rusty.name=Der Einstellungskorrigierer item.weapon_saw.name=Ärztlich autorisierter Mord diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index b3bf02dd6..ad23fa440 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -4762,6 +4762,16 @@ item.weapon_mod_special.slowdown.name=Gear Train item.weapon_mod_special.speedloader.name=Speedloader item.weapon_mod_special.speedup.name=Auxiliary Electric Engine item.weapon_mod_special.stack_mag.name=Double-Stacked Magazine +item.weapon_mod_test.damage.name=DAMAGE UPGRADE +item.weapon_mod_test.firerate.name=FIRE RATE UPGRADE +item.weapon_mod_test.multi.name=MULTI SHOT UPGRADE +item.weapon_mod_test.override_2_5.name=DAMAGE OVERRIDE (2.5) +item.weapon_mod_test.override_5.name=DAMAGE OVERRIDE (5) +item.weapon_mod_test.override_7_5.name=DAMAGE OVERRIDE (7.5) +item.weapon_mod_test.override_10.name=DAMAGE OVERRIDE (10) +item.weapon_mod_test.override_12_5.name=DAMAGE OVERRIDE (12.5) +item.weapon_mod_test.override_15.name=DAMAGE OVERRIDE (15) +item.weapon_mod_test.override_20.name=DAMAGE OVERRIDE (20) item.weapon_pipe_lead.name=The Manual Override item.weapon_pipe_rusty.name=The Attitude Adjuster item.weapon_saw.name=Doctor Assisted Homicide diff --git a/src/main/resources/assets/hbm/textures/items/weapon_mod_test.override_10.png b/src/main/resources/assets/hbm/textures/items/weapon_mod_test.override_10.png new file mode 100644 index 0000000000000000000000000000000000000000..9866eb14f183f3775b4b4ff3027cd00122c95ad4 GIT binary patch literal 267 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfZ;Vn)8is{iL<6HMdmEO0K=< znCp~rZo1d?;;cJtf!!YK+Rp7)SvQY4jAO!i>osL5ddwUe9TNYSiLY(<`^2*8eKpWG N44$rjF6*2UngEn*Xn+6! literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/weapon_mod_test.override_12_5.png b/src/main/resources/assets/hbm/textures/items/weapon_mod_test.override_12_5.png new file mode 100644 index 0000000000000000000000000000000000000000..9866eb14f183f3775b4b4ff3027cd00122c95ad4 GIT binary patch literal 267 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfZ;Vn)8is{iL<6HMdmEO0K=< znCp~rZo1d?;;cJtf!!YK+Rp7)SvQY4jAO!i>osL5ddwUe9TNYSiLY(<`^2*8eKpWG N44$rjF6*2UngEn*Xn+6! literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/weapon_mod_test.override_15.png b/src/main/resources/assets/hbm/textures/items/weapon_mod_test.override_15.png new file mode 100644 index 0000000000000000000000000000000000000000..9866eb14f183f3775b4b4ff3027cd00122c95ad4 GIT binary patch literal 267 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfZ;Vn)8is{iL<6HMdmEO0K=< znCp~rZo1d?;;cJtf!!YK+Rp7)SvQY4jAO!i>osL5ddwUe9TNYSiLY(<`^2*8eKpWG N44$rjF6*2UngEn*Xn+6! literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/weapon_mod_test.override_20.png b/src/main/resources/assets/hbm/textures/items/weapon_mod_test.override_20.png new file mode 100644 index 0000000000000000000000000000000000000000..9866eb14f183f3775b4b4ff3027cd00122c95ad4 GIT binary patch literal 267 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfZ;Vn)8is{iL<6HMdmEO0K=< znCp~rZo1d?;;cJtf!!YK+Rp7)SvQY4jAO!i>osL5ddwUe9TNYSiLY(<`^2*8eKpWG N44$rjF6*2UngEn*Xn+6! literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/weapon_mod_test.override_2_5.png b/src/main/resources/assets/hbm/textures/items/weapon_mod_test.override_2_5.png new file mode 100644 index 0000000000000000000000000000000000000000..9866eb14f183f3775b4b4ff3027cd00122c95ad4 GIT binary patch literal 267 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfZ;Vn)8is{iL<6HMdmEO0K=< znCp~rZo1d?;;cJtf!!YK+Rp7)SvQY4jAO!i>osL5ddwUe9TNYSiLY(<`^2*8eKpWG N44$rjF6*2UngEn*Xn+6! literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/weapon_mod_test.override_5.png b/src/main/resources/assets/hbm/textures/items/weapon_mod_test.override_5.png new file mode 100644 index 0000000000000000000000000000000000000000..9866eb14f183f3775b4b4ff3027cd00122c95ad4 GIT binary patch literal 267 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfZ;Vn)8is{iL<6HMdmEO0K=< znCp~rZo1d?;;cJtf!!YK+Rp7)SvQY4jAO!i>osL5ddwUe9TNYSiLY(<`^2*8eKpWG N44$rjF6*2UngEn*Xn+6! literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/weapon_mod_test.override_7_5.png b/src/main/resources/assets/hbm/textures/items/weapon_mod_test.override_7_5.png new file mode 100644 index 0000000000000000000000000000000000000000..9866eb14f183f3775b4b4ff3027cd00122c95ad4 GIT binary patch literal 267 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#VfZ;Vn)8is{iL<6HMdmEO0K=< znCp~rZo1d?;;cJtf!!YK+Rp7)SvQY4jAO!i>osL5ddwUe9TNYSiLY(<`^2*8eKpWG N44$rjF6*2UngEn*Xn+6! literal 0 HcmV?d00001