All Mods Resource Packs Data Packs Shaders Modpacks Plugins
PackTest

PackTest

by Misode • Downloads: 0 • Followers: 0
Description
Gallery
Changelog
Versions

PackTest

PackTest allows you to write game tests in a data pack. Tests are *.mcfunction files in a test folder. They can be used to test custom data packs.

Example

data/example/test/foo.mcfunction

#> Summons an armor stand and finds it
# @template example:small_platform
# @optional

summon armor_stand ~1.5 ~1 ~1.5
execute positioned ~1.5 ~1 ~1.5 run assert entity @e[type=armor_stand,dx=0]

assert predicate example:test

setblock ~1 ~1 ~1 grass_block
execute if block ~1 ~1 ~1 stone run succeed

fail "Oh no"

Async tests

Test functions can be asynchronous, using the await keyword!

setblock ~ ~ ~ stone
summon item ~ ~6 ~

await entity @e[type=item,distance=..2]

await delay 1s

data merge entity @e[type=item,distance=..2,limit=1] {Motion: [0.0, 0.01, 0.0]}

Running tests

Tests can be run in-game using the test command.

  • test runall: runs all the tests
  • test runall <namespace>: runs all tests from a specified namespace
  • test run <test>: runs the test with a specified name
  • test runfailed: runs all the previously failed tests
  • test runthis: runs the closes test
  • test runthese: runs all tests within 200 blocks

Auto test server

Tests can also be run automatically, for instance in a CI environment. When -Dpacktest.auto is set, the game test server will start automatically with the loaded tests. The process will exit when all tests have finished with the exist code set to the number of failed tests.

Setting -Dpacktest.auto.annotations will emit GitHub annotations for all test failures and resource load errors.

The following example can be adapted into a GitHub action workflow.

on: [push, pull_request]

env:
  # Make sure to update these links!
  TEST_FABRIC_SERVER: https://meta.fabricmc.net/v2/versions/loader/1.20.4/0.15.3/0.11.2/server/jar
  TEST_FABRIC_API: https://cdn.modrinth.com/data/P7dR8mSH/versions/JMCwDuki/fabric-api-0.92.0%2B1.20.4.jar
  TEST_PACKTEST: https://cdn.modrinth.com/data/XsKUhp45/versions/18smpIeE/packtest-1.6-mc1.20.4.jar

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-java@v4
        with:
          distribution: 'temurin'
          java-version: '17'
      - name: Download and prepare files
        run: |
          curl -o server.jar $TEST_FABRIC_SERVER
          mkdir mods
          curl -o mods/fabric-api.jar $TEST_FABRIC_API
          curl -o mods/packtest.jar $TEST_PACKTEST
          mkdir -p world/datapacks
          cp -r datapack world/datapacks/datapack
      - name: Run tests
        run: |
          java -Xmx2G -Dpacktest.auto -Dpacktest.auto.annotations -jar server.jar nogui

Commands

fail

  • fail <text component>: fails the current test and returns from the function

succeed

  • succeed: always succeeds the current test and returns from the function

assert

  • assert <condition>: if condition is unsuccessful, fails the current test and returns from the function
  • assert not <condition>: if condition is successful, fails the current test and returns from the function

await

  • await <condition>: similar to assert, but keeps trying the condition every tick until the test times our or the condition succeeds
  • await not <condition>: keeps trying the condition until it fails
  • await delay <time>: waits for a specified time with unit

Conditions

  • block <pos> <block>: checks if the block at the specified position matches the block predicate
  • data ...: checks NBT data using the same syntax as execute if score
  • entity <selector>: checks if the selector matches any entity (can also find entities outside the structure bounds)
  • predicate <predicate>: checks a predicate in a data pack
  • score ...: checks scores using the same syntax as execute if score
  • chat <pattern> [<receivers>]: checks whether a chat message was sent in the past tick matching a regex pattern

Dummies

