
Pika PvP
PikaPvP shows a customizable Target HUD with key PvP stats (HP, distance/ping/LOS, weapon, armor, offhand, effects). It helps you react faster in fights and works anywhere since it’s client-side.
Список изменений
Changelog (PikaPvP Forge 1.21.8 / Loom 1.13) ✅ Fixed build-breaking issues
PikaPvPConstants.java
❌ Removed new Identifier(MOD_ID, path) (constructor is private in 1.21.8 mappings)
✅ Replaced with Identifier.of(MOD_ID, path) + safe fallback via Identifier.tryParse(...)
✅ Added path sanitize (null/empty protection)
mods.toml
❌ Removed invalid :contentReference[...] text (breaks TOML parsing)
✅ Switched to Gradle-expanded placeholders: ${mod_id}, ${mod_name}, ${version}
✅ Kept clientSideOnly=true
✅ Added displayTest="IGNORE_ALL_VERSION"
✅ Set Minecraft range to [1.21.8,1.22) to match your project
✅ Rendering / HUD visibility improvements
PikaPvPConfig.java
✅ Added NaN/Infinity protection + stronger clamps (offsets, opacity, ranges)
✅ (Optional visibility fix) Set default alwaysShow=true and bumped configVersion (if you used that patch)
PikaPvPConfigIO.java
✅ Made load() and save() synchronized (avoids rare partial read/write collisions)
✅ Safer temp file write options (Windows safe)
✅ (Optional upgrade logic) Auto-upgrade old configs → forces alwaysShow=true and saves once
InGameHudMixin.java
✅ (Optional) Dual-hook compatibility: inject into renderMainHud and fallback render
✅ Prevented double-drawing using a boolean guard
✅ (Optional) One-time INFO log to confirm mixin is active
✅ UI / Settings improvements
PikaPvPConfigScreen.java
✅ Clamped offset changes immediately when pressing move buttons
✅ Safe screen switching when MinecraftClient is null
✅ Sliders now display clamped values (no drift)
en_us.json
✅ Changed offset format to: "Offset: %d, %d" (you pass ints, safer than %s)
✅ Data safety (prevents random NPE / list mutation bugs)
PlayerInfoPayload.java
✅ Hardened against null values
✅ Normalized armor list to exactly 4 entries (always safe)
✅ Made armor / effects lists immutable (List.copyOf)
✅ Sanitized numeric values (health/maxHealth/distance/ping)
RequestPlayerInfoPayload.java
✅ Null-safe UUID default
✅ Cleanup / maintenance
PikaPvPForge.java
✅ Removed broken :contentReference[...] junk
✅ Kept MinecraftForge.registerConfigScreen(PikaPvPConfigScreen::new)
✅ Kept PikaPvPServer.init() no-op for compatibility
PikaPvPNetworking.java
✅ Added one-time init guard (inited) + debug log (optional)
PikaPvPServer.java
✅ Added one-time debug log (optional) so you know if something unexpectedly calls it
pack.mcmeta
✅ Converted description to JSON text component (more future-proof)
✅ Kept pack_format: 64 (correct for MC 1.21.8)
pikapvp.mixins.json
✅ No functional change (your file is already correct)
✅ Ensured it stays in src/main/resources/
build.gradle
✅ Ensured Forge mixin config is included: forge { mixinConfig "pikapvp.mixins.json" }
✅ Added Loom mixin refmap settings: useLegacyMixinAp + defaultRefmapName
✅ Added annotationProcessor "org.spongepowered:mixin:0.8.5:processor"
✅ Added resource duplicates strategy + stronger inputs.property for caching safety
Optional version bump
If you want a clear release tag, change:
mod_version=1.0.0 → mod_version=1.0.1 (recommended after these fixes)
