The Contract
Features
- Interactive Contract Board: A physical block with a custom GUI to view, accept, deliver, and claim bounties.
- Procedural Contract Generation: Automatically refreshes contracts at set intervals with customizable task types (Hunting, Crafting, Exploration, Building, Raids, and Distance Travel).
- Optional Bonus Objectives: Side tasks that grant reward multipliers (e.g., $2\times$ currency bonuses) upon completion.
- Server-Wide & Dynamic: Global refresh cycles sync contracts across the entire server, preventing individual exploit farming.
- Extensive Datapack Support: Add static manual contracts or override the generator pools with JSON datapacks.
- Highly Configurable: Modify rewards, blacklists, task frequencies, currency items, and difficulty scaling in the config file.
Configuration Guide (the_contract-common.toml)
The configuration file is located at .minecraft/config/the_contract-common.toml. Below is a breakdown of all available sections and settings:
1. [generator]
Controls the global contract board timer and refresh capacity.
-
refreshIntervalMinutes(Default: 20): Time in minutes before the contract board clears and regenerates new contracts. -
contractsPerRefresh(Default: 15): Total number of procedural contracts generated per cycle. -
notifyOnRefresh(Default: false): Broadcasts a chat message to online players when contracts refresh.
2. [generator_blacklist]
Excludes specific items, mobs, structures, or biomes from procedural generation.
-
Format: Standard Resource Location lists, e.g.,
["minecraft:beacon"]or["minecraft:warden"].
3. [difficultyDistribution]
Sets the probability weights for contract difficulties (Basic, Intermediate, Hard).
-
basic(Default: 50) -
intermediate(Default: 35) -
hard(Default: 15)
4. [taskTypeDistribution]
Adjusts how often specific objective types appear in contracts:
-
kill_entity(Default: 25) -
deliver_item(Default: 20) -
craft_item(Default: 20) -
travel_distance(Default: 15) -
break_block(Default: 12) -
place_block(Default: 12) -
find_biome(Default: 8) -
find_structure(Default: 6) -
defend_objective(Default: 5) -
complete_raid(Default: 3)
5. [player]
-
maxActiveContractsPerPlayer(Default: 3): Maximum number of active contracts a player can hold simultaneously.
6. [rewards]
-
currencyItem(Default:"minecraft:emerald"): The default item ID awarded as money/currency. -
Subcategories (
basic_rewards,intermediate_rewards,advanced_rewards) allow configuring min/max currency payouts and extra item lists (e.g.,["minecraft:bread,8", "minecraft:iron_ingot,4"]).
7. [task_pools]
Define target IDs and target ranges for procedural generation.
-
Items / Mobs Syntax:
"namespace:id|min-max"(e.g.,"minecraft:copper_ingot|16-32"or"minecraft:zombie|5-15"). -
Travel Distance Syntax:
"min-max"in block meters (e.g.,"250-500").
Datapack Creation Guide
You can create custom, static contracts or override contract pools using Datapacks.Tip: You can download a ready-to-use Datapack template directly from our Discord server to get started faster!
File Structure & Paths
Inside your datapack, place JSON files in the following folders:Plaintext
<button class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted" aria-label="Descargar código"></button><button class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted" aria-label="Copiar código"></button>
your_datapack/
├── pack.mcmeta
└── data/
└── your_mod_or_pack_namespace/
├── contracts/
│ └── custom_contract.json
└── generator_pools/
└── custom_pool.json
Creating Custom Static Contracts (data/<namespace>/contracts/*.json)
Place JSON files in data/<namespace>/contracts/. These contracts appear directly on the special/manual board section.
Example: data/mymodpack/contracts/dragon_slayer.json
JSON
<button class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted" aria-label="Descargar código"></button><button class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted" aria-label="Copiar código"></button>
{
"title": "contract.mymodpack.dragon_slayer.title",
"description": "contract.mymodpack.dragon_slayer.desc",
"difficulty": "HARD",
"repeatable": false,
"optional_currency_multiplier": 2.5,
"objectives": [
{
"id": "kill_dragon",
"optional": false,
"task": {
"type": "KILL_ENTITY",
"target": "minecraft:ender_dragon",
"amount": 1
}
},
{
"id": "bonus_travel",
"optional": true,
"task": {
"type": "TRAVEL_DISTANCE",
"amount": 1000
}
}
],
"rewards": [
{
"type": "CURRENCY",
"count": 50
},
{
"type": "ITEM",
"item_id": "minecraft:netherite_ingot",
"count": 2
},
{
"type": "COMMAND",
"command": "xp add @p 1000 levels"
}
]
}
Task Types Reference (type):
-
KILL_ENTITY—target: Entity ID -
DELIVER_ITEM—target: Item ID -
CRAFT_ITEM—target: Item ID -
BREAK_BLOCK—target: Block ID -
PLACE_BLOCK—target: Block ID -
FIND_STRUCTURE—target: Structure ID -
FIND_BIOME—target: Biome ID -
TRAVEL_DISTANCE— Notargetrequired,amount: blocks to walk -
COMPLETE_RAID— Notargetrequired,amount: raids to complete
Overriding Generator Pools (data/<namespace>/generator_pools/*.json)
You can define generator pools to customize what items or entities are selected for generated bounties.
Example: data/mymodpack/generator_pools/custom_hunt.json
JSON
<button class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted" aria-label="Descargar código"></button><button class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted" aria-label="Copiar código"></button>
{
"difficulty": "BASIC",
"entries": [
{
"target": "minecraft:zombie",
"min_amount": 5,
"max_amount": 15,
"weight": 10
},
{
"target": "minecraft:skeleton",
"min_amount": 5,
"max_amount": 15,
"weight": 10
}
]
}
Community & Support
Need help, want to share your custom contract datapacks, or need to download the Datapack Template? Join our community Discord! 👉 Join our Discord Server
Español
Aquí tienes toda la información y la guía traducida al español para tu página de CurseForge:
The Contract
Summary
The Contract añade un sistema dinámico de contratos y misiones para todo el servidor con tableros físicos, tareas procedimentales y objetivos secundarios. Es completamente configurable mediante archivos TOML y Datapacks, permitiendo a administradores y creadores de modpacks diseñar una progresión personalizada.Características
- Tablero de Contratos Interactivo: Un bloque físico con una interfaz personalizada para consultar, aceptar, entregar y reclamar recompensas.
- Generación Procedimental de Contratos: Los contratos se regeneran automáticamente a intervalos configurables con varios tipos de tareas (Caza, Crafteo, Exploración, Construcción, Raids y Distancia Recorrida).
- Objetivos Secundarios Opcionales: Tareas adicionales que otorgan multiplicadores de recompensa (por ejemplo, bono de $2\times$ en la moneda) al completarlas.
- Sistema Global para el Servidor: Los ciclos de refresco sincronizan los contratos para todos los jugadores, evitando que se farmeen de forma individual.
- Soporte Completo para Datapacks: Añade contratos estáticos manuales o reemplaza las listas de generación procedimental con archivos JSON.
- Altamente Configurable: Modifica las recompensas, listas negras, frecuencia de tareas, ítem utilizado como moneda y escalado de dificultad desde el archivo de configuración.
Guía de Configuración (the_contract-common.toml)
El archivo de configuración se encuentra en .minecraft/config/the_contract-common.toml. A continuación se detalla cada sección y sus opciones:
1. [generator]
Controla el temporizador global y la capacidad de generación del tablero.
-
refreshIntervalMinutes(Por defecto: 20): Tiempo en minutos para que el tablero limpie y genere nuevos contratos. -
contractsPerRefresh(Por defecto: 15): Cantidad total de contratos procedimentales generados por ciclo. -
notifyOnRefresh(Por defecto: false): Envía un mensaje al chat de los jugadores conectados cuando se refrescan los contratos.
2. [generator_blacklist]
Excluye ítems, mobs, estructuras o biomas específicos de la generación procedimental.
-
Formato: Listas de Resource Location estándar, ej.
["minecraft:beacon"]o["minecraft:warden"].
3. [difficultyDistribution]
Establece los pesos de probabilidad para las dificultades de los contratos (Básico, Intermedio, Avanzado).
-
basic(Por defecto: 50) -
intermediate(Por defecto: 35) -
hard(Por defecto: 15)
4. [taskTypeDistribution]
Ajusta la frecuencia con la que aparece cada tipo de objetivo en los contratos:
-
kill_entity(Por defecto: 25) -
deliver_item(Por defecto: 20) -
craft_item(Por defecto: 20) -
travel_distance(Por defecto: 15) -
break_block(Por defecto: 12) -
place_block(Por defecto: 12) -
find_biome(Por defecto: 8) -
find_structure(Por defecto: 6) -
defend_objective(Por defecto: 5) -
complete_raid(Por defecto: 3)
5. [player]
-
maxActiveContractsPerPlayer(Por defecto: 3): Número máximo de contratos activos simultáneos que puede tener un jugador.
6. [rewards]
-
currencyItem(Por defecto:"minecraft:emerald"): ID del ítem utilizado como moneda por defecto. -
Las subcategorías (
basic_rewards,intermediate_rewards,advanced_rewards) permiten definir los mínimos/máximos de moneda entregada y listas de ítems extra (ej.["minecraft:bread,8", "minecraft:iron_ingot,4"]).
7. [task_pools]
Define los IDs de destino y rangos para la generación procedimental.
-
Sintaxis para Ítems / Mobs:
"namespace:id|min-max"(ej."minecraft:copper_ingot|16-32"o"minecraft:zombie|5-15"). -
Sintaxis para Recorrer Distancia:
"min-max"en bloques/metros (ej."250-500").
Guía para la Creación de Datapacks
Puedes crear contratos estáticos personalizados o modificar los pools de generación utilizando Datapacks.Consejo: ¡Puedes descargar una plantilla de Datapack lista para usar directamente en nuestro servidor de Discord para empezar más rápido!
Estructura de Archivos y Rutas
Dentro de tu datapack, coloca los archivos JSON en las siguientes carpetas:Plaintext
<button class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted" aria-label="Descargar código"></button><button class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted" aria-label="Copiar código"></button>
tu_datapack/
├── pack.mcmeta
└── data/
└── tu_namespace/
├── contracts/
│ └── contrato_personalizado.json
└── generator_pools/
└── pool_personalizado.json
Crear Contratos Estáticos Personalizados (data/<namespace>/contracts/*.json)
Coloca los archivos JSON en data/<namespace>/contracts/. Estos contratos aparecerán directamente en la sección especial/manual del tablero.
Ejemplo: data/mimodpack/contracts/dragon_slayer.json
JSON
<button class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted" aria-label="Descargar código"></button><button class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted" aria-label="Copiar código"></button>
{
"title": "contract.mimodpack.dragon_slayer.title",
"description": "contract.mimodpack.dragon_slayer.desc",
"difficulty": "HARD",
"repeatable": false,
"optional_currency_multiplier": 2.5,
"objectives": [
{
"id": "kill_dragon",
"optional": false,
"task": {
"type": "KILL_ENTITY",
"target": "minecraft:ender_dragon",
"amount": 1
}
},
{
"id": "bonus_travel",
"optional": true,
"task": {
"type": "TRAVEL_DISTANCE",
"amount": 1000
}
}
],
"rewards": [
{
"type": "CURRENCY",
"count": 50
},
{
"type": "ITEM",
"item_id": "minecraft:netherite_ingot",
"count": 2
},
{
"type": "COMMAND",
"command": "xp add @p 1000 levels"
}
]
}
Referencia de Tipos de Tareas (type):
-
KILL_ENTITY—target: ID de la entidad -
DELIVER_ITEM—target: ID del ítem -
CRAFT_ITEM—target: ID del ítem -
BREAK_BLOCK—target: ID del bloque -
PLACE_BLOCK—target: ID del bloque -
FIND_STRUCTURE—target: ID de la estructura -
FIND_BIOME—target: ID del bioma -
TRAVEL_DISTANCE— No requieretarget,amount: bloques a recorrer -
COMPLETE_RAID— No requieretarget,amount: raids a completar
Modificar Pools de Generación (data/<namespace>/generator_pools/*.json)
Puedes definir pools de generación para personalizar qué ítems o entidades se seleccionan en las misiones procedimentales.
Ejemplo: data/mimodpack/generator_pools/custom_hunt.json
JSON
<button class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted" aria-label="Descargar código"></button><button class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-badge mat-unthemed mat-badge-overlap mat-badge-above mat-badge-after mat-badge-small mat-badge-hidden ng-star-inserted" aria-label="Copiar código"></button>
{
"difficulty": "BASIC",
"entries": [
{
"target": "minecraft:zombie",
"min_amount": 5,
"max_amount": 15,
"weight": 10
},
{
"target": "minecraft:skeleton",
"min_amount": 5,
"max_amount": 15,
"weight": 10
}
]
}