HeavyDupeFixer
HeavyDupeFixer is a lightweight, no‑frills Spigot/Paper plugin that blocks two well‑known duplication exploits – one related to recipe discovery packets and another involving bed interaction in WorldGuard‑protected regions. It requires ProtocolLib and (optionally) WorldGuard to work.
Features
- Recipe packet blocker – cancels all outgoing AUTO_RECIPE, RECIPES and RECIPE_UPDATE packets. This prevents clients from exploiting auto‑recipe sync to duplicate items.
- Automatic undiscover – when the plugin enables, every online player has all their discovered recipes undiscovered, effectively resetting their recipe book (the server will not send recipe lists afterwards).
- WorldGuard bed protection – prevents players from interacting with beds (any item whose material name contains "BED") in regions where they do not have BUILD permission. This stops a specific dupe that uses beds in protected areas.
- Configurable – both fixes can be enabled/disabled in config.yml.
- Graceful fallback – if WorldGuard is not present, the bed fixer is automatically disabled (with a warning in logs).
Dependencies
⚙️ Configuration
After the first run, a config.yml file will be created inside the plugin folder:
yaml
fixer:
recipes: true
worldguard_bed: true
- recipes – enable/disable the recipe packet blocker + undiscover-all on startup.
- worldguard_bed – enable/disable the bed interaction check (requires WorldGuard).
Installation
- Download HeavyDupeFixer.jar and place it in your server's plugins/ folder.
- Make sure ProtocolLib is installed and up‑to‑date.
- (Optional) Install WorldGuard if you want bed protection.
- Start or reload your server.
- Edit config.yml to your liking and reload with /heavydupefixer reload (if implemented – currently not, but you can restart).
❓ How it works (technical summary)
- RecipesFixer registers three packet adapters that simply cancel the respective packets. On enable, it calls player.undiscoverRecipe() for every discovered recipe of every online player.
- WorldGuardBedFixer listens to PlayerInteractEvent. If the clicked block is a bed and the item in hand is a bed item, it checks the player's build permission at that block's location using WorldGuard's API. If not allowed, the event is cancelled.
Permissions
This plugin does not add any extra permissions. The bed check relies on WorldGuard's built‑in BUILD flag.
Notes
- The recipe packet cancellation is aggressive – it completely hides all recipe-related data from clients. This is intentional to prevent the dupe.
- If you want players to have recipes, you may need to use a custom recipe management system instead; this plugin is designed solely to block the exploit.
- Works on Spigot 1.16+ and Paper 1.16+ (likely older versions too, but tested on 1.16–1.20).
Issue reporting
If you encounter any problems, please open an issue on the plugin's GitHub (or contact the author directly). Include your server version, logs, and steps to reproduce.