Better Player Locator Bar v1.1.2
release26 октября 2025 г.Updated to 1.21.2 and 1.21.3!
Better Player Locator Bar v1.1.1
release26 октября 2025 г.- Fixed some render issues and ordering
- Simplified code syntax
- Centralized methods
- Fixed render arrow mode
Better Player Locator Bar v1.1.0
release19 октября 2025 г.Changelog
Version: 1.1.0
Summary
Version 1.1.0 refactors the rendering architecture, introduces robust asset detection, improves client-server synchronization, adds death markers, enhances configuration capabilities, and fixes multiple bugs. Backwards compatibility with existing configs and use cases is preserved.
Major Enhancements & Additions
Rendering & Architecture
- Modular separation of rendering logic into:
RenderAddonsRenderUtilsTextureManagerTextureAnimator
- Introduction of
AssetScanner:- Scans the resource manager for textures under
sprites/hud/ - Builds lists of available dot styles, arrow styles, icon borders, death marker types
- Caches texture dimensions to avoid repeated IO
- Scans the resource manager for textures under
- Death markers persistence:
Hud.deathMarkersstore marker data with timestamp and world position- Configurable limit of death markers
- Automatic cleanup of old or out-of-range markers
- Hybrid mode operation:
- Handshake with server to detect mod presence
- Fallback to local mode if server unresponsive beyond timeout (e.g.
SERVER_TIMEOUT_MS)
- Per-player overrides:
- In config, allow per-player settings: color, icon style, border style
Detailed Changes per Component
Main / Mod Initialization
- Register payload codecs for
HandshakePayloadandPositionUpdatePayloadwithPayloadTypeRegistry - Initialize server module (
BetterPlayerLocatorBarServer) on common side - Add logging for handshake success/failure and mode switching events
Client / Initialization
- On resource reload, call
AssetScanner.reload(...) - Instantiate
Hudand registerHudRenderCallback - In
ClientPlayNetworking, register receiver for handshake and position update - Track
lastServerUpdateTime; if exceeds threshold, switch to local mode
HUD (BetterPlayerLocatorBarHud)
- Maintain maps:
playerPositionslastKnownPositionscurrentIconPositionslastPositionUpdateTime
tick()andupdateRenderCache():- Filter players by distance and
maxVisibleIcons - Sort by closeness or priority if needed
- Filter players by distance and
- Easing & interpolation:
- If distance jump is large (e.g. > 75% of bar width), snap to target
- Else, advance position using
easeInOutQuad
- Separate rendering methods:
renderPlayerIcon()renderDeathMarker()renderArrow()renderNameplate()
- Hide logic:
shouldHideTarget()checks for sneaking, invisibility, helmet usage
- Angle & FOV:
- Use
CONFIG.getFovMultiplier()to adjust icon horizontal shift
- Use
- Alpha / fading:
calculateEdgeAlpha()andgetDistanceAlpha()for smooth fade near edges or by distance
- Texture selection:
getAdjustedTextureIndex(distance, config)picks animation frame
AssetScanner
- On
reload, checks for presence of each expected texture (dots, outlines, arrows, markers, tags) - Builds lists:
availableDots,availableArrows,availableDeathMarkers, etc. - Caches texture widths and heights via
NativeImageto avoid repeated loads
RenderAddons
- Central rendering of tinted icons, outlines, names, arrows, and death markers
- Supports override of head texture by UUID or name, with fallback to default skin
renderIcon(),renderArrow(),renderNameplate()share common helper logic- Outline rendering: darker border variants computed dynamically or via presets
TextureManager
- Centralizes
Identifiercreation for texture paths - Caches
Identifierobjects to reduce allocation overhead - Standardized naming scheme:
sprites/hud/player_dots/{type}_{frame}.pngsprites/hud/player_dots_outlines/...sprites/hud/arrows/{type}.pngsprites/hud/death_markers_dots/{type}.pngsprites/hud/tags/{style}.png
TextureAnimator
- Handles time-based frame switching for animated textures (if any)
- Maintains current frame, elapsed time, duration per frame
Keybinds
- Register
SHOW_PLAYER_NAMEandOPEN_CONFIG OPEN_CONFIGopensConfigScreenviaclient.setScreen(...)
RenderUtils
- Utilities for rendering:
renderTintedTexture(...)drawNineSlicedTexture(...)withMatrixPush(...)setShaderColorRGBA(...)getTextureDimensions(...)(delegates toAssetScannercache)
Network
HandshakePayloadcontains fields:serverHasMod,playerIsOpPositionUpdatePayloadcontains:positions(): list of(UUID, Vec3d)newPlayers(): optional list of new player infodisconnectedPlayers(): list of UUIDs
- Client receives payloads and updates internal maps in thread-safe manner (via
client.execute(...))
Bug Fixes
- Prevent NPE in
AssetScannerwhen a texture is missing (check.isPresent()first) - Remove stale entries in
currentIconPositionswhen players disconnect or markers expire - Fix jumping icons when large remote deltas: implement snapping threshold
- Fix fallback logic when
textureHeadOverrideis non-UUID string; add resolution fromusercache.json - Clamp angle calculations so icons outside the horizontal range don’t render incorrectly
- Fix mod/mixin registration: ensure
BetterPlayerLocateBar.mixins.jsondeclared correctly - Ensure name rendering only when Tab is held or always enabled via config
Performance & Optimization
- Cache texture dimensions in
AssetScannerto avoid repeating image loads - Cache
Identifierobjects inTextureManager - Pre-limit icon rendering count by
maxVisibleIconsbefore layout computation - Maintain intermediate render caches (
positionsToRenderCache) to avoid recomputation each frame - Asset scan only on resource reload, not every frame
- Minimize temporary allocations in loops (reuse collections, use
computeIfAbsent,subList)
Configuration & UX Enhancements
- Added config options:
deathMarkerInheritBorderColordeathMarkerBorderStyleassetScanner.textureslistadjust_to_fov,fov_multiplier
- ConfigScreen improvements:
- Renders real-time preview of names and icons
- Shows detected textures from
AssetScannerin dropdowns
- HUD offset auto-applied if icons present (
shouldApplyHudOffset()logic)
Client-Server Integration
- Server module now actively gathers player positions at interval
- Client handshake verifies server mod and sets flags accordingly
- If server stops sending updates, client falls back to local mode
PositionUpdatePayloadsends full updates so client can reconstruct state
Robustness & Edge Cases
- UUID parsing wrapped in try/catch to avoid crashes
- File I/O (e.g.
usercache.json) wrapped with existence checks - Clear logs in
Constants.LOGGERfor mode switching and error conditions
Regression Risk & Testing
- Tested:
- Mode switching (server vs local)
- Name rendering via Tab
- Death markers creation and cleanup
- Asset detection when adding custom textures
- Edge cases:
- Player wearing helmet/skull — head override logic
- Invisible or sneaking players
- Large jumps in position between updates
Previous Version (1.0.0) — Summary
- Basic HUD rendering of nearby players
- Automatic colors, simple interpolation
- Static icon style, no death markers
- Minimal configuration
Notes
- This version emphasizes stability, modularity, and configurability
- If regressions occur, open issues with logs, steps to reproduce, and version info
Better Player Locator Bar v1.0.0a
release26 мая 2025 г.Fixed Fabric Loader incompatibility issue for newer versions
Better Player Locator Bar v1.0.0
release7 апреля 2025 г.Mod Changelog - Versions 1.21 & 1.21.1
UI & Visual Enhancements
- Redesigned and improved configuration screen, offering a sleek and more intuitive interface.
- Custom widgets inspired by Mojang's existing UI elements for a seamless and familiar experience.
- Fully restyled icons, delivering a modern and polished look.
HUD Improvements
- Enhanced HUD interaction—visibility of XP bar icons now dynamically affects the overall interface behavior.
Performance & Code Optimization
- Major code refactoring to ensure optimal performance and efficiency across all systems.
Совместимость
Minecraft: Java Edition
1.21–1.21.3
Создатели

Bichal
Владелец
Детали
Лицензия:CC-BY-NC-SA-4.0
Опубликован:9 месяцев назад
Обновлён:1 месяц назад
