File Details
RLCraftImprovedBackpacks-1.12.2-1.0.9.jar
- R
- May 26, 2026
- 77.69 KB
- 16
- 1.12.2
- Forge
File Name
RLCraftImprovedBackpacks-1.12.2-1.0.9.jar
Supported Versions
- 1.12.2
Curse Maven Snippet
[1.0.9] - 2026-05-26
- Fixed crash on player login: NoSuchMethodError EntityPlayer.getUniqueID().
Root cause: v1.0.7 replaced reflection in getPlayerUUID() with a direct
player.getUniqueID() call, expecting SpecialSource to rename it at build time.
SpecialSource's reverse tsrg only maps the declaring class Entity.getUniqueID
→ func_110124_au. The call-site uses EntityPlayer as the owner class (the static
receiver type), which has no entry in the tsrg → not renamed → NoSuchMethodError
in obfuscated MC at runtime.
Fix: resolved the Method handle once via static initializer using the SRG name
"func_110124_au" (falls back to "getUniqueID" in dev). Subsequent calls use
method.invoke() — zero per-tick lookup overhead.
[1.0.8] - 2026-05-26
- Added dynamic tier skip: if the materials for the next tier are absent from the Forge
registry AND from OreDict, the upgrade recipe is registered from the last available tier
directly to the first reachable one. The tooltip follows the same logic — if Copper is
unavailable (no iceandfire:copper_ingot and no ingotCopper in OreDict), a Normal backpack
shows "upgrade to Silver" (or Iron, etc.) instead of showing no upgrade at all.
- Added OreDict matching for all alternating-pattern upgrade recipes: copper (ingotCopper /
blockCopper), bronze (ingotBronze / blockCopper), silver (ingotSilver / blockSilver).
Items from any mod registered under these OreDict names are accepted in crafting.
- Added alternative Enchanted upgrade recipe: 8× goldenblight:golden_blight_star surrounding
an Obsidian backpack yields an Enchanted backpack. Registered independently of XAT
availability. Tooltip on Obsidian backpack shows the alternative when goldenblight is present.
[1.0.7] - 2026-05-26
- Reduced per-tick overhead in CommonEvents.onPlayerTick (performance fix, no functional change).
Root causes: (1) getPlayerUUID() used Class.getMethod().invoke() via reflection every tick —
replaced with direct player.getUniqueID() call (SpecialSource remaps correctly at build time).
(2) getOpenContainer() used ObfuscationReflectionHelper every tick — replaced with direct
player.openContainer field access (public field, remapped correctly by SpecialSource).
(3) BackpackNbt.storeData(serializeNBT()) was called every tick even when nothing changed —
now called lazily only when a TieredBackpackData conversion or a quiver ammo refill actually
modified the inventory. refillAmmo() changed from void to boolean to signal whether items moved.

