Configuration
Time to tune DupeTrace to your server's needs! This page explains every knob, switch, and dial in your config.yml.
Configuration ⚙️
Time to tune DupeTrace to your server's needs! This page explains every knob, switch, and dial in your config.yml.
Where's the Config File?
You'll find it at: plugins/DupeTrace/config.yml
It gets created automatically the first time you load the plugin. If you mess it up beyond repair, just delete it and restart – we'll make you a fresh one.
Database Settings
database:
postgres:
url: jdbc:postgresql://localhost:5432/dupe_trace
user: postgres
password: postgres
pool-size: 10
connection-timeout-ms: 30000
debug: falsedatabase.postgres.url
database.postgres.urlDefault: jdbc:postgresql://localhost:5432/dupe_trace
Your PostgreSQL connection string. Check out the Installation guide for URL format examples.
database.postgres.user
database.postgres.userDefault: postgres
Your database username. Please don't use root. Please. We're begging you.
database.postgres.password
database.postgres.passwordDefault: postgres
Your database password. And for the love of Notch, change this from the default if you're on a public server!
database.postgres.pool-size
database.postgres.pool-sizeDefault: 10 (range: 1-50)
How many simultaneous database connections to keep in the pool. Think of it like having multiple checkout lanes at a grocery store.
Small servers (< 50 players): 5-10 is perfect
Medium servers (50-200 players): 10-20 should do it
Large servers (200+ players): 20-30 keeps things smooth
Mega servers (500+ players): 30-50 for the big leagues
database.postgres.connection-timeout-ms
database.postgres.connection-timeout-msDefault: 30000 (30 seconds)
How long to wait for a database connection before giving up. If you're getting timeout errors, your database might be overloaded or your network connection is having a bad day.
database.debug
database.debugDefault: false
Turns on verbose database logging. Warning: This is very chatty and will spam your console. Only enable this when troubleshooting database issues.
Detection & Alert Settings
broadcast-duplicates
broadcast-duplicatesDefault: true
When set to true, duplicate detection messages are broadcast to all online players. When false, only admins with the dupetrace.alerts permission see them.
When to disable:
Your players panic every time they see a dupe alert
You want to investigate quietly before announcing
alert-admins
alert-adminsDefault: true
Sends duplicate alerts to players with the dupetrace.alerts permission. If you turn this off, alerts only go to the console logs.
When to disable:
You're getting too many false positives (tune
movement-grace-msfirst!)You prefer reviewing logs instead of live alerts
auto-remove-duplicates ⚠️ BETA
auto-remove-duplicates ⚠️ BETADefault: true
When a duplicate is detected, automatically delete the extra copy. This is powerful but can cause issues if you have false positives!
Recommendation: Start with this set to false and observe your server for a week. Once you're confident the detection is accurate, enable it.
keep-oldest-on-dup-remove
keep-oldest-on-dup-removeDefault: true
When auto-removing duplicates, keep the copy that was seen first in the database and remove the newer ones. This usually means keeping the legitimate item.
If set to false, it removes the oldest and keeps the newest (which is... weird, and probably not what you want).
Timing & Performance Tuning
movement-grace-ms 🎯 Most Important Setting
movement-grace-ms 🎯 Most Important SettingDefault: 750 (0.75 seconds)
The "grace period" after an item moves before we start checking for duplicates. This prevents false positives during legitimate item transfers.
The Magic Balance:
Too low (< 500ms): Lots of false positives from lag or fast item transfers
Too high (> 2000ms): Dupers get a bigger window to exploit
Sweet spot: 500-1000ms for most servers
Adjust based on your server's performance:
Laggy server or lots of plugins? → Increase to 1000-1500ms
Low-latency beast machine? → You can go as low as 500ms
Average server? → 750ms is perfect (trust us, we tested)
duplicate-alert-debounce-ms
duplicate-alert-debounce-msDefault: 2000 (2 seconds)
Minimum time between duplicate alerts for the same item. Prevents alert spam if someone's going ham with a dupe exploit.
Lower values = more alerts. Higher values = less console spam.
known-items-ttl-ms
known-items-ttl-msDefault: 600000 (10 minutes)
How long to keep items in memory before clearing them out to prevent memory leaks. Items are still tracked in the database – this only affects the in-memory cache.
Adjust if:
Memory usage is high → Lower to 300000 (5 mins)
You have lots of RAM to spare → Increase to 900000 (15 mins)
scan-interval
scan-intervalDefault: 200 (10 seconds, because 20 ticks = 1 second)
How often (in ticks) to run the periodic inventory scanner. The scanner checks all online players' inventories for duplicate UUIDs.
Performance Impact:
Lower value = more frequent scans = higher CPU usage
Higher value = less frequent scans = dupes might hide longer
Recommended values:
Small servers: 100 ticks (5 seconds)
Average servers: 200 ticks (10 seconds) ← default
Large servers: 400 ticks (20 seconds)
Creative Mode Handling
allow-creative-duplicates
allow-creative-duplicatesDefault: true
When set to true, items duplicated in Creative mode won't trigger alerts or auto-removal. They're still logged in the database for your records, though.
Why allow Creative dupes? Creative mode players can spawn infinite items anyway, so duplicate detection is kinda pointless there. Plus, some build tools and world-editing workflows involve copying items.
Set to false if you want to track everything, even Creative shenanigans.
Inventory Scanning
inventory-open-scan-enabled
inventory-open-scan-enabledDefault: true
When enabled, scans a player's inventory every time they open a container, chest, or their own inventory.
Performance Note: This adds overhead on busy servers. If you have 200+ active players doing lots of inventory work, consider disabling this and relying on the periodic scanner instead.
When to disable:
Server TPS is struggling
You have a massive playerbase
You don't mind slightly slower dupe detection
Discord Integration
DupeTrace features a fully customizable Discord webhook system with embeds, mentions, and rate limiting.
Basic Setup
discord.enabled
discord.enabledDefault: false
Set to true to send duplicate alerts to a Discord channel via webhook.
discord.webhook-url
discord.webhook-urlDefault: "" (empty)
Your Discord webhook URL. To get one:
Open your Discord server
Go to Server Settings → Integrations → Webhooks
Click New Webhook
Copy the webhook URL and paste it here
Test it: After configuring, run /dupetest discord test in-game to verify your webhook works!
Bot Appearance
discord.username
discord.usernameDefault: "DupeTrace"
The name that appears as the webhook sender in Discord.
discord.avatar-url
discord.avatar-urlDefault: "" (empty = Discord default)
URL to a custom avatar image for the webhook. Leave empty to use Discord's default.
Embed Customization
discord.embed.color
discord.embed.colorDefault: "#FF0000" (red)
Hex color code for the embed sidebar. Supports formats like #FF0000 or FF0000.
discord.embed.title
discord.embed.titleDefault: "🚨 Duplicate Item Detected"
The embed title. Supports placeholders (see below).
discord.embed.description
discord.embed.descriptionDefault: "" (empty)
Optional description text below the title. Supports placeholders.
Field Visibility Options
show-player
true
Show player name field
show-item-type
true
Show item type field
show-item-uuid
true
Show item UUID field
show-full-uuid
false
Show full UUID instead of shortened
show-location
true
Show coordinates field
show-timestamp
true
Show timestamp in embed
Custom Field Names
Customize field labels for localization:
field-name-player
"Player"
field-name-item-type
"Item Type"
field-name-uuid
"Item UUID"
field-name-location
"Location"
Footer & Images
footer-text
Text at bottom of embed (supports {version})
footer-icon-url
Small icon next to footer
thumbnail-url
Small image on right side of embed
image-url
Large image at bottom of embed
Template Placeholders
Use these in title, description, and mentions.content:
{player}
Player name
Steve
{item_type}
Item material
DIAMOND_SWORD
{uuid_short}
First 8 chars of UUID
8f3c5a1d
{uuid_full}
Complete UUID
8f3c5a1d-2b4e-...
{location}
World coordinates
world:123,64,-456
{version}
Plugin version
1.2.0
Example custom title:
Mention/Ping Settings
discord.mentions.enabled
discord.mentions.enabledDefault: false
Enable Discord mentions/pings in duplicate alerts.
discord.mentions.role-id
discord.mentions.role-idDefault: "" (empty)
Discord role ID to ping. To get a role ID:
Enable Developer Mode in Discord (Settings → Advanced)
Right-click the role → Copy ID
discord.mentions.user-ids
discord.mentions.user-idsDefault: "" (empty)
Comma-separated list of Discord user IDs to ping. Example: "123456789012345678,987654321098765432"
discord.mentions.content
discord.mentions.contentDefault: "{role_mention} {user_mentions}"
Message content where mentions appear (outside the embed). Available placeholders:
{role_mention}– The role ping{user_mentions}– User pingsPlus all standard placeholders
Rate Limiting
discord.rate-limit.enabled
discord.rate-limit.enabledDefault: true
Enable rate limiting to prevent Discord API abuse. Highly recommended!
discord.rate-limit.max-per-minute
discord.rate-limit.max-per-minuteDefault: 30
Maximum alerts sent per minute. Discord's limit is 30/minute per webhook, so don't go higher.
discord.rate-limit.queue-max-size
discord.rate-limit.queue-max-sizeDefault: 100
When rate limited, alerts queue up. This sets the max queue size. Oldest alerts are dropped if exceeded.
Complete Discord Example
Example Configurations
🐌 Laggy Server (Gentle Settings)
⚡ High-Performance Server (Aggressive Settings)
🕵️ Paranoid Admin (Catch Everything)
Need Help?
Still confused? Head over to our Discord and ask! We're happy to help you tune your config for your specific server setup.
Next up: Commands →
Last updated