Fake players can be spawned using the /dummy command. Dummies won't save or load their data from disk, they will also not load their skin.

  • dummy <name> spawn: spawns a new dummy
  • dummy <name> respawn: respawns the dummy after it has been killed
  • dummy <name> leave: makes the dummy leave the server
  • dummy <name> jump: makes the dummy jump, if currently on ground
  • dummy <name> sneak [true|false]: makes the dummy hold shift or un-shift (not the same as currently crouching)
  • dummy <name> sprint [true|false]: makes the dummy sprint or un-sprint
  • dummy <name> drop [all]: makes the dummy drop the current mainhand, either one item or the entire stack
  • dummy <name> swap: makes the dummy swap its mainhand and offhand
  • dummy <name> selectslot: makes the dummy select a different hotbar slot
  • dummy <name> use item: makes the dummy use its hand item, either mainhand or offhand
  • dummy <name> use block <pos> [<direction>]: makes the dummy use its hand item on a block position
  • dummy <name> use entity <entity>: makes the dummy use its hand item on an entity
  • dummy <name> attack <entity>: makes the dummy attack an entity with its mainhand
  • dummy <name> mine <pos>: makes the dummy mine a block

Directives

Tests can be customized by placing certain directives as special comments at the start of the test function.

  • @template: the resource location of a structure template to use for the test, defaults to an empty 1x1x1 structure
  • @timeout: an integer specifying the timeout, defaults to 100
  • @optional: whether this test is allowed to fail, defaults to false, if there is no value after the directive it is considered as true
  • @dummy: whether to spawn a dummy at the start of the test and set @s to this dummy, taking a position which defaults to ~0.5 ~ ~0.5
  • @batch: the batch name for this test, defaults to packtestBatch
  • @beforebatch: a command to run before this batch, there can only be one per batch
  • @afterbatch: a command to run after this batch, there can only be one per batch

All Versions

+ Add Version
Name Game version Platforms Published Downloads Actions
26.3
Fabric
11d ago 1
26.3
Fabric
1mo ago 1
26.3-rc-1
Fabric
2mo ago 1
26.2
Fabric
2mo ago 1
26.2
Fabric
2mo ago 1
26.2-rc-2
Fabric
5mo ago 1
26.1.x
Fabric
7mo ago 1
26.1-snapshot-6
Fabric
9mo ago 1
1.21.11
Fabric
9mo ago 1
1.21.x
Fabric
11mo ago 1
1.21.11-rc2
Fabric
11mo ago 1
1.21.x
Fabric
11mo ago 1
1.21.x
Fabric
11mo ago 1
1.21.x
Fabric
last yr. 1
1.21.6-pre4
Fabric
last yr. 1
1.21.5
Fabric
last yr. 1
1.21.5
Fabric
last yr. 1
1.21.5
Fabric
last yr. 1
1.21.x
Fabric
last yr. 1
1.21.4
Fabric
last yr. 1
1.21.4-pre1
Fabric
last yr. 1
1.21.x
Fabric
last yr. 1
1.21.2-pre1
Fabric
last yr. 1
1.21.1
Fabric
last yr. 1
1.21
Fabric
last yr. 1
1.21
Fabric
last yr. 1
1.20.x
Fabric
last yr. 1
1.20.5-pre1
Fabric
last yr. 1
24w12a
Fabric
last yr. 1
24w12a
Fabric
last yr. 1
24w09a
Fabric
last yr. 1
1.20.4
Fabric
last yr. 1
1.20.4
Fabric
last yr. 1
1.20.4
Fabric
last yr. 1
1.20.4
Fabric
last yr. 1
1.20.4
Fabric
last yr. 1
1.20.4
Fabric
last yr. 1
1.20.4
Fabric
last yr. 1
1.20.4
Fabric
last yr. 1
1.20.4
Fabric
last yr. 1
1.20.4
Fabric
last yr. 1
1.20.4
Fabric
last yr. 1
1.20.4
Fabric
last yr. 1
1.20.4
Fabric
last yr. 1
1.20.4
Fabric
last yr. 1
1.20.4
Fabric
last yr. 1
[2.8.0] 2.8.0 by Misode on Oct 17, 2026
Download
  • /reload now works correctly with test functions
  • Added /log command that logs a message to the console but not to chat
  • Added new directive @dimension specifying where the test should run
  • Errors in pack.mcmeta files are now logged and fail the test server
  • Updated to 26.3-rc-1
