
Anarchy Dupe This just (experimental)
xDupe is a lightweight, open-source Paper plugin that brings back the classic piston-item frame duplication mechanic for anarchy servers. Originally patched by both Mojang and Paper, this mechanic is carefully re-implemented to bypass modern anti-dupe protections while keeping full NBT integrity. Fully configurable via both file and in-game commands.
EventPriority.LOWEST and removes the item frame instantly to prevent anti-cheat plugins from interfering.getNearbyEntities with bounding box filtering instead of scanning the entire world. Minimal overhead. ┌─────────────────────┐
│ Piston Extends │
└──────────┬──────────┘
│
┌──────────v──────────┐
│ Item Frame Found │
│ in front of piston │
└──────────┬──────────┘
│
┌──────────v──────────┐
│ Frame has item? │
└──────┬──────────┬───┘
│ │
yes no
│ │
┌──────────v──┐ │
│ Chance │ │
│ Check │ │
└──────┬──────┘ │
│ │
┌───────┴───────┐ │
│ │ │
success failed │
│ │ │
┌───────v───────┐ │ │
│ Drop original │ │ │
│ + extra copies │ │ │
│ (+ frame if │ │ │
│ enabled) │ │ │
└───────┬───────┘ │ │
│ │ │
┌───────v───────┐ │ │
│ Remove frame │ │ │
│ from world │ │ │
└───────┬───────┘ │ │
│ │ │
└──────┬───────┘ │
│ │
┌──────v──────┐ │
│ Done │ │
└────────────┘ │
┌──────────v──────────┐
│ Natural Break │
│ (vanilla behavior) │
└─────────────────────┘
When a piston extends, the server fires a BlockPistonExtendEvent. xDupe listens at EventPriority.LOWEST — before any anti-cheat or anti-dupe plugin has a chance to cancel the event. At this point:
getNearbyEntities with 0.75 radius).ItemStack.clone(), which copies all NBT data including enchantments, custom names, lore, and attributes.dropItemNaturally.drop-frame is enabled, the item frame itself is also dropped.remove(), preventing any other plugin from interfering or creating additional drops.Download the latest xDupe.jar from the Releases page.
Place the xDupe.jar file into your server's plugins/ directory.
server/
├── plugins/
│ ├── xDupe.jar ← place here
│ ├── ...
│ └── ...
├── world/
├── world_nether/
├── world_the_end/
├── server.properties
├── ...
Restart your server completely, or if you're on Paper 1.20+, use:
/reload confirm
Run this command in-game or from the console:
/xdupe
You should see the xDupe status screen with default configuration values.
| Dependency | Minimum Version |
|---|---|
| Server | Paper 1.20 (or any Paper-compatible fork) |
| Java | Java 17 (JDK 17 or higher) |
On first run, xDupe creates plugins/xDupe/config.yml automatically.
chance: 100
duplicate-amount: 1
drop-frame: true
| Option | Type | Default | Range | Description |
|---|---|---|---|---|
chance |
int |
100 |
0 – 100 | The percentage chance that the duplication will trigger. At 100, it always triggers. At 0, it never triggers. |
duplicate-amount |
int |
1 |
0 – ∞ | How many EXTRA copies are dropped on top of the original item. Total items dropped = 1 (original) + duplicate-amount. |
drop-frame |
boolean |
true |
true / false | Whether the item frame itself drops as an item when the dupe triggers. |
chance: 50
duplicate-amount: 1
drop-frame: true
chance: 100
duplicate-amount: 10
drop-frame: false
chance: 0
duplicate-amount: 0
drop-frame: false
chance: 100
duplicate-amount: 0
drop-frame: true
| Command | Description | Permission |
|---|---|---|
/xdupe |
Display help menu and current configuration | xdupe.admin |
/xdupe help |
Display help menu and current configuration | xdupe.admin |
/xdupe chance [value] |
View or set the duplication chance (0–100) | xdupe.admin |
/xdupe amount [value] |
View or set the number of extra copies (≥0) | xdupe.admin |
/xdupe dropframe [true|false] |
View or set whether the frame drops | xdupe.admin |
/xdupe reload |
Reload configuration from config.yml |
xdupe.admin |
Alias: /dupe
/xdupe
── shows current settings and all available commands
/xdupe chance
── shows current chance value (e.g., "current chance: 100%")
/xdupe chance 50
── sets chance to 50%
/xdupe amount 3
── sets duplicate-amount to 3 (total 4 items per dupe)
/xdupe dropframe false
── disables frame dropping
/xdupe reload
── reloads config.yml from disk
Note: All commands have tab completion. Start typing and press Tab to see suggestions.
| Permission | Default | Description |
|---|---|---|
xdupe.admin |
op |
Allows using all /xdupe commands |
Example for granting to a non-op player:
/manadd PlayerName xdupe.admin
xDupe directorymvn clean package in the terminal| Minecraft Version | Paper Support | Status |
|---|---|---|
| 1.20 | ✅ | Fully tested |
| 1.20.1 | ✅ | Fully tested |
| 1.20.2 | ✅ | Fully tested |
| 1.20.3 | ✅ | Fully tested |
| 1.20.4 | ✅ | Fully tested |
| 1.20.5 | ✅ | Compatible |
| 1.20.6 | ✅ | Compatible |
| 1.21 | ✅ | Compatible |
| 1.21.1 | ✅ | Compatible |
| 1.21.2+ | ✅ | Should work (API stable) |
Any Paper-compatible fork (Purpur, Pufferfish, etc.) should work as well.
chance is set to a value greater than 0.chance: 100 and drop-frame: true for testing./plugins should show xDupe in the list./dupe alias and it doesn't work, try /xdupe directly.xdupe.admin permission.ItemStack.clone() which preserves all NBT data.Q: Is this bannable?
A: On anarchy servers, no. That's what this plugin is made for. On vanilla or survival servers, duplication is typically against the rules.
Q: Does this work with Spigot?
A: It should work on Spigot too, but Paper is recommended. The plugin uses Paper's getNearbyEntities with a predicate filter, which is available on Spigot as well. However, the anti-dupe bypass is specifically designed for Paper's built-in protections.
Q: Can I use this with other dupe plugins?
A: Yes, but be aware they may conflict. If using multiple dupe plugins, test them together first.
Q: Does this dupe shulker boxes with their contents?
A: Yes! Since ItemStack.clone() preserves all NBT data, shulker box contents, written books, enchanted items, and any other NBT data are all fully duplicated.
Q: How do I reset the config to default?
A: Delete plugins/xDupe/config.yml and run /xdupe reload or restart the server. A fresh config will be generated.
Q: Will items despawn?
A: Duplicated items are regular dropped items and follow standard Minecraft despawn timers (5 minutes by default). This is not controlled by xDupe.
EventPriority.LOWEST and removing the item frame entity before any anti-cheat plugin can react. This is a bypass, not a fix — it's designed to circumvent protections.getNearbyEntities with a 0.75-block radius) rather than scanning all loaded entities. This means near-zero performance impact during normal gameplay. The only cost is when a piston actually extends near an item frame.MIT License
Copyright (c) 2026 EMIRLQQ1
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
xDupe — Made with ❤️ by EMIRLQQ1