#Dynamic Tick Control Configuration
[dynamic]
	#Enable dynamic tick divisor based on server TPS formula
	enabled = false
	#Formula to calculate tick divisor based on TPS.
	#Available variables:
	#  tps - Current server TPS (0-20)
	#  targetTps - Target TPS (default 20)
	#Examples:
	#  '3 * (21 - tps)' - Divisor increases as TPS drops below 20
	#  '(20 - tps) * 2' - Gentler scaling
	#  'tps < 15 ? 10 : 1' - Binary: divisor 10 if TPS < 15, else 1
	#  'max(1, (20 - tps) * 5)' - Aggressive scaling with minimum of 1
	formula = "3 * (21 - tps)"
	#How often to check TPS and update divisor (in ticks, 20 = 1 second)
	# Default: 20
	# Range: 1 ~ 200
	updateInterval = 20
	#Minimum tick divisor (even if formula returns lower)
	# Default: 1
	# Range: 1 ~ 200
	minDivisor = 1
	#Maximum tick divisor (even if formula returns higher)
	# Default: 50
	# Range: 1 ~ 200
	maxDivisor = 50
	#Target TPS for formula calculations
	# Default: 20.0
	# Range: 1.0 ~ 40.0
	targetTps = 20.0

#Emergency MSPT Protection
#Acts as a safety net when MSPT gets too high.
#Gradually increases divisor when struggling, decreases when recovering.
#Final divisor = max(dynamicDivisor, emergencyDivisor)
[emergency]
	#Enable emergency MSPT protection
	enabled = true
	#MSPT threshold to trigger emergency mode (milliseconds per tick)
	#50ms = 20 TPS, 55ms ~ 18 TPS, 100ms = 10 TPS
	# Default: 55.0
	# Range: 20.0 ~ 500.0
	msptThreshold = 55.0
	#MSPT threshold to start recovery (decrease divisor)
	#Should be lower than msptThreshold to avoid oscillation
	# Default: 45.0
	# Range: 10.0 ~ 500.0
	recoveryMspt = 45.0
	#How much to increase divisor each step when MSPT is too high
	# Default: 2
	# Range: 1 ~ 50
	increment = 2
	#How much to decrease divisor each step during recovery
	# Default: 1
	# Range: 1 ~ 50
	decrement = 1
	#How often to check MSPT and adjust (in ticks)
	# Default: 10
	# Range: 1 ~ 100
	updateInterval = 10
	#Maximum divisor the emergency system can reach
	# Default: 100
	# Range: 1 ~ 200
	maxDivisor = 100

#Blacklist Configuration
#Block entities in this list will NEVER be throttled by the global divisor.
#They can still have type-specific divisors set manually.
#Use the simple class name (e.g., 'MillstoneBlockEntity')
[blacklist]
	#List of block entity types to exclude from global tick throttling.
	#These will always tick at full speed unless a type-specific divisor is set.
	types = ["PackagerBlockEntity", "StationBlockEntity", "SignalBlockEntity", "TrackBlockEntity", "SequencedGearshiftBlockEntity"]
