How detection works
eDupeFix uses two mechanisms, because a dupe copies an item exactly, and only some items can be told apart.
1. Item ids (items that don’t stack)
Netherite and diamond gear, elytras, tridents, totems, enchanted books, shulker boxes and bundles (plus anything enchanted or renamed, by default) get a random 64-bit id, written into the item’s data. Players never see it. A dupe copies the item with its id, so:
- Two copies in one place (one chest, one inventory) is a clone, at once.
- One id in two places is a clone too. eDupeFix knows where every id was last seen. When an item turns up somewhere it couldn’t have come from (it wasn’t in the chest the player had open, or in the hopper’s source), it jumped. eDupeFix then looks at both places in the same tick. Found in both, it’s a confirmed clone.
- When the old place can’t be looked at right now (an unloaded chunk, an offline player), it’s looked at when it comes back: when the chunk loads or the player joins.
Every move is history: opened and closed containers, hoppers (a whole chain of hoppers is one line), dropping and
picking up, shulkers placed and broken, deaths, joining and leaving, auction houses. That history is what
/edf history shows and what goes into every alert.
A shulker box carries its contents: when a shulker is cloned, the alert says what was inside, and the items inside don’t each raise an alert of their own.
2. The book of accounts (stackable items)
Spawners, netherite blocks, beacons… stack, so they can’t carry an id: an id would stop them stacking. eDupeFix counts them instead, in every player’s inventory (shulker contents included). It counts each time they close an inventory, every minute, and when they join or leave. Whatever a player gains has to be explained by something eDupeFix saw:
- items picked up from the ground, taken out of a container, bought or claimed on an auction house, taken from a furnace or returned from the vault: exact amounts;
- crafting, villager trades, breaking a watched block (spawner plugins), a trusted command (
/kit,/shop…), a trusted menu, a console command that names the player (crates, votes): everything gained in the next few seconds.
What’s left adds up over 10 minutes. At the material’s medium limit staff hear about it; at high the unexplained
amount is confiscated. The alert says what part was explained, and which menu or command the player had just used.
Containers keep a count too: what a chest had when it was last closed, plus what hoppers put in or took out. A chest that gained watched items on its own catches chunk, piston and rollback dupes.
What each alert means
| Alert | Severity | Means |
|---|---|---|
| Duplicated: in two places at once | CRITICAL | One id found at both places in the same tick |
| Duplicated: two copies in one place | CRITICAL | One id twice in one inventory or container |
| Probably duplicated | MEDIUM | The original was still there, but the new copy had already moved on |
| Unexplained gain (player or container) | HIGH / MEDIUM | Past the material’s high or medium limit |
| Copy of a creative-mode item | LOW | Creative mode clones items as a feature |
| Template | LOW | One id copied many times: usually a kit or shop item (/edf untag) |
What each severity does is up to you (actions in config.yml). By default CRITICAL and HIGH confiscate, and
everything from MEDIUM up is told to staff and Discord.
Confiscating
The copy that appeared from nowhere (copy B) goes to the vault; copy A stays. Which one is the “original” can’t
be known: they’re identical. Staff open /edf vault and return it (to its owner, now or when they next join) or
delete it. A returned item gets a new id, so it’s a separate item from then on.
What it can’t see
- Items duped before eDupeFix first saw them get different ids. eDupeFix gives ids at every chance (opening a chest, closing an inventory, joining, every minute) to keep that window short.
- Plugins that move items without events (some backpacks,
/invseeedits by other plugins, chest sorters) make items jump. That’s shown in the history as “appeared with no recorded way”, and it’s an alert only when the old copy is still there. - Kit and shop plugins that saved an item after it got an id hand out copies of it. eDupeFix takes such an id
for a template after
template-afterclones. Take the id off the template with/edf untag. - On Folia, items lying on the ground can’t be looked up by id from another region, so ground copies are only compared when picked up.