[2.6.2] PackTest 2.6.2 by Misode on Sep 10, 2026
Download
  • Updated to 26.2
  • Updated to 26.1-snapshot-6
  • Fixes a crash from /assert items entity ... with invalid slots
  • Updated to 1.21.11-rc2
  • The /dummy command now requires permission level 2
  • Updated to 1.21.10
[2.2.0] PackTest v2.2 by Misode on Jul 01, 2025
Download
  • Updated to 1.21.6 and 1.21.7
  • Updated to 1.21.6
[2.1.1] PackTest v2.1.1 by Misode on Jun 12, 2025
Download
[2.1.0] PackTest v2.1 by Misode on Apr 15, 2025
Download
[2.0.0] PackTest v2.0 by Misode on Apr 12, 2025
Download
  • Updated to 1.21.5
  • BREAKING: Removed @batch, @beforebatch, and @afterbatch directives
  • Added @environment directive to specify a test_environment
  • Updated to 1.21.5-rc1
  • BREAKING: Removed @batch, @beforebatch, and @afterbatch directives
  • Added @environment directive to specify a test_environment
  • Known issue: /reload is completely broken
  • Updated to 1.21.4-rc1
[1.9.0] PackTest v1.9 by Misode on Oct 22, 2024
Download
  • Updated to 1.21.2
  • Updated to 1.21.2-pre3
[1.8.0] PackTest v1.8 by Misode on Sep 27, 2024
Download
  • Add -Dpacktest.generate.commands option to generate a commands.json report
  • Fix error reporting when annotations are enabled and the error message contains {}
  • Prevent dummies from getting the "Bring Home the Beacon"
  • Only run tests inside the world border when auto running
  • Fix crash caused by loot load errors
  • Updated to 1.21
  • Renamed tests folder to test
[1.7.0] PackTest v1.7 by Misode on Apr 23, 2024
Download
  • Updated to 1.20.5
  • Added /assert items
  • /assert predicate now also allows inline predicates
  • Test structures are now encased with barrier blocks
  • Added the @skyaccess directives to remove the barriers at the top

  • Update to 1.20.5-pre1
  • Added /assert items
  • Update to 24w12a
  • /assert predicate now also allows inline predicates
  • Updated to 24w09a
  • Test structures are encased with barrier blocks
  • Added @skyaccess directives to remove the barriers at the top
[1.6.0] PackTest v1.6 by Misode on Jan 25, 2024
Download
  • Added line numbers to test failure messages
  • Errors when loading resources now fails the auto test server
  • Added an option to emit GitHub annotations with the auto test server using -Dpacktest.auto.annotations
[1.5.0] PackTest v1.5 by Misode on Jan 08, 2024
Download
  • Added assert entity <selector> inside command, which only matches entities inside the test structure bounds (inflated by 1 block)
  • Dummies are now automatically removed when a test succeeds, like other entities
  • Fixed issue where forceloaded chunks would get removed after running tests
[1.4.0] PackTest v1.4 by Misode on Jan 05, 2024
Download
  • Fixes an issue where modded clients without the mod could not connect to servers with the mod
  • Fixes some placeholder values in the mod metadata
[1.3.0] PackTest v1.3 by Misode on Dec 30, 2023
Download
  • Fixes an issue causing the test server to fail
[1.2.0] PackTest v1.2 by Misode on Dec 28, 2023
Download
  • Added /await command, which works similar to /assert but keeps testing the condition every tick
  • Removed /succeed when, instead use /await
  • Added /await delay command to sleep for a specified time
  • Added /assert chat command to test for tellraw messages matching a regex pattern
  • Fixed issue with dummies loading data from disk from previous sessions
PackTest Icon
Download PackTest
Select game version
Select platform