ItemCheck - Anti-Dupe Protection
Supports 1.20.x - 1.21.x
How It Works
Supports 1.20.x - 1.21.x
Every valuable item gets a unique fingerprint based on its NBT data. When players move items around, the plugin tracks these fingerprints and catches duplicates before they spread.
Key Features
- Unique item fingerprinting with NBT tracking
- Real-time duplicate detection
- Packet manipulation protection
- Shulker box exploit prevention
- Book/chunk dupe detection
- Inventory rollback protection
- Custom item support for plugin items
- Discord webhook alerts
- Admin GUI dashboard
- Transaction history logging
Commands
- /antidupe - Opens admin dashboard
- /antidupe register - Register custom items
- /antidupe unregister <id> - Remove registered item
- /antidupe list - Show all tracked items
- /antidupe scan <player> - Scan player inventory
- /antidupe reload - Reload configuration
- /antidupe stats - View detection statistics
- /antidupe clear - Clear detection data
- /antidupe track <item> - Add item to tracking
- /antidupe debug - Toggle debug mode
Permissions
- antidupe.admin - Full access
- antidupe.register - Register items
- antidupe.unregister - Remove items
- antidupe.list - View item list
- antidupe.scan - Scan players
- antidupe.reload - Reload config
- antidupe.stats - View statistics
- antidupe.clear - Clear data
- antidupe.track - Track items
- antidupe.debug - Debug mode
- antidupe.notify - Get alerts
- antidupe.bypass - Bypass detection
Configuration
Spoiler: Config.yml
Code (YAML):
# AntiDupe Configuration
# General Settings
debug-mode : false
auto-scan-on-join : true
save-interval : 300 # Save data every 5 minutes (in seconds)
# Language Settings
# Available languages: en_US, es_ES, zh_CN, ja_JP, ru_RU
language : "en_US"
# Discord Notifications
notifications:
discord:
enabled : false
# Get your webhook URL from Discord Server Settings > Integrations > Webhooks
# Example: https://discord.com/api/webhooks/1234567890/abcdefghijklmnopqrstuvwxyz
webhook-url : ""
# What events to send to Discord
send-detections : true # Send suspicious item detection alerts
send-registrations : true # Send item registration notifications
send-duplications : true # Send item duplication alerts
quarantine-notifications : true # Send notifications when items are quarantined
# Minimum confidence score for detection alerts (0.0 to 1.0)
# 0.3 = Low severity (30%)
# 0.5 = Medium severity (50%)
# 0.7 = High severity (70%)
# 0.9 = Critical severity (90%)
minimum-severity : 0.5
# Cooldown between webhook messages (in seconds) to prevent spam
cooldown : 5
# Mention roles for critical alerts (use role IDs)
# Example: ["&1234567890", "&0987654321"]
mention-roles : [ ]
# Only send alerts for these item types (leave empty for all)
# Example: [DIAMOND, NETHERITE_INGOT, ELYTRA]
tracked-items : [ ]
# Detection Settings
detection:
enabled : true
notify-admins : true
log-to-console : true
prevent-actions:
prevent-pickup : false
prevent-move : false
prevent-craft : false
prevent-trade : false
# Packet Detection Settings
packet-detection:
enabled : true
# Base thresholds (will be adjusted based on conditions)
max-packets-per-second : 300
max-click-speed : 40
max-creative-packets : 50
packet-delay-threshold : 25
# Sensitivity (0.5 = less sensitive, 1.0 = normal, 2.0 = more sensitive)
sensitivity : 1.0
# Advanced detection features
use-pattern-analysis : true
tps-compensation : true
# Warning system (warnings before flagging)
warning-threshold : 3
# Confidence threshold for flagging (0.0 to 1.0)
# 0.5 = flag at 50% confidence
# 0.7 = flag at 70% confidence (recommended)
# 0.9 = flag at 90% confidence (less false positives)
base-confidence-threshold : 0.7
# Legitimate action recognition
recognize-shift-click : true
recognize-double-click : true
recognize-drag-split : true
recognize-number-keys : true
# Action-specific delays (milliseconds)
shift-click-delay : 100
double-click-delay : 200
number-key-delay : 150
# Pattern detection
pattern-detection:
enabled : true
min-pattern-length : 3
human-variance-threshold : 0.15
macro-detection-threshold : 0.7
# Grace periods
new-player-grace-minutes : 5
post-lag-grace-seconds : 10
# Item Tracking Settings
tracking:
time-window-hours : 24 # How long to track items
expected-insertions : 100000 # Expected number of unique items for bloom filter
only-track-valuable : true # Only track items in the valuable list
# Valuable Items List
# These items will always be tracked regardless of the only-track-valuable setting
valuable-items :
- DIAMOND
- DIAMOND_BLOCK
- DIAMOND_ORE
- DEEPSLATE_DIAMOND_ORE
- NETHERITE_INGOT
- NETHERITE_BLOCK
- NETHERITE_SCRAP
- ANCIENT_DEBRIS
- EMERALD
- EMERALD_BLOCK
- EMERALD_ORE
- DEEPSLATE_EMERALD_ORE
- GOLD_INGOT
- GOLD_BLOCK
- GOLD_ORE
- DEEPSLATE_GOLD_ORE
- NETHER_GOLD_ORE
- GOLD_NUGGET
- RAW_GOLD
- RAW_GOLD_BLOCK
- IRON_INGOT
- IRON_BLOCK
- IRON_ORE
- DEEPSLATE_IRON_ORE
- IRON_NUGGET
- RAW_IRON
- RAW_IRON_BLOCK
- COPPER_INGOT
- COPPER_BLOCK
- RAW_COPPER
- RAW_COPPER_BLOCK
- LAPIS_LAZULI
- LAPIS_BLOCK
- LAPIS_ORE
- DEEPSLATE_LAPIS_ORE
- REDSTONE
- REDSTONE_BLOCK
- REDSTONE_ORE
- DEEPSLATE_REDSTONE_ORE
- COAL
- COAL_BLOCK
- COAL_ORE
- DEEPSLATE_COAL_ORE
- QUARTZ
- QUARTZ_BLOCK
- NETHER_QUARTZ_ORE
- AMETHYST_SHARD
- AMETHYST_BLOCK
- BUDDING_AMETHYST
- ELYTRA
- ENCHANTED_GOLDEN_APPLE
- GOLDEN_APPLE
- TOTEM_OF_UNDYING
- BEACON
- DRAGON_EGG
- WITHER_SKELETON_SKULL
- NETHER_STAR
- SHULKER_BOX
- WHITE_SHULKER_BOX
- ORANGE_SHULKER_BOX
- MAGENTA_SHULKER_BOX
- LIGHT_BLUE_SHULKER_BOX
- YELLOW_SHULKER_BOX
- LIME_SHULKER_BOX
- PINK_SHULKER_BOX
- GRAY_SHULKER_BOX
- LIGHT_GRAY_SHULKER_BOX
- CYAN_SHULKER_BOX
- PURPLE_SHULKER_BOX
- BLUE_SHULKER_BOX
- BROWN_SHULKER_BOX
- GREEN_SHULKER_BOX
- RED_SHULKER_BOX
- BLACK_SHULKER_BOX
# Block Mining Tracking Settings
block-tracking:
enabled : true
track-all-blocks : false # If true, tracks ALL mined blocks. If false, uses whitelist below
# Blocks to track when mined (only used if track-all-blocks is false)
# These blocks will be tracked with IDs when players mine them
tracked-blocks :
# Ore blocks
- DIAMOND_ORE
- DEEPSLATE_DIAMOND_ORE
- EMERALD_ORE
- DEEPSLATE_EMERALD_ORE
- GOLD_ORE
- DEEPSLATE_GOLD_ORE
- NETHER_GOLD_ORE
- IRON_ORE
- DEEPSLATE_IRON_ORE
- COPPER_ORE
- DEEPSLATE_COPPER_ORE
- COAL_ORE
- DEEPSLATE_COAL_ORE
- REDSTONE_ORE
- DEEPSLATE_REDSTONE_ORE
- LAPIS_ORE
- DEEPSLATE_LAPIS_ORE
- NETHER_QUARTZ_ORE
- ANCIENT_DEBRIS
# Valuable blocks
- DIAMOND_BLOCK
- NETHERITE_BLOCK
- EMERALD_BLOCK
- GOLD_BLOCK
- IRON_BLOCK
- COPPER_BLOCK
- LAPIS_BLOCK
- REDSTONE_BLOCK
- COAL_BLOCK
- RAW_GOLD_BLOCK
- RAW_IRON_BLOCK
- RAW_COPPER_BLOCK
# Special blocks
- BEACON
- DRAGON_EGG
- SPAWNER
- GILDED_BLACKSTONE
- OBSIDIAN
- CRYING_OBSIDIAN
- RESPAWN_ANCHOR
- LODESTONE
- ENCHANTING_TABLE
- ENDER_CHEST
# End blocks
- END_STONE
- PURPUR_BLOCK
- PURPUR_PILLAR
- END_STONE_BRICKS
# Nether blocks
- GLOWSTONE
- SEA_LANTERN
- SHROOMLIGHT
- QUARTZ_BLOCK
- NETHER_WART_BLOCK
- WARPED_WART_BLOCK
# Shulker boxes
- SHULKER_BOX
- WHITE_SHULKER_BOX
- ORANGE_SHULKER_BOX
- MAGENTA_SHULKER_BOX
- LIGHT_BLUE_SHULKER_BOX
- YELLOW_SHULKER_BOX
- LIME_SHULKER_BOX
- PINK_SHULKER_BOX
- GRAY_SHULKER_BOX
- LIGHT_GRAY_SHULKER_BOX
- CYAN_SHULKER_BOX
- PURPLE_SHULKER_BOX
- BLUE_SHULKER_BOX
- BROWN_SHULKER_BOX
- GREEN_SHULKER_BOX
- RED_SHULKER_BOX
- BLACK_SHULKER_BOX
# Velocity Detection Settings
velocity:
enabled : true
time-window-ms : 10000 # Time window for velocity checks (milliseconds)
max-rates : # Max items per second
DIAMOND : 0.5
DIAMOND_BLOCK : 0.05
EMERALD : 0.5
EMERALD_BLOCK : 0.05
NETHERITE_INGOT : 0.1
NETHERITE_BLOCK : 0.01
ANCIENT_DEBRIS : 0.2
RAW_GOLD : 0.8
RAW_IRON : 1.0
RAW_COPPER : 1.5
GOLD_INGOT : 0.5
IRON_INGOT : 0.8
COPPER_INGOT : 1.0
ELYTRA : 0.05
ENCHANTED_GOLDEN_APPLE : 0.2
TOTEM_OF_UNDYING : 0.3
BEACON : 0.1
DRAGON_EGG : 0.01
WITHER_SKELETON_SKULL : 0.2
NETHER_STAR : 0.05
# Cluster Detection Settings
cluster:
enabled : true
time-window-ms : 3000 # Time window for cluster detection
threshold : 5 # Number of identical items to trigger
# Cross Validation Settings
cross-validation:
enabled : true
loss-event-window-ms : 5000 # Time to check for corresponding loss events
# Quarantine System Settings
quarantine :
# Automatically quarantine items with high confidence scores
auto-quarantine-suspicious : false
# Minimum confidence score to auto-quarantine (0.0 to 1.0)
auto-confidence-threshold : 0.8
# Maximum items per player that can be quarantined
max-items-per-player : 54
# Hours before quarantined items are automatically released
auto-release-hours : 72
# Notify player when their items are quarantined
notify-player : true
# Async Batch Scanner Settings
scanner :
# Number of players to scan simultaneously in batch operations
batch-size : 10
# Maximum concurrent scan operations
max-concurrent : 4
# Timeout for individual scans in milliseconds
timeout-ms : 30000
# Automatically scan all players periodically
periodic-scan:
enabled : false
interval-minutes : 60
# Transaction Logging Settings
transactions:
enabled : true
max-history-size : 10000 # Maximum number of transactions to keep
# Plugin Integration
plugin-integration:
auto-discover : true
whitelisted-plugins :
- MMOItems
- ItemsAdder
- Oraxen
- ExecutableItems
- MythicMobs
- CustomItems
# Storage Settings
storage:
type : FILE # Options: FILE, MYSQL
save-registered-items : true
save-transactions : false
# MySQL Settings (if type is MYSQL)
mysql:
host : localhost
port : 3306
database : antidupe
username : root
password : password
use-ssl : false
# Performance Settings
performance:
async-detection : true
cleanup-interval : 600 # Cleanup old data every 10 minutes (seconds)
max-cpu-usage : 50 # Maximum CPU usage percentage
# Messages
messages:
prefix : "&c[AntiDupe] &r"
item-flagged : "&cThis item has been flagged as suspicious!"
crafting-blocked : "&cCrafting blocked due to suspicious activity!"
trading-blocked : "&cTrading blocked due to suspicious activity!"
scan-complete : "&aScan complete! Found %count% suspicious items
# General Settings
debug-mode : false
auto-scan-on-join : true
save-interval : 300 # Save data every 5 minutes (in seconds)
# Language Settings
# Available languages: en_US, es_ES, zh_CN, ja_JP, ru_RU
language : "en_US"
# Discord Notifications
notifications:
discord:
enabled : false
# Get your webhook URL from Discord Server Settings > Integrations > Webhooks
# Example: https://discord.com/api/webhooks/1234567890/abcdefghijklmnopqrstuvwxyz
webhook-url : ""
# What events to send to Discord
send-detections : true # Send suspicious item detection alerts
send-registrations : true # Send item registration notifications
send-duplications : true # Send item duplication alerts
quarantine-notifications : true # Send notifications when items are quarantined
# Minimum confidence score for detection alerts (0.0 to 1.0)
# 0.3 = Low severity (30%)
# 0.5 = Medium severity (50%)
# 0.7 = High severity (70%)
# 0.9 = Critical severity (90%)
minimum-severity : 0.5
# Cooldown between webhook messages (in seconds) to prevent spam
cooldown : 5
# Mention roles for critical alerts (use role IDs)
# Example: ["&1234567890", "&0987654321"]
mention-roles : [ ]
# Only send alerts for these item types (leave empty for all)
# Example: [DIAMOND, NETHERITE_INGOT, ELYTRA]
tracked-items : [ ]
# Detection Settings
detection:
enabled : true
notify-admins : true
log-to-console : true
prevent-actions:
prevent-pickup : false
prevent-move : false
prevent-craft : false
prevent-trade : false
# Packet Detection Settings
packet-detection:
enabled : true
# Base thresholds (will be adjusted based on conditions)
max-packets-per-second : 300
max-click-speed : 40
max-creative-packets : 50
packet-delay-threshold : 25
# Sensitivity (0.5 = less sensitive, 1.0 = normal, 2.0 = more sensitive)
sensitivity : 1.0
# Advanced detection features
use-pattern-analysis : true
tps-compensation : true
# Warning system (warnings before flagging)
warning-threshold : 3
# Confidence threshold for flagging (0.0 to 1.0)
# 0.5 = flag at 50% confidence
# 0.7 = flag at 70% confidence (recommended)
# 0.9 = flag at 90% confidence (less false positives)
base-confidence-threshold : 0.7
# Legitimate action recognition
recognize-shift-click : true
recognize-double-click : true
recognize-drag-split : true
recognize-number-keys : true
# Action-specific delays (milliseconds)
shift-click-delay : 100
double-click-delay : 200
number-key-delay : 150
# Pattern detection
pattern-detection:
enabled : true
min-pattern-length : 3
human-variance-threshold : 0.15
macro-detection-threshold : 0.7
# Grace periods
new-player-grace-minutes : 5
post-lag-grace-seconds : 10
# Item Tracking Settings
tracking:
time-window-hours : 24 # How long to track items
expected-insertions : 100000 # Expected number of unique items for bloom filter
only-track-valuable : true # Only track items in the valuable list
# Valuable Items List
# These items will always be tracked regardless of the only-track-valuable setting
valuable-items :
- DIAMOND
- DIAMOND_BLOCK
- DIAMOND_ORE
- DEEPSLATE_DIAMOND_ORE
- NETHERITE_INGOT
- NETHERITE_BLOCK
- NETHERITE_SCRAP
- ANCIENT_DEBRIS
- EMERALD
- EMERALD_BLOCK
- EMERALD_ORE
- DEEPSLATE_EMERALD_ORE
- GOLD_INGOT
- GOLD_BLOCK
- GOLD_ORE
- DEEPSLATE_GOLD_ORE
- NETHER_GOLD_ORE
- GOLD_NUGGET
- RAW_GOLD
- RAW_GOLD_BLOCK
- IRON_INGOT
- IRON_BLOCK
- IRON_ORE
- DEEPSLATE_IRON_ORE
- IRON_NUGGET
- RAW_IRON
- RAW_IRON_BLOCK
- COPPER_INGOT
- COPPER_BLOCK
- RAW_COPPER
- RAW_COPPER_BLOCK
- LAPIS_LAZULI
- LAPIS_BLOCK
- LAPIS_ORE
- DEEPSLATE_LAPIS_ORE
- REDSTONE
- REDSTONE_BLOCK
- REDSTONE_ORE
- DEEPSLATE_REDSTONE_ORE
- COAL
- COAL_BLOCK
- COAL_ORE
- DEEPSLATE_COAL_ORE
- QUARTZ
- QUARTZ_BLOCK
- NETHER_QUARTZ_ORE
- AMETHYST_SHARD
- AMETHYST_BLOCK
- BUDDING_AMETHYST
- ELYTRA
- ENCHANTED_GOLDEN_APPLE
- GOLDEN_APPLE
- TOTEM_OF_UNDYING
- BEACON
- DRAGON_EGG
- WITHER_SKELETON_SKULL
- NETHER_STAR
- SHULKER_BOX
- WHITE_SHULKER_BOX
- ORANGE_SHULKER_BOX
- MAGENTA_SHULKER_BOX
- LIGHT_BLUE_SHULKER_BOX
- YELLOW_SHULKER_BOX
- LIME_SHULKER_BOX
- PINK_SHULKER_BOX
- GRAY_SHULKER_BOX
- LIGHT_GRAY_SHULKER_BOX
- CYAN_SHULKER_BOX
- PURPLE_SHULKER_BOX
- BLUE_SHULKER_BOX
- BROWN_SHULKER_BOX
- GREEN_SHULKER_BOX
- RED_SHULKER_BOX
- BLACK_SHULKER_BOX
# Block Mining Tracking Settings
block-tracking:
enabled : true
track-all-blocks : false # If true, tracks ALL mined blocks. If false, uses whitelist below
# Blocks to track when mined (only used if track-all-blocks is false)
# These blocks will be tracked with IDs when players mine them
tracked-blocks :
# Ore blocks
- DIAMOND_ORE
- DEEPSLATE_DIAMOND_ORE
- EMERALD_ORE
- DEEPSLATE_EMERALD_ORE
- GOLD_ORE
- DEEPSLATE_GOLD_ORE
- NETHER_GOLD_ORE
- IRON_ORE
- DEEPSLATE_IRON_ORE
- COPPER_ORE
- DEEPSLATE_COPPER_ORE
- COAL_ORE
- DEEPSLATE_COAL_ORE
- REDSTONE_ORE
- DEEPSLATE_REDSTONE_ORE
- LAPIS_ORE
- DEEPSLATE_LAPIS_ORE
- NETHER_QUARTZ_ORE
- ANCIENT_DEBRIS
# Valuable blocks
- DIAMOND_BLOCK
- NETHERITE_BLOCK
- EMERALD_BLOCK
- GOLD_BLOCK
- IRON_BLOCK
- COPPER_BLOCK
- LAPIS_BLOCK
- REDSTONE_BLOCK
- COAL_BLOCK
- RAW_GOLD_BLOCK
- RAW_IRON_BLOCK
- RAW_COPPER_BLOCK
# Special blocks
- BEACON
- DRAGON_EGG
- SPAWNER
- GILDED_BLACKSTONE
- OBSIDIAN
- CRYING_OBSIDIAN
- RESPAWN_ANCHOR
- LODESTONE
- ENCHANTING_TABLE
- ENDER_CHEST
# End blocks
- END_STONE
- PURPUR_BLOCK
- PURPUR_PILLAR
- END_STONE_BRICKS
# Nether blocks
- GLOWSTONE
- SEA_LANTERN
- SHROOMLIGHT
- QUARTZ_BLOCK
- NETHER_WART_BLOCK
- WARPED_WART_BLOCK
# Shulker boxes
- SHULKER_BOX
- WHITE_SHULKER_BOX
- ORANGE_SHULKER_BOX
- MAGENTA_SHULKER_BOX
- LIGHT_BLUE_SHULKER_BOX
- YELLOW_SHULKER_BOX
- LIME_SHULKER_BOX
- PINK_SHULKER_BOX
- GRAY_SHULKER_BOX
- LIGHT_GRAY_SHULKER_BOX
- CYAN_SHULKER_BOX
- PURPLE_SHULKER_BOX
- BLUE_SHULKER_BOX
- BROWN_SHULKER_BOX
- GREEN_SHULKER_BOX
- RED_SHULKER_BOX
- BLACK_SHULKER_BOX
# Velocity Detection Settings
velocity:
enabled : true
time-window-ms : 10000 # Time window for velocity checks (milliseconds)
max-rates : # Max items per second
DIAMOND : 0.5
DIAMOND_BLOCK : 0.05
EMERALD : 0.5
EMERALD_BLOCK : 0.05
NETHERITE_INGOT : 0.1
NETHERITE_BLOCK : 0.01
ANCIENT_DEBRIS : 0.2
RAW_GOLD : 0.8
RAW_IRON : 1.0
RAW_COPPER : 1.5
GOLD_INGOT : 0.5
IRON_INGOT : 0.8
COPPER_INGOT : 1.0
ELYTRA : 0.05
ENCHANTED_GOLDEN_APPLE : 0.2
TOTEM_OF_UNDYING : 0.3
BEACON : 0.1
DRAGON_EGG : 0.01
WITHER_SKELETON_SKULL : 0.2
NETHER_STAR : 0.05
# Cluster Detection Settings
cluster:
enabled : true
time-window-ms : 3000 # Time window for cluster detection
threshold : 5 # Number of identical items to trigger
# Cross Validation Settings
cross-validation:
enabled : true
loss-event-window-ms : 5000 # Time to check for corresponding loss events
# Quarantine System Settings
quarantine :
# Automatically quarantine items with high confidence scores
auto-quarantine-suspicious : false
# Minimum confidence score to auto-quarantine (0.0 to 1.0)
auto-confidence-threshold : 0.8
# Maximum items per player that can be quarantined
max-items-per-player : 54
# Hours before quarantined items are automatically released
auto-release-hours : 72
# Notify player when their items are quarantined
notify-player : true
# Async Batch Scanner Settings
scanner :
# Number of players to scan simultaneously in batch operations
batch-size : 10
# Maximum concurrent scan operations
max-concurrent : 4
# Timeout for individual scans in milliseconds
timeout-ms : 30000
# Automatically scan all players periodically
periodic-scan:
enabled : false
interval-minutes : 60
# Transaction Logging Settings
transactions:
enabled : true
max-history-size : 10000 # Maximum number of transactions to keep
# Plugin Integration
plugin-integration:
auto-discover : true
whitelisted-plugins :
- MMOItems
- ItemsAdder
- Oraxen
- ExecutableItems
- MythicMobs
- CustomItems
# Storage Settings
storage:
type : FILE # Options: FILE, MYSQL
save-registered-items : true
save-transactions : false
# MySQL Settings (if type is MYSQL)
mysql:
host : localhost
port : 3306
database : antidupe
username : root
password : password
use-ssl : false
# Performance Settings
performance:
async-detection : true
cleanup-interval : 600 # Cleanup old data every 10 minutes (seconds)
max-cpu-usage : 50 # Maximum CPU usage percentage
# Messages
messages:
prefix : "&c[AntiDupe] &r"
item-flagged : "&cThis item has been flagged as suspicious!"
crafting-blocked : "&cCrafting blocked due to suspicious activity!"
trading-blocked : "&cTrading blocked due to suspicious activity!"
scan-complete : "&aScan complete! Found %count% suspicious items
You can add more items in config.yml and adjust detection sensitivity.
Detection Methods
- Velocity Tracking: Catches items appearing too fast
- Cluster Detection: Spots identical items in groups
- Cross Validation: Verifies item movements match expected behavior
- Packet Analysis: Detects client manipulation attempts
- Pattern Recognition: Identifies macro and bot patterns
If you discover issues or bugs please report them via Discussions please!
Quick facts
- Edition: Minecraft Java
- File type: .jar
- Minecraft versions listed: 1.20, 1.20.6, 1.21
- How to install: Install the matching mod loader (Forge, Fabric or NeoForge) for your Minecraft version. → Download the .jar. → Put it in the .minecraft/mods folder and launch that loader profile.
- Where to get it: Opens on Spigot — not every file is mirrored on our own servers.
Install steps are the general flow for this file type — How to install Minecraft Java mods & modpacks walks through it step by step.
ItemCheck [1.20 - 1.21] is a free Minecraft Java mod. Compatible with Minecraft 1.20, 1.20.6, 1.21. Downloaded 232 times (via Spigot). Download it and open it directly in the game.