EndyDev Read the docs
Esc

Configuration

Everything is in plugins/eDupeFix/config.yml, explained in place. /edf reload applies it, except database (restart).

The parts that matter most

tracking: which items get an id. Only items that don’t stack can have one. materials takes patterns: "NETHERITE_*", "*SHULKER_BOX". With all-unstackable: true every unstackable item is followed (more history, more rows in the database).

ledger.materials: the stackable items that are counted, each with a medium and a high limit: how many unexplained ones, in window-minutes, before staff hear about it (medium) or they’re confiscated (high). Put here what’s worth money on your server.

ledger.trusted-commands and ledger.trusted-menus: what gives items legitimately on your server. A player who gains spawners right after /kit or inside your “Shop” menu is fine. Gains inside menus that aren’t trusted are still alerts, and the alert names the menu: that’s how a GUI dupe shows up. Console commands that name a player (crates, votes, many shops) are trusted on their own.

actions: what each severity does: confiscate, staff, discord. run-commands: console commands per severity, with %player%, %uuid%, %item%, %id%, %amount%, %severity%, %kind%, %alert%. Be careful with automatic punishments: the player who received a duped item isn’t always the one who duped it.

retention: how long history is kept (30 days) and how long an item nobody sees is remembered (180 days).

Messages

language: en or es reads lang/en.yml or lang/es.yml. They’re MiniMessage, so colors, hover and click work. To write your own, copy one to lang/xx.yml, translate it and set language: xx; anything you leave out comes from English. {n} (alert number) and {id} (item id) also work inside click commands.

Every option

OptionDefaultWhat it does
license-key""Only for a key you got another way. A BuiltByBit download already has yours inside the jar
languageenen, es or your own file in lang/
server-namesurvivalWritten into every place an item was seen. On a network, a different one per server
database.typesqlitesqlite, mysql or mariadb. Needs a restart
database.fileedupefix.dbThe SQLite file, in plugins/eDupeFix/
database.host, port, name, user, passwordlocalhost, 3306, edupefix, root, ""MySQL/MariaDB connection
database.params""Extra JDBC parameters, e.g. useSSL=false
database.table-prefixedf_In front of every table name
database.pool-size5Connections kept open
tracking.all-unstackablefalseGive an id to every item that doesn’t stack
tracking.enchanted, tracking.renamedtrueAlso enchanted and renamed items
tracking.materialsnetherite, diamond, shulkers, bundles, elytra, trident, mace, totem, enchanted bookWhich items get an id. * matches anything
tracking.exclude[]Never these, same patterns
tracking.template-after4Clones of one id before it’s taken for a kit or shop template
ledger.enabledtrueThe book of accounts for stackable items
ledger.window-minutes10How long unexplained gains add up
ledger.scan-seconds60How often each player is counted, besides every inventory close
ledger.containerstrueCount containers too (chunk, piston and rollback dupes)
ledger.materialsspawner, beacon, nether star, netherite, debris, diamond and emerald blocks, god appleMATERIAL: {medium: n, high: n}
ledger.trusted-commandskit, kits, shop, buy, crate, crates, claim, vote, rewardsWhat a player gains right after one is explained
ledger.trusted-menus[]Menu titles (or part of them) that give items
ledger.trusted-menu-pluginsAuctionHouse, CrazyAuctionsEvery menu of these plugins is trusted
actions.<SEVERITY>see belowAny of confiscate, staff, discord
run-commands.<SEVERITY>[]Console commands run on an alert
discord.webhook""The webhook URL. Empty: nothing goes to Discord
discord.mention""Pinged on alerts, e.g. "<@&123456789012345678>"
discord.mention-fromCRITICALThe lowest severity that pings
retention.history-days30Item history older than this is deleted
retention.items-days180Items nobody has seen for this long are forgotten

The default actions:

config.yml
actions:
  CRITICAL: [confiscate, staff, discord]
  HIGH: [confiscate, staff, discord]
  MEDIUM: [staff, discord]
  LOW: []

Your own limits for the book of accounts, e.g. on a server where spawners are sold in a shop:

config.yml
ledger:
  materials:
    SPAWNER: {medium: 4, high: 16}
    BEACON: {medium: 2, high: 6}
  trusted-menus: ["Spawner Shop"]