Перейти к содержимому
Mineforgian

Better Player Locator Bar

A Minecraft Fabric mod that adds an enhanced player locator bar. An improvement over Mojang's existing player indicator system.

Загрузки
11K
Подписчики
53
Обновлён
26 октября 2025 г.
Лицензия
CC-BY-NC-SA-4.0

Опубликован 17 марта 2025 г.

Better Player Locator Bar

Version License Modrinth CurseForge Issues

Better Player Locator Bar is a Fabric mod. It shows players in a HUD bar above the XP bar. You can customize icons, borders, fades, and more.

🎯 Features

  • HUD bar with icons representing nearby players and death markers
  • Customizable icon style: default, minimal, mojang, bowtie (shift + click)
  • Icon border styles: rounded or squared
  • Option to show player names and heads
  • Vertical arrows when height difference is significant by player camera or position
  • Distance-based fading (configurable start, end, alpha min/max)
  • Smooth interpolation using easing
  • Asset detection: scans included textures in sprites/hud/
  • Client/server sync via handshake and position payloads; fallback to local mode
  • Config UI (F8 in game or use ModMenu), preview, per-player overrides (color, icon, border...)
  • Death markers persistence and cleanup

📸 Gallery

A preview of how you would see other players with the mod
HUD
A preview of a player on the HUD
OnePlayerBarPreview
A preview of two players on the HUD
TwoPlayerBarPreview
This would be a preview of the settings screen so you can customize it as much as you want
ConfigScreenPreview
Now you can customize your friends icons
PlayerCustomPreview

Dependencies

  • Fabric API
  • ModMenu (recommended but opcional)

Installation

  1. Install Fabric Loader and Fabric API
  2. Place the .jar mod file into your mods/ folder
  3. Run Minecraft

Known Issues & Limitations

  • Only works in Fabric, no Forge/NeoForge/... support (yet? 🥀)
  • It can become inaccurate
  • There may be rendering issues in other parts of the HUD
  • You will most likely encounter problems with the order of the icons and the experience bar
  • It is not possible to change the color of your dot/head (yet...)

License

The contents of this repository and mod, are licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. (Canonical URL)

Ченджлог

v1.1.2Релиз1.21.2, 1.21.3 · 26 октября 2025 г.

Updated to 1.21.2 and 1.21.3!

v1.1.1Релиз1.21, 1.21.1 · 26 октября 2025 г.
  • Fixed some render issues and ordering
  • Simplified code syntax
  • Centralized methods
  • Fixed render arrow mode
v1.1.0Релиз1.21, 1.21.1 · 19 октября 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:
    • RenderAddons
    • RenderUtils
    • TextureManager
    • TextureAnimator
  • 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
  • Death markers persistence:
    • Hud.deathMarkers store 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 HandshakePayload and PositionUpdatePayload with PayloadTypeRegistry
  • 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 Hud and register HudRenderCallback
  • In ClientPlayNetworking, register receiver for handshake and position update
  • Track lastServerUpdateTime; if exceeds threshold, switch to local mode

HUD (BetterPlayerLocatorBarHud)

  • Maintain maps:
    • playerPositions
    • lastKnownPositions
    • currentIconPositions
    • lastPositionUpdateTime
  • tick() and updateRenderCache():
    • Filter players by distance and maxVisibleIcons
    • Sort by closeness or priority if needed
  • 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
  • Alpha / fading:
    • calculateEdgeAlpha() and getDistanceAlpha() 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 NativeImage to 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 Identifier creation for texture paths
  • Caches Identifier objects to reduce allocation overhead
  • Standardized naming scheme:
    • sprites/hud/player_dots/{type}_{frame}.png
    • sprites/hud/player_dots_outlines/...
    • sprites/hud/arrows/{type}.png
    • sprites/hud/death_markers_dots/{type}.png
    • sprites/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_NAME and OPEN_CONFIG
  • OPEN_CONFIG opens ConfigScreen via client.setScreen(...)

RenderUtils

  • Utilities for rendering:
    • renderTintedTexture(...)
    • drawNineSlicedTexture(...)
    • withMatrixPush(...)
    • setShaderColorRGBA(...)
    • getTextureDimensions(...) (delegates to AssetScanner cache)

Network

  • HandshakePayload contains fields: serverHasMod, playerIsOp
  • PositionUpdatePayload contains:
    • positions(): list of (UUID, Vec3d)
    • newPlayers(): optional list of new player info
    • disconnectedPlayers(): list of UUIDs
  • Client receives payloads and updates internal maps in thread-safe manner (via client.execute(...))

