1.0.0
Compatibility
Changes
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)
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:eLCihpSO:H1ZD8RUW"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:eLCihpSO:H1ZD8RUW"
}

