HandmadeGunsOverdrive-3.3.1.5.jar
Curse Maven Snippet
What's new
# Changelog
## Fix HMG recipe lifecycle and Ore Dictionary consistency (PR pending)
- Defer content-pack crafting, smelting, and Gun Smithing Table recipes until the
initialization phase, after every mod has registered its pre-initialization ores.
- Build vanilla `ShapedOreRecipe` and Gun Smithing Table recipes from one canonical
normalized ingredient map so both accept the same Ore Dictionary members while
NBT-bearing and non-Ore-Dictionary stacks remain exact.
- Separate polymer and metal-block recipes from their pre-initialization item,
block, and Ore Dictionary registration.
## Audit HMG firearm sound levels (PR pending)
- Audit all parser-recognized unified-gun registrations in every HMG TXT pack and add or update rounded peak impulse `GunSoundLV` data where credible firearm or close-caliber measurements apply.
- Keep every sound-level record parser-safe with both required numeric fields, preserve unused second values for restricted non-suppressor guns, and leave ambiguous identities, launch impulses, and non-fired weapons unresolved rather than inventing measurements.
## `/reloadsetonlyhelditem` (PR pending)
- Add a player-only HMG command that selectively invalidates and reloads the model
resources and renderer for the currently held custom gun without running the
global `/reloadSettings` pack scan.
- Add per-resource invalidation to the HMG gun, OBJ, and MQO model caches while
preserving their existing global-clear behavior.
## Allow numbered attachment anchors on model branches (PR pending)
- Let multiple gun parts register the same numbered attachment slot so mutually
exclusive animated model branches can each supply the installed attachment's
live transform without changing per-render deduplication or fallback detection.
## Fix optic-aware HandmadeGuns ADS magnification (PR pending)
- Resolve the held or placed gun's sight from attachment slot 1 and select the
matching base, red-dot, scope, or custom-sight `Zoom` magnification safely.
- Keep `HMGFovHandler` authoritative for firearm ADS FOV changes while preserving
the legacy zoom event handler's HUD, overlay, sensitivity, and rendering work.
## Restrict attachments for the AWW2 gun pack (PR pending)
- Enable `attachRestriction` for every gun definition in the AWW2 pack so each
weapon accepts only its explicitly allowed attachments.
## Fix attachment-pack legacy addNewRecipe shapes (PR pending)
- Fix the independent `HMGAddAttachment` legacy parser missed by PR #153 / commit
`6bfd4fd5a90354b196f6ead74470323f22569b0e` so `ItemA` through `ItemI` remain
symbol definitions while `Recipe1` through `Recipe3` determine physical grid slots.
- Register attachment and ammunition recipes in both vanilla shaped crafting and the
Ammo category of the canonical Gun Smithing Table registry from the same shape.
- Resolve item-or-block symbols safely and reset all legacy recipe state after every
registration attempt.
## Fix legacy addNewRecipe Gun Smithing integration (PR pending)
- Keep legacy shaped recipes in vanilla crafting while registering the same output
and positional 3x3 shape in the canonical Gun Smithing Table registry used by NEI.
- Resolve legacy item-or-block ingredients into one safe stack representation, log
unresolved symbols, and reset all shape and ingredient state after each recipe.
- Categorize custom-magazine ammunition on the Ammo tab and firearm/default outputs
on the Guns tab.
## HMGO Armor-Piercing Bullet Penetration (PR pending)
- Allow armor-piercing projectiles to pass through intact collidable blocks whose
Forge blast resistance is no greater than vanilla stone, while bounded repeated
tracing still stops at stronger blocks and detects entities behind penetrations.
- Limit armor-piercing projectiles with damage 7 or lower to one confirmed block
penetration and projectiles with damage above 7 to two confirmed penetrations.
- Apply 90% direct-hit damage until the projectile penetrates its first qualifying
block, then use normal configured damage for the rest of that projectile's life.
- Apply 90% of configured gravity to armor-piercing projectiles without changing
shared gun or magazine configuration.
## Add interactive attachment GUI firearm preview controls (PR pending)
- Rotate the attachment GUI firearm preview with a left-button drag that begins in
the preview area, without interfering with attachment or player inventory slots.
- Zoom the firearm and its installed attachments with the mouse wheel while the
pointer is over the preview, with safe per-GUI zoom and pitch limits.
- Render the live attachment preview from a copied stack so viewing the model does
not modify the held firearm or its NBT.
## Display attachment names in firearm tooltips (PR pending)
- Resolve firearm attachment-whitelist identifiers to their localized, player-facing
item names in the `Valid attachments` tooltip, with the configured identifier as a
fallback when an attachment is unavailable.
- Document the distinction between stable `allowattach` identifiers and attachment
display names for content-pack authors.
## Fix HMG attachment GUI slot validation (PR pending)
- Require every attachment to match the established slot type: sight, support,
muzzle, under-barrel, or special ammunition.
- Apply gun attachment whitelists as an additional compatibility restriction
instead of allowing a whitelisted item to bypass its slot type.
- Restrict shift-click attachment destinations to the five exposed GUI slots
while preserving the existing 54-entry NBT-backed inventory and slot numbers.
## Add slot-aware ADS and gun-part attachment offsets (PR pending)
- Add `opticshift1` through `opticshift5` gun directives that combine live occupied-slot offsets with first-person ADS alignment and its transition without changing zeroing or elevation.
- Add `moveifattachpresent1` through `moveifattachpresent5` part directives that compose local movement with existing animation matrices, child hierarchies, and external attachment anchors.
- Validate both directive families as three finite values and document their direct mapping to the existing attachment GUI/NBT slots.
## Add close-range slug door breaching (PR pending)
- Add the per-ammunition `candoorbreach` option, disabled when omitted, and enable it for the bundled slug rounds.
- Allow explicitly configured projectiles fired within three blocks to open directly impacted wooden doors while preserving iron doors and normal bullet collision behavior.
## Fix external 3D attachment reload and render passes (PR pending)
- Rebuild existing external attachment item renderers, including numbered model and texture variants, after destructive model-cache invalidation during `/reloadSettings`.
- Match installed attachments to gun opaque/transparent alpha and depth pass semantics, isolate all changed GL state, and consistently use the selected numbered model and texture.
## Hide gun parts when attachment slots are occupied (PR pending)
- Add `removeifattachpresent1` through `removeifattachpresent5` gun-part directives, mapped directly to the existing attachment GUI/NBT slots.
- Hide marked part geometry and its child subtree from live installed-item state while preserving animated external 3D attachment anchors on the same part.
- Document reversible, OR-based visibility behavior for legacy and external 3D attachments.
## Support five independent external 3D attachment slots (PR pending)
- Add numbered model, texture, and gun-location keys for existing attachment inventory slots 1 through 5, retaining singular fallbacks and deterministic standalone rendering.
- Add independent `SetAttachmentAttach1` through `SetAttachmentAttach5` animated part anchors with first-anchor duplicate handling per slot.
- Keep one cached item renderer per attachment while selecting the installed model, texture, location, and animated anchor from the actual NBT/GUI slot number.
## Add animated gun-part anchors for 3D attachments
- Add the gun model-part directive `SetAttachmentAttach` for both `AddParts` and
`AddChildParts`, making `attachmentlocation` local to the selected part's live
animation matrix.
- Render model-based installed attachments once from the selected part, or once
from gun-local space for packs without an anchor, rather than once per recursive
child-part traversal.
- Keep the first configured anchor and warn about later duplicates without
breaking affected content packs.
## Configurable 3D attachment inventory transforms
- Add per-attachment `InventoryScale` and three-axis `InventoryOffset` TXT
controls for model-based inventory items, including finite-value validation
and backwards-compatible defaults.
- Keep installed attachment placement, dropped-item rendering, legacy models,
and gun rendering independent from these inventory-only settings.
- Document both comma and assignment syntax and configure the sample attachment.
## Fix one-use weapon consumption
- Fixed `isOneuse,true` weapons remaining as empty items after use.
- Restored immediate one-use weapon consumption.
- Preserved manual reload behavior for normal player guns.
## Correct ammunition ballistic override propagation
- Correct `CustomMagazine` `BlletSpread`/`BulletSpread` and `bulletFuse`
overrides so the exact loaded round supplies the projectile's base spread and
fuse before it is consumed, including FIFO per-shell `MultiMagazine` guns.
- Preserve normal ADS, diffusion, movement, and attachment spread modifiers
without ratio or division behavior, and preserve explicit zero overrides.
## Fix per-shell ballistic coefficient initialization regression
- Resolve and reset each content pack's `damageCof` and `speedCof` before
attachment parsing, so per-shell ammunition overrides and guns use the same
owning-pack scale without leaking values between packs.
- Parse `damageCof` and `speedCof` independently, preventing damage settings
from falling through into speed settings, and restore the same pack context
when live gun settings are reloaded.
## Fix per-shell bullet stability precision
- Keep ammunition-defined bullet stability values as doubles from TXT parsing
through the effective per-shot profile and spawned projectile, avoiding a
lossy conversion from the native HMG ballistic type.
## Add per-shell CustomMagazine ballistic overrides
- `CustomMagazine` ammunition may now override projectile power, speed, gravity,
spread, pellet count, type/model, explosion and block damage, stability, damage
range, knockback, bounce, resistance, acceleration, fuse, and water resistance.
Omitted keys continue to inherit the gun TXT value; existing `damagemodify` and
`speedmodify` multipliers are applied after absolute power/speed overrides.
- Supported keys and aliases are `BulletPower`, `BulletSpeed`, `BulletGravity`,
`BulletSpread`/`BlletSpread`, `ShotGun_Pellet`/`PerFireRound`, `BulletType`,
`Explosion`/`Explosionlevel`, `BlockDestroy`/`Blockdestroy`, `BulletStability`,
`damageRange`, `KnockBack`/`knockback`, `KnockBackY`/`knockbackY`,
`CanBounce`, `BounceRate`/`bouncerate`, `BounceLimit`/`bouncelimit`,
`Resistance`/`resistance`, `Acceleration`/`acceleration`,
`AccelerationDelay`/`accelerationDelay`, `AccelerationFuse`/`accelerationFuse`,
`Bulletmodel`/`BulletModelName`, `ResistanceInWater`, and `fuse`/`bulletFuse`.
- `MultiMagazine` guns with `PerShellReload,true` retain the actual shell stacks
in their tube as a FIFO queue. Selecting a new shell affects future loading,
not rounds already in the tube.
Example buckshot ammunition:
```text
Name,12 gauge buckshot
Stack,64
BulletRound,1
BulletPower,5
BulletSpeed,4
BlletSpread,0.12
ShotGun_Pellet,9
CustomMagazine,12g_buckshot
```
Example slug projectile count:
```text
Name,12 gauge slug
BulletRound,1
ShotGun_Pellet,1
CustomMagazine,12g_slug
```
## Add fast TXT-only gun settings reload command
- `/reloadsettings` continues to reload gun TXT settings and invalidate/reload
changed 3D models for live model development.
- Add `/reloadsettingsnomodel` to reload gun TXT settings while retaining the
currently loaded 3D models and their OBJ/MQO and GPU-resource caches.
## Fix startup models while preserving live `/reloadsettings` refreshes
- Keep Forge's immediate resource-listener registration callback from releasing
gun and vehicle models that were loaded and assigned during pre-initialization.
- Reserve destructive OBJ/MQO cache and GPU-resource invalidation for the explicit
HMG and HMV settings reload paths, which immediately reparse packs and replace
renderer model references.
- Preserve VBO and legacy display-list cleanup for repeated live model refreshes.
## Restore live model reloads through `/reloadsettings`
- Invalidate the gun-maker, OBJ, and MQO model caches before re-reading pack
settings so existing gun and vehicle render registrations receive freshly
parsed model instances.
- Release obsolete OBJ VBOs and legacy OBJ/MQO OpenGL display lists on the client
thread, keeping repeated developer reloads from leaking GPU resources.
- Reuse the existing settings reload and renderer replacement paths without
recreating registered items or entities.
## Fix CustomNPC+ held HMG gun orientation
- Scope the Forge render-helper workaround in all three HMG gun renderers so an
equipped gun omits the generic `BLOCK_3D` helper only while a CustomNPC+ NPC is
being rendered, while retaining its custom `EQUIPPED` renderer and all other
render-type support.
- Prevent CustomNPC+ from applying its generic 3D-item transform before HMG's own
non-player gun transform, which previously combined two incompatible transform
systems and made aimed guns point sideways.
- Restore the original helper behavior for players and every non-CustomNPC entity,
while preserving first-person, dropped-item,
inventory, attachment, skin, reload, animation, LittleMaid, and configured gun
transforms.
## Fix gun Motion mouse sensitivity scaling
- Correct the previous sensitivity implementation, which incorrectly introduced a
second `Weight` system, by deriving held-gun sensitivity from the existing
`Motion` handling value instead.
- Scale the bundled packs' small Motion differences with a monotonic, bounded curve
while preserving normal sensitivity at `Motion,1.0` and safe handling of invalid
values.
- Keep existing gun definitions compatible without content-pack migration and avoid
registering the render-tick handler on both event buses.
## Fix Gun Smithing Table NEI runtime-state lookup
- Gun Smithing Table NEI output lookup no longer compares mutable gun runtime
NBT, so tooltip initialization, loaded magazines, fire modes, and attachments
do not hide a gun's base recipe.
- Pressing `R` on guns and stateful ammunition now consistently resolves the
correct table recipe, while real metadata variants and recipe-defined output
NBT remain distinct and every matching recipe remains visible.
- Isolate each NEI recipe and usage query to prevent an unsuccessful lookup from
retaining an unrelated prior result; registration continues to use the proven
MCHO `API.registerRecipeHandler` and `API.registerUsageHandler` pattern.
## Refactor HMG Ore Dictionary and NEI support
- Follow MCHO's Forge 1.7.10 recipe approach by automatically normalizing ordinary
Gun Smithing Table item inputs to their first valid Ore Dictionary entry while
preserving counts, explicit `ore:` forms, wildcard metadata, and tagged stacks.
- Add `exact:modid:item[:meta[:count]]` for packs that intentionally require a
specific registered item even when Forge associates it with an ore entry.
- Register the client-only Gun Smithing Table recipe and usage handler through
NEI's supported `API` methods, with cycling ore alternatives sourced from the
same canonical table recipes used by GUI and server crafting.
- Keep Gun Smithing Table-only recipes outside vanilla crafting; NEI visibility
reads directly from the table registry and requires no vanilla recipe copy.
## Fix Gun Smithing Table recipe discovery in NEI
- Replaced the previous Gun Smithing Table NEI entry point because its class name
did not satisfy NEI 1.7.10 plugin discovery and it therefore never registered
the recipe and usage handler.
- Gun Smithing Table recipes now have direct, live NEI recipe and usage support,
including exact/NBT stacks, Ore Dictionary alternatives, stack amounts, and
every distinct gun and ammunition recipe.
- Gun Smithing Table-only content-pack recipes no longer need or receive duplicate
vanilla crafting registrations merely to be visible in NEI.
## Gun Smithing Table recipe system refactor and NEI integration fix
- Replace the split gun/ammunition lists and global crafting-recipe scan with one
canonical, category-aware Gun Smithing Table recipe model and immutable queries.
- Make the GUI, server crafting transactions, pack loaders, and NEI recipe/usage
lookups consume the same exact-stack and Ore Dictionary ingredient definitions.
- Keep every distinct duplicate-output recipe and expose both Guns and Ammo through
NEI's dedicated, localized `Gun Smithing Table` category without fake crafting
recipes or name-based ammunition heuristics.
## Tune gun weight mouse sensitivity diagnostics
- Retuned gun-weight mouse sensitivity for mass-like content-pack values, including
a subtle effect for the default weight and a lower safety clamp for heavy weapons.
- Added disabled-by-default, held-gun-change diagnostics and a separate debug-only
forced `0.10` multiplier for verifying the render-tick input hook without log spam.
- Track whether a gun definition explicitly supplied `Weight` so diagnostics identify
guns silently using the parser default.
## Fix Gun Smithing Table NEI integration
- Mirror both Gun Smithing Table pages in the custom NEI category: registered gun
recipes and the combined ammo recipes, including compatible recipes discovered
from Minecraft's `CraftingManager`.
- Match crafting-result and ingredient-usage lookups against the complete table
recipe population while preserving Ore Dictionary alternative cycling.
- Suppress only exact cross-list recipe duplicates, retaining distinct recipes
that happen to produce the same item.
## Add model-based attachment rendering
- Add the optional comma-based `attach3dmodel,{model}` attachment key while
retaining the legacy icon and embedded gun-part paths when it is absent.
- Add `attachmentlocation,x,y,z[,rotation]` as a shared local gun-model anchor
for every installed model attachment, with safe per-file numeric diagnostics.
- Reuse cached HMG pack models, existing model textures, item renderer plumbing,
and the gun's existing `Items` attachment NBT slots in inventory, first-person,
third-person, entity, and placed-gun rendering paths.
## Fix NEI 1.0.5.120 Gun Smithing compatibility
- Register Gun Smithing recipe and usage handlers through NEI 1.0.5.120's
`GuiCraftingRecipe.craftinghandlers` and `GuiUsageRecipe.usagehandlers` lists.
- Remove recipe catalyst registration because NEI 1.0.5.120 does not provide the
newer catalyst APIs; recipe and ingredient lookup remain available through NEI.
## Add crafting-based gun skin removal
- Add a dynamic shapeless recipe that removes an applied gun skin when its gun is
crafted with the same stable-ID skin item or with one dye.
- Accept vanilla dyes and modded dyes using standard Forge `dye*` Ore Dictionary
entries while rejecting different skins and unrelated extra ingredients.
- Copy the complete gun stack and remove only the root `GunSkin` NBT value so all
ammunition, attachment, damage, naming, and firing state remains intact.
## Fix Gun Smithing Table crafting and add NEI recipe support
- Deliver Gun Smithing Table outputs immediately from the server, drop only an
insertion remainder, and explicitly synchronize the player and open containers.
- Serialize each inventory transaction so rapid requests cannot consume the same
ingredients twice, and reject requests unless the smithing container is open.
- Add optional NEI integration with a dedicated Gun Smithing Table category,
table catalyst, distinct duplicate-output recipes, and cycling ore alternatives.
- Compile against NEI's development API without packaging it as an HMG runtime
dependency, and document recipe discovery for content-pack authors.
## Gun weight mouse sensitivity
- Reduce first-person mouse sensitivity while a unified HMG gun is held, using the
gun definition's existing `Weight` value and a clamped weight curve.
- Combine gun-weight sensitivity with the existing ADS zoom adjustment for the same
render camera update, then restore the user's exact configured sensitivity.
- Leave GUI input, unarmed/non-HMG input, placed guns, and vehicle cameras unchanged.
## Fix M16A4 skinned transparent reticle group selection
- Associate the M16A4 red-dot reticle marker with its actual `mat4`,
`mat4reticle`, and `mat4reticlePlate` MQO object family instead of the
nonexistent `mat41` family.
- Make model-group discovery color- and depth-write-free so initialization can
never turn a transparent reticle plate into an invisible depth occluder.
- Preserve the existing isolated gun-skin housing overlay and depth-tested,
original-texture reticle pass.
## Fix HMG transparent sight reticle rendering
- Isolate the reticle and stencil-plate pass from gun-skin OpenGL state, explicitly
restoring normal alpha blending and `GL_LEQUAL` depth testing for both skinned and
unskinned guns.
- Keep reticle-plate generation stencil-only by disabling depth writes, then render
the reticle against both that stencil and the existing opaque scene depth so gun
bodies and optic housings occlude it without making transparent lenses opaque.
- Restore the renderer's incoming pass after rendering reticle children instead of
leaving the shared pass selector set to the transparent pass.
## Fix HMG sight housing gun skin rendering
- Apply universal gun skins to gun-owned iron-sight, red-dot, and scope housing parts
even when their model definitions mark them as attachment parts, while continuing
to exclude unrelated attachments, bullets, lights, lasers, and reticle/plate parts.
- Mask the overlay against the opaque base render with an exact depth comparison, so
transparent and semi-transparent lens pixels remain on their original render path.
- Remove polygon offset from the overlay pass because the repeated geometry now uses
the opaque pass's matching depth without writing new depth.
## Fix universal HMG gun skins
- Replace target-pair recipe generation with one dynamic recipe accepting exactly one
`HMGItem_Unified_Guns` stack and one valid skin in either grid order.
- Preserve the complete input gun stack while setting or replacing only its `GunSkin`
NBT value, allowing loaded, damaged, attached, named, and previously skinned guns.
- Remove the gun-name map, target matching, target warnings, and gun-specific AK47 and
PKM development skins; legacy `SkinTarget` lines are parsed and deliberately ignored.
- Resolve overlays solely from the skin ID on each rendered gun stack, keeping skins
instance-local and universal across gun models while excluding attachment parts.
- Update the content-pack documentation and universal `ar_sample_skin` definition.
## Fix HMG gun skin crafting with concrete recipes
- Track every final unified gun object by its pack-declared `GunName`, including
reused registered guns, and generate one exact-object crafting recipe for each
valid gun/skin target pair during Forge initialization.
- Preserve the input gun stack and all existing state while applying `GunSkin`, and
report recipe totals plus every unresolved target once during startup.
- Document that skin crafting is resolved after pack loading without crafting-time
Forge registry identifier lookups.
- Add development pack skin definitions for the real `AK47` and newer-pack `PKM`
declarations so concrete recipe registration can be exercised beyond `AR_sample`.
## Fix HMG gun skin crafting identity matching
- Match skin targets against each gun item's actual Forge unique identifier instead
of reverse-looking-up the target, with bare HMG `GunName` targets preferred and
legacy fully-qualified targets retained.
- Trim and reject empty target fields, validate skin targets once after pack loading,
and document the canonical content-pack identifier format.
- Update the Addfixing sample to target `AR_sample` by its gun declaration identifier.
## Fix the HMG gun skin pipeline
- Corrected the Addfixing sample so its inventory icon, exact `HandmadeGuns:AR_sample`
registry target, and model texture all resolve through existing pack resources.
- Fixed the sample's root failure: `SkinTexture` named an overlay PNG that was never
included in Addfixing, so the loader disabled the overlay before rendering.
- Moved missing-resource fallback to a cached client render-time check instead of
storing client resource state on shared skin metadata.
- Standardized compatibility checks on exact Forge registry identifiers and kept
texture-path construction common/server safe.
- Reset the legacy overlay pass color to white while retaining isolated blend, depth,
and polygon-offset state.
- Resolve each exact `SkinTarget` to its registered gun `Item` for crafting and
rendering compatibility, so damage and per-stack gun state never affect matching.
- Restore the OpenGL current-color state after each transparent overlay pass.
## Data-driven gun skins
- Added ordinary content-pack gun skin items with stable identifiers, cached overlay resources, and per-skin compatible gun registry identifiers.
- Added one generic shapeless skin application recipe that copies the gun and changes only its `GunSkin` NBT value.
- Added transparent base-model overlay rendering to the legacy and current unified gun renderers, with isolated fixed-function OpenGL state.
- Documented the skin pack keys, texture layout, crafting behavior, and an Addfixing attachment template.