Bug Fixes

  • Prevent NPE in AssetScanner when a texture is missing (check .isPresent() first)
  • Remove stale entries in currentIconPositions when players disconnect or markers expire
  • Fix jumping icons when large remote deltas: implement snapping threshold
  • Fix fallback logic when textureHeadOverride is non-UUID string; add resolution from usercache.json
  • Clamp angle calculations so icons outside the horizontal range don’t render incorrectly
  • Fix mod/mixin registration: ensure BetterPlayerLocateBar.mixins.json declared correctly
  • Ensure name rendering only when Tab is held or always enabled via config

Performance & Optimization

  • Cache texture dimensions in AssetScanner to avoid repeating image loads
  • Cache Identifier objects in TextureManager
  • Pre-limit icon rendering count by maxVisibleIcons before 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:
    • deathMarkerInheritBorderColor
    • deathMarkerBorderStyle
    • assetScanner.textures list
    • adjust_to_fov, fov_multiplier
  • ConfigScreen improvements:
    • Renders real-time preview of names and icons
    • Shows detected textures from AssetScanner in 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
  • PositionUpdatePayload sends 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.LOGGER for 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
v1.0.0aРелиз1.21, 1.21.1 · 26 мая 2025 г.

Fixed Fabric Loader incompatibility issue for newer versions

v1.0.0Релиз1.21, 1.21.1 · 7 апреля 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.
0.2.1-BETAБета1.21 · 1 апреля 2025 г.

v0.2.1 - BETA | Network & Rendering Overhaul

Core Changes

  • Added dual-mode operation (Server Mode and Local Mode)
  • Implemented automatic handshake system for mod detection
  • Added 5-second timeout for server updates before switching to local mode

Network Improvements

  • New payload registration system compatible with Minecraft 1.21 / 1.21.1
  • Server now initiates handshake when players join
  • Improved network efficiency with 2-tick update intervals

Rendering Fixes

  • Complete rendering logic overhaul
  • Fixed player position sorting and display issues
  • Improved handling of edge cases in both modes

New Features

  • Added server compatibility detection
  • Configurable distance-based fading
  • Automatic fallback to local detection when needed

Bug Fixes

  • Fixed all compilation errors from previous version
  • Resolved variable scope conflicts
  • Corrected player visibility checks
  • Fixed timeout detection logic

Configuration Updates

  • Added new config options for fade distances
  • Added force local mode option
  • Maintained backward compatibility with old configs

Optimizations

  • Reduced network overhead
  • Improved client-side caching
  • Better connection state handling

Known Issues

  • Player visibility may still be limited on some servers in local mode
  • Initial detection may take 1-2 seconds after joining

Migration Notes

  • Servers need v0.2.1 - BETA for full functionality
  • Clients automatically handle fallback to local mode
  • Existing configs remain compatible but gain new options
0.2-BETAБета1.21 · 24 марта 2025 г.

🖥️ Customizable Interface

  • Rounded icons representing players.
  • Dynamic colors with join animations.
  • Stylized borders with smooth gradients.
  • Smooth animations using lerp.
  • Height indicator (arrow showing if a player is above or below).
  • Progressive transparency based on distance (fades at 100 blocks, nearly invisible at 5000).
  • Option to display the player’s head instead of a colored icon.

🎮 Enhanced User Experience

  • Smooth movements with interpolation.
  • "Show Names" mode when pressing Tab.
  • Automatic adjustment of the experience and status bars when interacting with the HUD.

📡 Server Synchronization

  • Real-time location tracking of other players in the bar.
  • Detect nearby players without needing a minimap.
  • Supports official and TL Skin skins.
  • Persistent data storage for players outside render distance.

⚙️ Advanced Configuration

  • Complete settings menu (F8).
  • Modify some of active functions.
  • Coming JSON configuration editor (Experimental and maybe not functional).
0.1-BETAБета1.21 · 18 марта 2025 г.
  • HUD bar implementation above the experience bar.
  • Player tracking system with position-based icon placement.
  • Dynamic icon scaling based on distance and screen edges.
  • Smooth animations for icon movement.
  • Height difference indicators with arrows.
  • Basic skin support (official skins only).
  • Performance optimizations for real-time tracking.

Full Changelog: Changelog

Комментарии

Загружаем…