mojira.dev
MC-143266

Nested function calls reevaluate maxCommandChainLength before queueing commands

The bug

Functions only consider the value of the gamerule maxCommandChainLength when the function starts, but should ignore any changes to it while the commands are running, see MC-124447.

However, this is not the case when a nested function is executed. In this case the length of the queued commands is compared with the current maxCommandChainLength value.

How to reproduce

  1. Download the attached datapack

[media]
  1. and place it in the datapacks folder of your world

  2. Run the function test:run_nested

    /function test:run_nested

    → ❌ It did not run any of the commands from the test:nested function; you can slightly increase the value set for maxCommandChainLength in test:run_nested and the nested function will be executed

Code analysis

See net.minecraft.advancements.FunctionManager.execute(FunctionObject, CommandSource) (MCP name)

Solution: The maxCommandChainLength value could be stored in a field when the execution of a function starts and then the value of the field can be used for nested functions.

Linked issues

Attachments

Comments 1

A removal of chain length check for new function addition and addition of check to the chain after a regular execution should resolve this.

https://github.com/liachmodded/MC-126946-128565/blob/2cbe0650ebe385027e484e7496fc63ebba690cad/src/main/java/com/github/liachmodded/datapacks/mixin/CommandFunctionManagerMixin.java#L71

marcono1234

boq

Confirmed

Commands

/function, maxCommandChainLength

Minecraft 19w04b, 1.15.2, 20w08a

23w41a

Retrieved