1.1
Compatibility
Changes
🚀 Player Contracts v1.1 — Security, Usability & Analytics Update
This update completely overhauls the input system to eliminate physical world exploits, enhances GUI interaction safety, introduces smart contract naming, and adds official bStats metrics support.
✨ What's New & Changed
🛡️ Safe Interactive Chat Input System
- Removed Physical Signs: Completely eliminated physical world oak sign placement. Players and griefers can no longer break input signs, harvest free items, or trap floating blocks.
- Interactive Chat Prompts: Item search, reward, amount, and duration inputs are now safely handled directly via chat.
- Clickable Cancel Button: Added a clickable
[❌ Cancel]component with hover tooltips and command fallback (/contract cancelinputor typingcancel/iptal). - Input Timeout: Automatically cancels inactive input prompts after 60 seconds to prevent state leaks.
🏷️ Meaningful Contract Naming & Localization
- Dynamic Contract Titles: Contracts are no longer identified by just a raw number (e.g.
Contract #1). They now display meaningful item names and quantities (e.g.Diamond Contract (#1)/64x Diamond (#1)). - Comprehensive Placeholders: Full support for
{id},{amount}, and{item}across all language files. - Auto-Migration: Automatically migrates legacy
config.ymltemplates without breaking existing server configs. - Robust Regex Extraction: Contract clicks now parse IDs using smart
#(\d+)pattern matching regardless of custom title formats.
📦 GUI & Inventory Security Overhaul
- Duplication & Theft Fix: Added strict
InventoryDragEventprotection to prevent players from dragging or stealing items/buttons out of menus. - Shift-Click Safeguards: Isolated bottom inventory interactions and blocked illegal shift-transfers into plugin GUIs.
- Proper Partial Delivery:
- Left-Click: Deliver all available items in inventory.
- Right-Click: Deliver 1 stack (64 items) partially.
- Shift + Right-Click: Deliver 1 single item partially.
- Claim Menu Auto-Refresh: Claim GUI now properly updates and reopens when partial claims occur due to full player inventory.
- Back Navigation: Added a
← Backbutton to the item search results browser.
📊 bStats Metrics Integration
- Integrated official bStats support.
- Added custom charts for:
- Default Language Distribution (
default_language) - Total Contracts Count (
total_contracts)
- Default Language Distribution (
🔧 Configuration Changes
- Updated
contract_name,created, andacceptedstring keys inenandtrsections with{item}and{amount}placeholders.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:O8CJkobo:zpArvakK"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:O8CJkobo:zpArvakK"
}

