FlameStack
High-Performance Ground Item Stacking, Vanilla-Aware Thresholds, Custom Displays, Material Filters, and Folia Support
Stack dropped items. Reduce entity load. Preserve vanilla behavior until extended stacking is actually needed.
Bukkit • Spigot • Paper • Folia • Java 8 • Minecraft 1.8+
Overview
FlameStack is a professional Minecraft item stacker plugin built to reduce the number of dropped item entities on SMP, survival, economy, farming, and high-player-count servers.
Instead of repeatedly scanning every entity in every loaded world, FlameStack maintains an optimized spatial index organized by world, chunk, and vertical chunk section. Newly dropped items are registered through lifecycle events, placed into the correct indexed section, and processed through bounded lookup budgets.
The result is a lightweight ground item stacking plugin that can combine hundreds or thousands of identical dropped items into one logical item entity without constantly performing expensive world-wide entity searches.
FlameStack also includes a vanilla-aware minimum stacking requirement. Normal item stacks remain untouched until their combined amount exceeds the material's normal Minecraft stack limit. This prevents the plugin from renaming or modifying ordinary dropped items when extended stacking is not yet necessary.
If you are searching for a Minecraft item stacker, Paper item stacking plugin, Folia item stacker, dropped item optimizer, or a configurable alternative to basic item merge plugins, FlameStack is designed for that role.
Why FlameStack
Most item stacking plugins use one of two approaches.
They either rely entirely on Minecraft's normal merge limit, which cannot represent large item piles, or they repeatedly scan nearby entities and worlds with little control over lookup cost.
FlameStack uses a maintained spatial index instead.
Each tracked item is associated with:
- Its world
- Its chunk X and Z
- Its 16-block vertical chunk section
- Its material
- Its current logical amount
- Its item similarity fingerprint
- Its exact position
When FlameStack searches for a merge target, it checks only the indexed sections intersecting the configured merge radius. It does not search unrelated chunks, unrelated worlds, or every loaded entity.
Lookup work is also bounded through configurable scan and candidate limits, allowing server owners to control how much item processing may occur during each coordinator cycle.
Vanilla-Aware Minimum Stack Requirement
FlameStack is configured by default to preserve normal Minecraft item behavior until extended stacking is required.
Default configuration:
Code:
trigger:
enabled: true
respect-vanilla-max-stack: true
With this enabled, two item entities only become eligible for FlameStack merging when their combined amount exceeds the material's vanilla maximum stack size.
Examples:
Code:
Stone 32 + Stone 32 = 64
Result: Remains untouched.
Stone 32 + Stone 33 = 65
Result: Eligible for FlameStack merging.
Stone 64 + Stone 64 = 128
Result: Eligible for FlameStack merging.
Diamond Sword 1 + Diamond Sword 1 = 2
Result: Eligible because swords normally stack to 1.
This creates a more natural system.
Players can drop and interact with ordinary item stacks normally. FlameStack only begins extended stacking when Minecraft's normal stack capacity is no longer enough.
Smart Stack Displays
FlameStack can display the item name and logical amount directly above qualifying stacked items.
Default format:
Code:
<white><item_name> <dark_gray>•</dark_gray> <gradient:#ff6b00:#ffb347><bold>x<amount></bold></gradient>
Example:
Code:
Stone • x320
The floating display is not applied to every dropped item.
With the default vanilla-aware trigger enabled:
- A normal stack of 64 stone has no FlameStack floating name.
- A logical stack of 65 stone displays its name and amount.
- A logical stack of 320 stone displays its complete amount.
- A non-stackable item begins displaying at an amount of 2.
This avoids unnecessary visual clutter and prevents FlameStack from interacting with item displays before the configured stacking threshold has been achieved.
Items with their own custom display name use that name in the FlameStack label instead of replacing their item metadata.
Display formatting supports Adventure MiniMessage syntax and can be changed directly from configuration.
Large Logical Item Stacks
Minecraft normally limits most item stacks to 64. FlameStack can represent much larger quantities inside one dropped item entity.
The default maximum is:
Code:
stacking:
max-stack-size: 2304
That is equivalent to 36 full stacks of 64 items represented by one ground entity.
The maximum is configurable, allowing each server to select a limit appropriate for its gameplay and performance requirements.
When the target reaches its configured maximum, any remaining quantity stays on the donor item instead of being deleted.
Material Blacklist and Whitelist
FlameStack includes one configurable material filter supporting both blacklist and whitelist operation.
Default:
Code:
allow_list:
enabled: true
mode: blacklist
contents:
- BARRIER
Available modes:
Blacklist
Every valid material may stack except the materials listed in
contents.Whitelist
Only materials listed in
contents may stack.Material input is normalized and resolved safely. Namespaced material values, spaces, hyphens, and standard Bukkit material names are supported.
Examples:
Code:
BARRIER
PRISMARINE_SHARD
minecraft:stone
red-stained-glass
red stained glass
Invalid material names are logged and ignored instead of crashing or preventing the plugin from enabling.
High-Performance Spatial Index
FlameStack is designed around incremental item tracking instead of repeated full-world searches.
Its lookup architecture uses:
- Concurrent world and chunk-section indexes
- Event-driven item registration
- One-tick deferred spawn registration for reliable entity lifecycle state
- Bounded item scan budgets
- Bounded candidate checks per item
- Exact squared-distance filtering
- Material and metadata similarity filtering
- Stale index cleanup
- Deduplicated work queues
- Deterministic merge reservations
The plugin does not perform a global entity sweep during every scan cycle.
Only tracked items and indexed sections relevant to the configured radius are considered.
Safe Merge Transactions
Merging two live entities can conflict with other server actions such as:
- Player pickup
- Hopper pickup
- Vanilla item merging
- Chunk unloading
- Item despawning
- Concurrent FlameStack scans
FlameStack uses temporary merge reservations to prevent the same item from participating in multiple transfers at once.
During a reserved transfer:
- The donor and target are protected from duplicate merge attempts.
- Player and inventory pickup events are blocked only for the reserved entities.
- Both live item stacks are validated again before mutation.
- Material, metadata, distance, trigger, and capacity are checked again.
- The target is updated before the donor is finalized.
- Failed donor finalization causes the target quantity to be rolled back.
- Timed-out reservations are released automatically.
This keeps the item index and represented quantity consistent during concurrent gameplay activity.
Real Folia Support
FlameStack declares and implements Folia support.
Code:
folia-supported: true
Folia support is not limited to adding the descriptor flag.
The plugin detects scheduler capabilities at runtime and routes item entity reads and mutations through the owning entity scheduler on Folia.
On Bukkit, Spigot, and standard Paper servers, entity work falls back to the normal Bukkit scheduler.
The asynchronous coordinator only handles thread-safe structures such as:
- UUIDs
- Immutable item snapshots
- Concurrent maps
- Concurrent sets
- Bounded queues
- Primitive coordinates
Live Bukkit entity mutation remains on the correct scheduler context.
Adventure and MiniMessage
FlameStack uses Adventure and MiniMessage for configurable messages and formatting.
Supported formatting includes:
- Named colors
- Hex colors
- Gradients
- Bold, italic, underline, and other decorations
- Safe unparsed placeholders
- Configurable prefixes
- Configurable help and statistics output
- Configurable floating stack labels
Adventure dependencies are shaded and relocated into FlameStack, so no separate Adventure plugin dependency is required.
Runtime Debugging
FlameStack includes bounded internal diagnostics for server owners who need to understand why an item was not registered, located, reserved, or merged.
Debugging is disabled by default:
Code:
debug: false
When enabled, FlameStack reports structured stages and reasons such as:
Code:
stage=TRACK reason=REGISTERED
stage=LOOKUP reason=TARGET_SELECTED
stage=LOOKUP reason=NO_TARGET
stage=LOOKUP reason=OUT_OF_RADIUS
stage=LOOKUP reason=TRIGGER_NOT_REACHED
stage=LOOKUP reason=MATERIAL_NOT_ALLOWED
stage=MERGE reason=MERGE_SUCCESS
Repeated lookup messages are throttled per item to avoid uncontrolled console spam.
Debug output can be enabled, reloaded, used for diagnosis, and disabled again without restarting the server.
Runtime Statistics
The statistics command exposes current internal state:
- Detected platform
- Number of tracked item entities
- Number of indexed chunk sections
- Number of active merge reservations
This allows administrators to confirm that item registration and indexed lookup are working without exposing implementation internals to players.
Commands
Code:
/flamestack
/flamestack help
/flamestack reload
/flamestack stats
Aliases:
/fs
/fstack
/flamestack help
Shows the configured FlameStack command help.
/flamestack reload
Reloads configuration, material filters, trigger behavior, display formatting, debug state, and scan settings.
/flamestack stats
Shows the detected platform, tracked item count, indexed section count, and active reservation count.
Permissions
Code:
flamestack.admin
flamestack.reload
flamestack.stats
flamestack.admin
Master administrative permission. Includes reload and statistics access.
flamestack.reload
Allows
/flamestack reload.flamestack.stats
Allows
/flamestack stats.All administrative permissions default to server operators.
Installation
- Download FlameStack.
- Place the jar inside your server's
pluginsfolder. - Start the server once to generate
config.yml. - Edit the stacking, material, trigger, display, and message settings.
- Use
/flamestack reloadto apply configuration changes.
FlameStack has no required plugin dependencies.
Compatibility
Code:
Minecraft server API: 1.13+
Java bytecode: Java 8
Bukkit: Supported
Spigot: Supported
Paper: Supported
Folia: Supported
api-version: 1.13
Required plugin dependencies: None
FlameStack uses capability detection for Folia scheduling rather than relying on server version strings.
Default Configuration
Code:
# FlameStack by ArkFlame Studios
# Text uses Adventure MiniMessage:
# https://docs.advntr.dev/minimessage/format.html
config-version: 1
# Enables bounded internal diagnostics for item registration, indexed lookup,
# reservation, validation, and merge decisions. Reload with /flamestack reload.
# Keep false during normal operation.
debug: false
stacking:
# Maximum amount represented by one dropped item entity.
max-stack-size: 2304
# Candidate search radius in blocks. Candidate lookup uses chunk-section
# indexes; it does not scan every item in every world.
merge-radius: 8.0
# Bounded asynchronous coordinator cadence. Bukkit entity state is never
# read here; each live item is inspected and mutated on its owning entity
# scheduler.
scan-interval-ticks: 20
scan-budget-per-run: 256
candidate-limit-per-item: 64
allow_list:
enabled: true
# Modes: blacklist or whitelist
mode: blacklist
contents:
- BARRIER
trigger:
enabled: true
# When trigger.enabled and respect-vanilla-max-stack are both true, two
# nearby item entities merge only when their combined amount exceeds the
# material's vanilla maximum.
#
# Example:
# Stone 32 + 32 stays untouched.
# Stone 32 + 33 may merge.
#
# The floating name appears only when the resulting logical amount is
# greater than the vanilla maximum.
respect-vanilla-max-stack: true
display:
enabled: true
always-visible: true
format: "<white><item_name> <dark_gray>•</dark_gray> <gradient:#ff6b00:#ffb347><bold>x<amount></bold></gradient>"
messages:
prefix: "<gradient:#ff6b00:#ffb347><bold>FlameStack</bold></gradient> <dark_gray>»</dark_gray> "
no-permission: "<red>You do not have permission to use this command."
reload-success: "<green>Configuration reloaded successfully."
unknown-subcommand: "<red>Unknown subcommand. Use <yellow>/flamestack help</yellow>."
help:
- "<gold><bold>FlameStack Commands</bold>"
- "<yellow>/flamestack help <gray>- Show this help"
- "<yellow>/flamestack reload <gray>- Reload configuration"
- "<yellow>/flamestack stats <gray>- Show runtime statistics"
stats:
- "<gold><bold>FlameStack Runtime</bold>"
- "<gray>Platform: <white><platform>"
- "<gray>Tracked items: <white><tracked>"
- "<gray>Indexed sections: <white><sections>"
- "<gray>Active merge reservations: <white><reservations>"
Code:
name: FlameStack
version: 0.0.1
main: com.arkflame.flamestack.FlameStackPlugin
api-version: 1.13
author: ArkFlame Studios
description: Item Stacker plugin but professional, configurable and high-performance.
website: https://builtbybit.com/creators/linsaftw.152552/
folia-supported: true
commands:
flamestack:
description: Manage FlameStack.
aliases:
- fs
- fstack
usage: /<command> [help|reload|stats]
permissions:
flamestack.admin:
description: Grants all FlameStack administrative commands.
default: op
children:
flamestack.reload: true
flamestack.stats: true
flamestack.reload:
description: Reloads FlameStack configuration.
default: op
flamestack.stats:
description: Shows FlameStack runtime statistics.
default: op
Frequently Asked Questions
Does FlameStack rename every dropped item?
No. With the default trigger settings, the floating display only appears after the logical amount becomes greater than that material's normal Minecraft stack limit.
Will two half-stacks always be merged?
Not when vanilla-aware triggering is enabled. Stone
32 + 32 remains at the vanilla limit of 64. Stone 32 + 33 exceeds the limit and becomes eligible.Can I prevent specific materials from stacking?
Yes. Use blacklist mode and add those materials to
allow_list.contents.Can I allow only selected materials?
Yes. Change
allow_list.mode to whitelist.What happens if I enter an invalid material?
The material is logged and ignored. It does not crash the plugin.
Can I change the maximum logical stack size?
Yes. Change
stacking.max-stack-size. The default is 2304.Can I change the merge distance?
Yes. Change
stacking.merge-radius. The default is 8 blocks.Does FlameStack support custom item names?
Yes. When the item has its own display name, FlameStack uses its plain item name in the floating amount label without replacing the item's metadata.
Does FlameStack support Folia?
Yes. FlameStack declares Folia support and uses capability-detected entity scheduler execution for item entity operations.
Does it require PlaceholderAPI, ProtocolLib, PacketEvents, or another plugin?
No. FlameStack has no required plugin dependencies.
How can I diagnose an item that does not merge?
Set
debug: true, run /flamestack reload, reproduce the issue, and review the structured TRACK, LOOKUP, RESERVATION, TRANSFER, and MERGE messages.What Makes FlameStack Valuable
FlameStack is not a cosmetic rename utility and not a simple repeating nearby-entity loop.
It is a focused Minecraft ground item stacking system with:
- Vanilla-aware minimum stacking thresholds
- Large configurable logical stacks
- Chunk-section spatial indexing
- Bounded lookup work
- Blacklist and whitelist material control
- MiniMessage displays and messages
- Structured debugging
- Live runtime statistics
- Concurrent merge reservations
- Bukkit, Spigot, Paper, and Folia support
For SMP servers, survival networks, economy servers, farms, grinders, and other environments where large quantities of dropped items can create unnecessary entity load, FlameStack provides a controlled and configurable way to consolidate those items without abandoning normal Minecraft behavior.
FlameStack
Stack items. Reduce entity load. Keep gameplay clean.
Developed by ArkFlame Studios
