HireHall

Jobs and job types

The seven job goals, how a job moves from open to completed, and how to write job-types.yml.

A job is a contract between two players: the employer who posts and pays, and the worker who does the work. What kinds of job employers can post is up to you, through job-types.yml.

Two kinds of job

On the left a delivery job with goal GATHER, handed in through the deliver menu and completed by the last delivery. On the right six task goals MINE, KILL, FARM, FISH, CRAFT and SMELT with how each counts, and a note that task jobs wait for Hand In
GoalKindWhat counts
GATHERDeliveryItems the worker hands in through the deliver menu
MINETaskBreaking the block. Blocks placed by players never count
KILLTaskKilling the mob
FARMTaskBreaking the crop when it is fully grown
FISHTaskCatching the item with a fishing rod
CRAFTTaskCrafting the item
SMELTTaskTaking the smelted item out of a furnace
  • Delivery jobs finish by themselves when the last item is delivered.
  • Task jobs wait as Ready to hand in once the goal is reached, and the worker presses Hand In to finish and get paid.

A task type can also be switched to delivery, so the worker has to hand in the items (for example raw iron for an iron ore mining job) before anyone is paid. See Activity or delivery.

See Taking and working jobs for the worker's side.

The job lifecycle

A flow of job states from Post Job to Open or Offered, then In progress, Ready to hand in and Completed, with abandon, decline, expired and cancelled paths
StatusMeaning
OpenOn the job board, anyone can take it
OfferedSent to one player, see Direct offers
In progressA worker holds it
Ready to hand inA task job reached its goal. It no longer expires
CompletedThe worker was paid
ExpiredThe deadline passed first, the employer gets the pay back
CancelledCancelled by the employer, by a declined offer or by an admin, the employer gets the pay back

The deadline starts when the job is posted, not when it is taken. A job that is still open when the deadline passes expires as well.

Writing job-types.yml

Each entry under types is one job type employers can pick. The file ships with nine examples: Gather Ores, Gather Wood, Gather Food, Mine Blocks, Hunt Mobs, Harvest Crops, Go Fishing, Craft Items and Smelt Items. It is made in English, French or Spanish the first time the plugin starts, following menu-language in config.yml (see Messages and language).

types:
  mine-blocks:
    enabled: true
    goal: MINE
    mode: ACTIVITY
    icon: IRON_PICKAXE
    name: "<#e8a021>Mine Blocks"
    lore:
      - "<white>Break natural blocks, placed blocks do not count."
    min-quantity: 1
    max-quantity: 0
    targets:
      stone:
        match: STONE
        name: "<white>Stone"
        deliver: COBBLESTONE
      iron-ore:
        match: IRON_ORE
        name: "<white>Iron Ore"
        deliver: RAW_IRON

Job type keys

KeyWhat it doesDefault
enabledTurn the job type on or off. A type that is off cannot be posted, but jobs of that type already posted keep workingtrue
goalGATHER, MINE, KILL, FARM, FISH, CRAFT or SMELT. A type with any other value is skippednone
modeACTIVITY or DELIVERY, see Activity or delivery. GATHER types always use DELIVERYACTIVITY
iconIcon on the job type menuPAPER
nameName in menus and messages, MiniMessage colours allowedthe type id
loreLines under the name on the job type menunone
min-quantitySmallest amount an employer may ask for1
max-quantityLargest amount an employer may ask for. 0 uses limits.max-quantity from config.yml0
allow-namedAccept renamed items. Only used by GATHER typesfalse
allow-enchantedAccept enchanted items and enchanted books. Only used by GATHER typesfalse
targetsThe things the employer chooses between, at least onenone

Target keys

KeyWhat it doesDefault
matchWhat counts, see below. Requirednone
nameName in menus and messagesthe target id
iconIcon on the goal menuthe matched item, a spawn egg for mobs, or a chest for ANY
model-dataCustom model data a delivered item must have, 0 means any. Only used by GATHER types0
deliverThe item handed in when the type uses DELIVERY mode. Not used by GATHER types, which always hand in the matched itemempty, which uses the match when it is an item

What match can be

On the left four kinds of match value, a material name, an entity type, ANY, and an ItemsAdder or Nexo item. On the right the five checks a delivered item goes through
ValueAllowed for
A material, like IRON_OREMINE and FARM need a block, GATHER, FISH, CRAFT and SMELT need an item
An entity type, like ZOMBIEKILL only
ANYEvery goal except GATHER
ia:namespace:id, itemsadder:namespace:id or nexo:idGATHER only. See ItemsAdder and Nexo

A type or target that does not fit these rules is skipped with a warning in the console that names the file, the type and the target. For crops, use the block name: CARROTS, POTATOES and BEETROOTS, not the item.

Amount limits

Every bundled job type has min-quantity: 1 and max-quantity: 0. A max-quantity of 0 means the type uses the server wide limit, limits.max-quantity in config.yml (1000000 by default). Setting limits.max-quantity: 0 removes your own limit, but amounts are still capped at 1,000,000,000 so nothing can overflow. A type's own max-quantity above the server wide limit is lowered to it.

Servers that already had a job-types.yml before this change keep their old min-quantity and max-quantity values. Change them by hand if you want the new defaults.

Activity or delivery

Each job type has a mode:

modeHow the job works
ACTIVITYHireHall counts the action (breaking the block, killing the mob and so on) and the worker presses Hand In once the goal is reached. The employer gets nothing but the work done
DELIVERYThe worker brings the items and hands them in through the deliver menu. The items go to the employer's claims and the pay is only released once they are in. The action itself is no longer tracked

GATHER types are always DELIVERY. For any other goal, the item that is handed in comes from the target's deliver key. The bundled file sets it for the targets where it makes sense:

Job typeTargetdeliver
Mine BlocksStoneCOBBLESTONE
Mine BlocksDeepslateCOBBLED_DEEPSLATE
Mine BlocksIron OreRAW_IRON
Mine BlocksCoal OreCOAL
Mine BlocksDiamond OreDIAMOND
Hunt MobsZombieROTTEN_FLESH
Hunt MobsSkeletonBONE
Hunt MobsCreeperGUNPOWDER
Hunt MobsSpiderSTRING
Hunt MobsEndermanENDER_PEARL
Harvest CropsCarrotsCARROT
Harvest CropsPotatoesPOTATO
Harvest CropsBeetrootsBEETROOT

When deliver is empty, the match itself is used if it is an item (for example SAND or IRON_INGOT). A target with no item to hand in (a mob or ANY without deliver) is hidden while its type is in DELIVERY mode. If none of a type's targets has an item, the console warns you.

Only job types in DELIVERY mode can be used for community jobs.

Delivery only servers

# config.yml
jobs:
  delivery-only: true

With jobs.delivery-only: true every job type in ACTIVITY mode is hidden from the posting menu, so every job ends with items handed in to the employer. The default is false.

If you remove or rename a job type while jobs of that type are still active, those jobs can no longer make progress or be delivered. Cancel them first with /hirehall admin cancel, or set enabled: false instead, which stops new postings and lets the running jobs finish.

Changes apply after /hirehall admin reload.

On this page