Anti-Duplication Session Validation (isValid): Implemented a strict live validation check on every tick and before any slot click (Quick-Take, Quick-Deposit, Hand Swap). If a chest block is broken (becomes AIR), if the chested entity dies, or if claim permissions expire, the preview HUD immediately closes and all interactions are blocked. This fully patches a critical item duplication exploit!
Real-time Claims Protection Re-evaluation: Protection hooks are now dynamically re-validated during the active session to block peeking instantly if a player's trust is revoked mid-session.
Allocation-Free Eye Locations: Replaced all `player.getEyeLocation()` calls (which allocate a new `Location` object every tick) with a pre-allocated vector-based approach using `player.getLocation(reusableLoc)` and adding the player's eye height in-place.
Bypassed Redundant Trigonometry: Trigonometric viewport axes calculation (`buildAxes()`) is now run exactly once at the transition to Focus Mode (sneaking), rather than being computed on every single tick.
Raycast Blocks-Only Mode: If `enable-entities` is disabled or the list is empty, the raycast dynamically falls back to `rayTraceBlocks()`, completely skipping expensive entity bounding box queries on the server.
YAML Configuration Memory Cache: Cached all parsed configuration options inside typed memory variables in `StoragePeek.java`. This entirely bypasses nested YAML map traversals (such as `combat-culling.enabled`) on high-frequency raycasting ticks.
Garbage-Free Raycasting Loop: Eliminated loop-level lambda instantiations and computeIfAbsent() map lookups during raycast checking to ensure zero micro-allocations on active ticks.
Batched Visibility Updates (Task Reduction): Batched all initial passenger entity visibility calls (`player.showEntity`) into a single tick-delayed runnable on display generation. This reduces scheduler overhead during chest openings from ~40+ independent runnables down to exactly 1!
Skipped Redundant Animations: Bypassed scheduling individual tick-delayed scale-up runnables for item quantities and durability bars when spawning the display, as they are already handled by the primary batched `animateScaleUp` runnable.
Cached BlockData for Durability Bars: Cached parsed `BlockData` instances for concrete colors (`BLACK_CONCRETE`, `LIME_CONCRETE`, etc.) in the static display data cache, completely eliminating expensive `Bukkit.createBlockData(...)` registry lookups on every inventory update tick.
Cached Double Chest Midpoints: Resolved container center coordinates (including double chest midpoints) once at session creation and cached them in a field, completely bypassing heavy `block.getState()` and left/right side chest state retrievals on active ticks.
Lazy Hand-Held Shulker Evaluation: Raycast checks for hand-held Shulker boxes now evaluate `player.isSneaking()` first, eliminating redundant `getItemInMainHand()` and `getItemInOffHand()` ItemStack wrapper allocations on every tick. Off-hand is lazy-evaluated only if the main hand doesn't contain a shulker.
Unfocused HUD Transformation Culling: Prevented sending redundant HUD scale/rotation update packets (`setTransformation`) during active peeking ticks. When `focus-mode` is inactive, the HUD uses `Billboard.CENTER` to automatically face the player client-side, making server-side transform updates completely obsolete and saving 20 packets/sec per active player!
Cached Disabled Worlds Culling: Redefined the disabled worlds check to use a cached set of loaded World instances (updated dynamically on WorldLoad/WorldUnload events) instead of performing a string conversion `.toLowerCase()` world name check on every tick for every online player, completely eliminating thousands of tick-level string allocations!
Allocation-Free Entity Coordinate Resolution: Optimized the retrieval of entity center locations by utilizing Spigot's non-allocating `entity.getLocation(tempLoc)` signature, avoiding per-tick `Location` object allocations when peeking entity containers.
Precalculated Layout Offset Mapping: Replaced expensive `parent.getTransformation()` lookups with precalculated relative layout offsets during inventory syncing, bypassing reflection/NMS lookups and preventing massive transient JOML vector and quaternion object allocations.
Stationary Player Raycasting Skip: When peeking, if a player is standing still and not rotating their head, the session bypasses the wall-clipping raytrace and look orientation mathematics, drastically saving server CPU while preserving the smooth floating breathing animation.
️ Smarter Claim & Permission Checking (Zero In-Game CPU Waste):
Dynamic Protection Check Caching: The plugin now skips checking claims protection hook checks (`canAccess`) and permission checks (`hasContainerPermission`) if the player is looking at the same block or entity as their active session. Claim status and player permission lookups are now only computed when a session starts.
Eliminated BlockState Snapshot Overhead: When the `hide-when-empty` setting is enabled, the raycasting loop now directly queries the cached session inventory (`isEmpty()`) instead of repeatedly invoking `block.getState()` to construct expensive tile entity snapshot copies on every tick.
Combat Integration & Reflection Caching:
DeluxeCombat Reflection Caching: Cached the `DeluxeCombatAPI` instance to avoid executing `dcApiConstructor.newInstance()` via reflection on every tick, which generated massive GC pressure.
Combat Hook Reflection Caching: Cached intermediate manager classes (`CombatLogX`, `CombatTagPlus`, `PvPManager`) to avoid repeated reflection lookups on high-frequency raycasting ticks.
New Premium Features & Double Chest Centering:
Double Chest Auto-Centering: Dynamic centering of the 3D HUD between the left and right block halves of a Double Chest by resolving their block coordinates midpoint, eliminating offset visual previews.
Hand-held Shulker Box Preview (Hand Peeking): Sneaking while holding a Shulker Box in the main hand or off-hand now spawns a floating 3D preview of its contents in front of the player, without placing it on the ground.
Real-Time Hand Inventory Persistence: Full interactive quick actions support (TAKE, DEPOSIT, swap filter, sorting) on hand-held Shulker previews. Changes are immediately written and serialized back to the held item's NBT block state.
Maintenance & General Cleanup:
Removed Dead Code: Deleted legacy unused classes (`PeekManager.java` and `MathUtils.java`) to slim down the plugin jar size.
Auto-Enable on Join Fix: Added a new config option (`auto-enable-on-join`) to automatically re-enable StoragePeek for players when they join the server, resetting any previous `/storagepeek toggle` disablement, with safe initialization handling.
Startup NullPointerException Fix: Fixed a critical NullPointerException during plugin initialization when `auto-enable-on-join` was enabled. Config cache loading logic has been safely reordered to execute after all manager instantiations (specifically `disabledKey`), ensuring a crash-free startup.
Premium HUD & Particle Customization: Made item quantity displays, durability bars, durability bar colors (high, medium, low thresholds), and particle types/counts for both Ender and Rich themes fully toggleable and customizable inside config.yml.
Combat Culling Bypass Permission: Added support for a new permission storagepeek.bypass.combat which allows admins, moderators, or VIPs to peek containers during active combat.
Disabled Worlds Blacklist: Added a world blacklist option (disabled-worlds) in the configuration to completely deactivate StoragePeek peeking HUDs in specific worlds (e.g., PvP worlds or game lobbies).
Custom Quick-Actions Click Buttons: Introduced config values (quick-actions.left-click / right-click) to customize which mouse button triggers the TAKE vs DEPOSIT quick-actions when aiming at item slots.
Upgrade to StoragePeek v1.1.7 for a lag-free, secure holographic experience! Support us on Discord if you love the plugin!
Interactive Slot Highlight (Hover Slot Backplate): A glowing customizable highlight plate (BlockDisplay of stained glass or light block) now spawns behind the hovered item in Focus Mode, sliding smoothly from slot to slot as your cursor moves.
Volumetric 3D HUD (Subtle Hologram Tilt): The entire HUD now tilts dynamically in 3D (up to 12 degrees) based on the angle of look of the player, giving a realistic physical depth and floating holographic appearance!
Visual Item Search Filter (Item Highlighting): Pressing the swap-hand key (F) while pointing at an item in Focus Mode will filter the container's contents, instantly shrinking non-matching items to miniature size and hiding their texts/durability bars. Pressing F on empty space or air clears the filter.
Holographic Spawn & Despawn Animations: The 3D HUD now smoothly scales up (0 to 1) over 5 ticks (0.25s) when you look at a container, and shrinks back to 0 over 4 ticks (0.2s) before vanishing. Action transitions (like combat/teleporting) remain instant to avoid any latency.
Dynamic Hover Nameplates: When holding Sneak (Focus Mode), looking at an item displays a gorgeous text bubble directly above the slot displaying its custom or vanilla translated name. The bubble slides smoothly from slot to slot as you move your crosshair!
Synchronized Slot Transitions: All dynamically spawned elements (like stack counts, durability bars) scale into view smoothly when they appear.
Fully Configurable: Exposed new parameters in config.yml under the holograms section, including hover-highlight-material, allowing full customization of the slot illumination block type.
Multi-Container Filtering Support: Enabled visual filtering on all supported containers (Hoppers, Dispensers, Furnaces, etc.) while restricting inventory sorting strictly to chest-like containers to protect functional slot layouts.
Interactive Slot Highlight Alignment: Centered the slot highlight plate perfectly behind the hovered item slots by applying a `-0.08f` offset to correct its local corner origin.
Ultra-Smooth HUD Movement (Teleport Interpolation & Lissage): Added client-side teleportation interpolation (teleport-duration: 3) and distance smoothing (distance-smoothing: 0.15), completely eliminating micro-stutters and making the HUD glide silky smooth behind the player's view.
[Bugfix] Accurate Item Selection Projection: Fixed a mathematical inversion in the 3D raycasting coordinate mapping.
Coordinate Alignment Fix: Corrected the display's horizontal and vertical axes alignment.
No More Mirrored Selection: Items are now targeted and highlighted accurately according to where the player is looking, resolving the mirrored targeting issues.
Smooth Interaction Tracking: Unified player input coordinate projection for seamless item grabbing and deposits.
Sneak Eye-Height Targeting Calibration: Replaced manual eye height coordinate math with Spigot's native player.getEyeLocation() across all display and raycast projection routines, completely correcting vertical aim shifts when transitioning to Focus Mode (sneaking).
Locked Coordinates & Billboard in Focus Mode: While frozen in Focus Mode, the HUD's orientation and axes are completely locked in space, and it switches dynamically to a fixed 3D billboard (Display.Billboard.FIXED). This provides absolute targeting stability even if the player walks around or shifts position, eliminating any latency-induced coordinate drift.
[Bugfixes & Optimizations] General Session & Click Enhancements:
Entity & Memory Leak Prevention: Added automatic session cleanup when players teleport, change worlds, or walk too far in Focus Mode (sneaking), using a zero-allocation distance check.
Off-Hand Double Click Fix: Filtered out duplicate off-hand interaction events, resolving instant item swap reverts and duplicate sounds.
Zero Visual Latency (Instant Sync): Forced immediate visual sync of the 3D HUD on items deposit/withdraw, completely removing the previous 250ms sync delay.
Configurable Raycast Frequency: Connected the `raycast-frequency` config parameter to the scheduler (previously hardcoded to run every tick), allowing servers to cut raycasting CPU usage in half.
Durability Bar Lifecycle Optimization: Decoupled the durability bar cleanup from stack quantity text updates, avoiding the redundant destroy-and-recreate cycle when stacks of damaged items decrease.
Modern Minecraft (1.20+) Container Support: Added native support in the default `config.yml` for new container types like Crafters, Chiseled Bookshelves, Decorated Pots, and Jukeboxes, and added guidelines for chested animals (Donkeys, Mules, Llamas).
Full Message Localization: Moved the last remaining hardcoded warning for non-players into `messages.yml` under the `only-players` key.
Garbage Collection & Memory Optimizations: Eliminated array allocations in high-frequency scheduler loops by replacing getContents() copies with Bukkit's native isEmpty() and direct slot getItem() lookups, drastically reducing GC overhead for large servers.
Modern Adventure Component API Migration: Replaced all deprecated setText(String) and ItemMeta.getDisplayName() calls with modern, native Paper Adventure text(Component) and ItemMeta.displayName() methods, removing outdated deprecation bypasses and improving overall formatting performance.
Dynamic Inventory Filter Sync consistency: Added immediate filter scale synchronization during active inventory checks and sync updates. Modifying item stacks, quantity labels, and durability bars will now respect active search filters instantly on update.
Ender Chest & Solid Background Depth Fix: Dynamically toggles passenger display entities' billboard modes in sync with the anchor. This prevents items from rendering behind solid opaque backgrounds (like Obsidian on Ender Chests) while maintaining smooth camera following when unfrozen.
Upgrade to StoragePeek v1.1.6 for pixel-perfect hover and interaction detection!
[Audio] Configuration-Driven Soundscapes: Say goodbye to hardcoded audio!
Customizable Actions: You can now customize sound types, volume, and pitch for hover, take, deposit, and sort actions directly inside config.yml.
Registry Lookup Support: Uses modern namespaced registries for sound lookup on 1.21.3+ while maintaining backwards compatibility for legacy strings.
[Combat] Anti-Abuse Combat Culling & Hooking: Prevents visual distraction and HUD exploits during active combat.
Auto-Dismount & Culling: Raycasting is instantly paused and active holographic viewports are closed when a player enters PVP combat.
Soft-Hook Integrations: Dynamically hooks into major combat plugins via reflection: CombatLogX, CombatTagPlus, PvPManager, and DeluxeCombat.
Built-in Damage Listener: Includes a built-in PvP damage tracker as a fallback (default 10-second tag cooldown).
[UX] Personal HUD Toggle Command (/storagepeek toggle): Empower players to toggle their viewports.
Player Preferences: Allows players to turn the holographic chest hud on/off at will.
Persistent Storage: Saves state natively in the player's PersistentDataContainer (PDC) so settings persist across server reboots, disconnects, and logins.
Smart Sorting Key: Pressing the hand-swap key (default keybind F) while focusing on a container merges items and sorts them alphabetically.
Supported Inventories: Optimized for homogeneous storage containers (Chest, Ender Chest, Shulker Box, Barrel) to preserve specific slot indexes for special blocks (like brewing stands and furnaces).
[Security] Granular Container Permissions: Restrict peeking on specific block materials.
Material-Specific Nodes: Added permissions check in the format storagepeek.peek.<material_name> (e.g. storagepeek.peek.ender_chest, storagepeek.peek.chest).
Granular Fallback: Matches wildcards or falls back to the generic storagepeek.peek permission.
Upgrade to StoragePeek v1.1.4 to enhance player interactions and lock down container security!
[Performance] The Passenger Engine (Network Revolution): Completely overhauled the rendering architecture to use hardware Passenger vectors instead of iterative teleport packets.
100% Zero Flicker: Divides per-tick network load by up to 30x. One singular anchor entity now governs the viewport, while matrices handle the relative spatial grid seamlessly.
[Interaction] Bidirectional Quick Deposit & Smart Swapping: Unlocked full two-way transactional mechanics directly from the holographic viewport.
Smart Merge: Right-click targeted slots to intelligently fill inventory gaps or transfer full stacks.
Context Swapping: If target content differs, StoragePeek now dynamically SWAPS your hand-held item with the targeted slot instantly!
[Visuals] Interactive Focus & Hover Scaling: Targeting logic is now reactive and provides clear sensory confirmation.
Dynamic Expansion: Hovered items now seamlessly scale up (interpolated dynamically on the client) when visually targeted, accompanied by high-fidelity mechanical auditory feedback.
Parallax Correction: Mathematically fortified our topology normal mapping to completely eliminate grid drift when viewing edge-cases of the HUD matrix.
[Under The Hood] Non-Allocating Raytracer Caching: Backported our extreme optimization suite. By leveraging direct primitive memory gates instead of location-wrapping heuristics, idle CPU iterations produce **Zero Garbage Overhead** during idle tickers.
[Performance Catalyst] Adaptive Occlusion & Stack Algebra: Squeezed every drop of performance from the core tick cycles.
Static Raycast Culling: The engine now halts physical grid raytracing completely for stationary or idle players. Delivers a monumental ~90% reduction in raycast calculations across active hubs and spawns!
Zero-Heap Geometry Algebra: Converted all vector projection, planar collisions, and distance calculations to use stack-allocated, in-place primitive data structures. Interactive HUD hovering now generates **exactly 0% heap pressure**!
Elevate your server's interactivity and divide network overhead to zero with v1.1.3!
[Fix] Critical Dungeon Chest Persistence: Fixed a complex underlying issue where ungenerated LootTable containers (dungeons, stronghold chests, fortresses) could sometimes fail to persist their visual items back into the actual server TileEntity.
API Correction: Properly routed loot generation through `getSnapshotInventory()` instead of the live detached state, fully resolving the synchronization desync inherent in older builds.
Instant Sync: Added a force-refresh lifecycle hook immediately after generation to guarantee the 3D HUD reveals the newly minted contents in the exact same frame the look occurs.
[Stability] Modern API Alignment: Reinforced block state validity checks during background raycasting to maintain flawless compatibility with the absolute latest Paper architectures.
️ Stabilize your dungeon exploration mechanics! Highly recommended update to v1.1.2.
[Feature] Empty Preview Toggle: Added a highly requested `hide-when-empty` configuration option! You can now choose whether the preview HUD should be entirely hidden when looking at empty blocks or entities, allowing for an even cleaner and less intrusive visual experience.
[Optim] Performance Tuning: Minor internal optimizations to inventory parsing and session validation.
[Fix] Dungeon Loot Previews: Resolved an issue where ungenerated containers (like dungeon chests or loot minecarts) would display as empty. Looking at these now correctly triggers the standard loot generation, using the player's luck attribute, and reveals the item contents instantly!
[Logic] Advanced Inventory Parsing: Enhanced HookManager to provide robust contextual inventory parsing across legacy and dynamic block states.
️ Experience the most customizable and performant 3D container preview yet! Update to v1.1.1 today.
[Major] Zero-Dependency Core: We have completely decoupled StoragePeek from PacketEvents and ProtocolLib. The plugin now runs entirely on its own native implementation, eliminating startup crashes and version conflicts forever!
[New] Modular Hook Manager: Refactored the integration system. Oraxen, Nexo, and ItemsAdder support is now more robust and modular, preventing NoClassDefFoundErrors on servers without these plugins.
[Optim] Protocol Stability: Fully optimized for Paper 1.21.1+ with deep support for modern Display Entities.
[Optim] Ultra-Low Overhead: Optimized raycasting and session management for high-population servers.
[Feature] Smart Anti-Clipping: Refined logic to ensure the HUD remains perfectly visible even when looking at containers from sharp angles or at very close range.
[Fix] Reliable Session Cleanup: Guaranteed removal of all HUD components when moving between worlds or quitting.
Experience the most stable and performant 3D container preview yet! v1.1.0 is a complete internal rebirth.
[Feature] Dual Packet Provider: Added support for PacketEventsAPI. The plugin now automatically detects and uses the best available handler (PacketEvents, ProtocolLib, or Native Paper API).
[Requirement] Dependency Shift: ProtocolLib is no longer a hard requirement. The plugin will now enable correctly even without it, offering more flexibility for server administrators.
[Optimization] Detection Logic: Improved the startup sequence to smoothly transition between different packet handlers based on your server setup.
[BugFix] Movement Persistence: Fixed a critical issue where the preview hologram would remain stuck on the screen if the player moved (WASD) without changing their head rotation.
[Optimization] Precision Raycasting: Refined the detection skip condition to include character position changes, ensuring the HUD correctly disappears when walking away or behind obstacles.
[Logic] Cache Cleanup: Improved memory management and interaction responsiveness by implementing a dedicated cleanup system for player-specific tracking data.
️ Experience the most stable and responsive 3D container preview ever!
[New] Dynamic HUD Themes: The preview now adapts visually! Discover the new Ender Theme (Obsidian & Particles) and the Rich Theme (Gold & Sparkles).
[New] Glassmorphism & Translucency: Shulker boxes now use a stunning Stained Glass background by default for a clean, modern HUD.
[New] Auto-Update Configuration: The plugin now automatically migrates your config.yml and messages.yml, adding missing keys from new updates without resetting your settings.
[New] Full Background Control: Admins can now customize the background material for every container type in config.yml.
[Feature] Dual Packet Provider: Full support for PacketEventsAPI and ProtocolLib. The plugin automatically selects the best available bridge.
[BugFix] Movement Stability: Improved raycasting logic to ensure the HUD follows the player perfectly during movement and rotations.
[Optimization] Dependency Shift: ProtocolLib is no longer mandatory.
[BugFix] Movement Persistence: Fixed issues where the hologram would remain stuck during WASD movement.
[Optimization] Precision Raycasting: Refined detection to ensure the HUD disappears correctly behind obstacles.
[Logic] Cache Cleanup: Improved memory management for player-specific tracking data.
️ Experience the most immersive and customizable 3D container preview ever!
[New] Durability Bars: Added high-fidelity durability bars under tools, weapons, and armor in the 3D HUD, perfectly mimicking the vanilla inventory experience.
[New] Dynamic Colors: The durability bar changes color in real-time (Green -> Yellow -> Red) based on the item's remaining life.
[Optimization] Entity Sync: Improved synchronization logic for durability updates, ensuring the bar scales smoothly when items are repaired or damaged.
[BugFix] HUD Clipping: Finalized raycasting improvements for complex block shapes, ensuring the HUD remains perfectly visible in tight spaces.
️ Keep a closer eye on your gear with the most advanced 3D HUD on the market!
[Fix] 3D HUD Desync: Rewrote quantity labels using native TextDisplay entities to eliminate jitter and offsets during player movement and "zoom" animations.
[Fix] Clipping & Collision: Added dynamic depth calculation to prevent the HUD from clipping into walls. Improved raycasting to correctly detect Chest Minecarts and Boat with Chests.
[New] Message System: All user-facing messages are now externalized in messages.yml for full localization support and color customization.
[Aesthetics] Label Alignment: Fixed horizontal alignment of item quantities to ensure they are perfectly centered on the item models.
[Optimization] ProtocolLib Cleanup: Removed redundant packet listeners, significantly reducing overhead for a smoother, lag-free experience.
Experience the most stable and polished 3D container visualization on Spigot!
[Feature] Universal Protection Hooks: Massive security update! StoragePeek now natively respects claims and protection zones from:
WorldGuard, Lands, GriefPrevention, BentoBox, SuperiorSkyblock2, Towny, and LWC!
[Feature] Private Visuals: Leveraging modern Paper API to ensure 3D previews are strictly private. Only the player looking at the container can see the HUD, preventing any "visual griefing".
[Improvement] Security Engine: Completely rewritten ProtectionManager that dynamically detects active plugins on your server.
[Refactor] High-Performance API: Optimized dependency handling for 1.21.4 servers, avoiding conflicts and ensuring a lightweight footprint.
[Stability] Final Fixes: Resolved all remaining dependency resolution issues for a seamless build and run experience.
️ Security is our priority: Your containers have never been this safe and beautiful at the same time!