# Want to know what these options do? Read at the end of this file.
logging.active = true
logging.prefix = "&4NC&f: "
logging.filename = "nocheat.log"
logging.filelevel = low
logging.consolelevel = high
logging.chatlevel = med
debug.showactivechecks = false
debug.compatibility = true
inventory.closebeforeteleports = true
moving.check = true
moving.identifycreativemode = true
moving.runfly.check = true
moving.runfly.walkingspeedlimit = 22
moving.runfly.sprintingspeedlimit = 40
moving.runfly.allowhungrysprinting = false
moving.runfly.jumpheight = 135
moving.runfly.checksneaking = true
moving.runfly.sneakingspeedlimit = 14
moving.runfly.checkswimming = true
moving.runfly.swimmingspeedlimit = 18
moving.runfly.actions.0 = moveLogLowShort moveCancel
moving.runfly.actions.100 = moveLogMedShort moveCancel
moving.runfly.actions.400 = moveLogHighShort moveCancel
moving.runfly.checknofall = true
moving.runfly.nofallmultiplier = 200
moving.runfly.nofallactions.0 = nofallLog nofallDamage
moving.runfly.allowlimitedflying = false
moving.runfly.flyingspeedlimitvertical = 100
moving.runfly.flyingspeedlimithorizontal = 60
moving.runfly.flyingactions.0 = moveLogLowShort moveCancel
moving.runfly.flyingactions.100 = moveLogMedShort moveCancel
moving.runfly.flyingactions.400 = moveLogHighShort moveCancel
moving.morepackets.check = true
moving.morepackets.actions.0 = morepacketsLow moveCancel
moving.morepackets.actions.30 = morepacketsMed moveCancel
moving.morepackets.actions.60 = morepacketsHigh moveCancel
blockbreak.check = true
blockbreak.reach.check = true
blockbreak.reach.actions.0 = blockbreakCancel
blockbreak.reach.actions.5 = reachLog blockbreakCancel
blockbreak.direction.check = true
blockbreak.direction.checkinstabreakblocks = true
blockbreak.direction.precision = 50
blockbreak.direction.penaltytime = 300
blockbreak.direction.actions.0 = blockbreakCancel
blockbreak.direction.actions.10 = directionLog blockbreakCancel
blockbreak.noswing.check = true
blockbreak.noswing.actions.0 = noswingLog blockbreakCancel
blockplace.check = true
blockplace.reach.check = true
blockplace.reach.actions.0 = blockplaceCancel
blockplace.reach.actions.5 = reachLog blockplaceCancel
blockplace.direction.check = true
blockplace.direction.penaltytime = 100
blockplace.direction.precision = 75
blockplace.direction.actions.0 = blockplaceCancel
blockplace.direction.actions.10 = directionLog blockplaceCancel
chat.check = true
chat.spam.check = true
chat.spam.whitelist = ""
chat.spam.timeframe = 5
chat.spam.limit = 5
chat.spam.actions.0 = spamLog chatCancel
chat.spam.actions.50 = spamLog chatCancel spamkick
chat.empty.check = true
chat.empty.actions.0 = emptyChatLog chatCancel emptyChatKick
fight.check = true
fight.direction.check = true
fight.direction.precision = 75
fight.direction.penaltytime = 500
fight.direction.actions.0 = fightCancel
fight.direction.actions.5 = fightDirectionLogLow fightCancel
fight.direction.actions.20 = fightDirectionLog fightCancel
fight.direction.actions.50 = fightDirectionLogHigh fightCancel
fight.selfhit.check = true
fight.selfhit.actions.0 = fightSelfhitlog fightCancel
fight.noswing.check = true
fight.noswing.actions.0 = noswingLog fightCancel
# logging.active:
#
# Should NoCheat related messages get logged at all. Some messages may still appear, e.g. error
# messages, even if this option is deactivated
# logging.prefix:
#
# The short text that appears in front of messages by NoCheat. Color codes are &0-&9 and &A-&F
# logging.filename:
#
# Where logs that go to the logfile are stored. You can have different files for different worlds.
# logging.filelevel:
#
# What log-level need messages to have to get stored in the logfile. Values are:
# low: all messages
# med: med and high messages only
# high: high messages only
# off: no messages at all.
# logging.consolelevel:
#
# What log-level need messages to have to get displayed in your server console. Values are:
# low: all messages
# med: med and high messages only
# high: high messages only
# off: no messages at all.
# logging.chatlevel:
#
# What log-level need messages to have to get displayed in the ingame chat. Values are:
# low: all messages
# med: med and high messages only
# high: high messages only
# off: no messages at all.
# debug.showactivechecks:
#
# Print to the console an overview of all checks that are enabled when NoCheat gets loaded.
# debug.compatibility:
#
# Do some voodoo to fix common mistakes of other plugins which interfere with NoCheat.
# inventory.closebeforeteleports:
#
# Close inventory screens of players before they get teleported, preventing creation of real or fake duplicates.
# moving.check:
#
# If true, do various checks on PlayerMove events.
# moving.identifycreativemode:
#
# If true, NoCheat will automatically identify if players are in creative mode and will allow them to fly, avoid fall damage etc.
# moving.runfly.check:
#
# If true, check if a player is walking/sprinting/sneaking/swimming too fast/high.
# moving.runfly.walkingspeedlimit:
#
# Set the speed limit for moving horizontal under 'normal' conditions.
# Unit is 1/100 of a block, default is 22.
# moving.runfly.sprintingspeedlimit:
#
# Set the speed limit for moving horizontal while sprinting.
# Unit is 1/100 of a block, default is 40.
# moving.runfly.allowhungrysprinting:
#
# Should players with a food level of less than 6 be allowed to use the builtin sprint-function?
# moving.runfly.jumpheight:
#
# Set how high a player is allowed to jump.
# Unit is 1/100 of a block, default is 135.
# moving.runfly.checksneaking:
#
# Use a seperate speed limit for sneaking players.
# moving.runfly.sneakingspeedlimit:
#
# Set the speed limit for moving horizontal while sneaking.
# Unit is 1/100 of a block, default is 14
# moving.runfly.checkswimming:
#
# Use a seperate speed limit for swimming players.
# moving.runfly.swimmingspeedlimit:
#
# Set the speed limit for moving horizontal while in water.
# Unit is 1/100 of a block, default is 18
# moving.runfly.actions:
#
# What should be done if a player moves faster than the speed limit(s) or jumps higher than allowed.
# Units are in 1/100 of a block above the limit.
# moving.runfly.checknofall:
#
# If true, check if a player is avoiding fall damage by using a nofall hack. EXPERIMENTAL! Feedback is appreciated.
# moving.runfly.nofallmultiplier:
#
# How many percent falldamage should be dealt to the player.
# NoCheat will almost always underestimate fall damage, using a value bigger than 100 is advised.
# Unit is percent of the estimated original fall damage, default is 200.
# moving.runfly.nofallactions:
#
# What should be done if a player is detected as avoiding fall damage.
# Unit is number of blocks the player fell down.
# moving.runfly.allowlimitedflying:
#
# If true, instead of doing the above checks for walking/sprinting/swimming/sneaking,
# allow flying and only limit the flying speed.
# moving.runfly.flyingspeedlimitvertical:
#
# Set the speed limit for moving vertical while flying.
# Unit is 1/100 of a block, default is 100.
# moving.runfly.flyingspeedlimithorizontal:
#
# Set the speed limit for moving horizontal while flying.
# Unit is 1/100 of a block, default is 60.
# moving.runfly.flyingactions:
#
# What should be done if a player flies faster than the speed limit(s).
# Units are in 1/100 of a block above the speedlimit.
# moving.morepackets.check:
#
# If true, check if a player is sending too many 'move-packets' per second. In a normal game, the player won't send more than 22 packets per second.
# moving.morepackets.actions:
#
# What should be done if a player sends more 'move-packets' than normal.
# Units are packets per second above the limit.
# blockbreak.check:
#
# If true, do various checks on BlockBreak events.
# blockbreak.reach.check:
#
# If true, check if a player is breaking blocks that are too far away.
# blockbreak.reach.actions:
#
# What should be done if a player is breaking blocks that are too far away.
# Unit is number of break(attempt)s beyond the limit.
# blockbreak.direction.check:
#
# If true, check if a player is looking at the block that he's breaking.
# blockbreak.direction.checkinstabreakblocks:
#
# If true, NoCheat will also check for direction for Instant-Breaking blocks.
# THIS WILL CAUSE FALSE POSITIVES, when a player keeps his mouse button pressed and moves the mouse fast over the screen.
# blockbreak.direction.precision:
#
# Define how precise a player has to hit blocks when mining. Lower values mean more precision, higher values less precision.
# blockbreak.direction.penaltytime:
#
# Define how long after a failed attempt to dig a player will be disallowed to break another block.
# Unit is milliseconds, default is 300.
# blockbreak.direction.actions:
#
# What should be done if a player is breaking blocks that are not in his line of sight.
# Unit is the combined distance in blocks between where the player looked vs. where the block was.
# blockbreak.noswing.check:
#
# If true, check if a player swung his arm before breaking a block, which he should have done.
# blockbreak.noswing.actions:
#
# What should be done if a player didn't swing his arm.
# Unit is number of blockbreaking without armswinging.
# blockplace.check:
#
# If true, do various checks on BlockPlace events.
# blockplace.reach.check:
#
# If true, check if a player is placing blocks at locations too far away.
# blockplace.reach.actions:
#
# What should be done if a player is placing blocks that are too far away.
# Unit is number of place(attempt)s beyond the limit.
# blockplace.direction.check:
#
# If true, check if a player is looking at the block that he's placing.
# blockplace.direction.penaltytime:
#
# Define how long after a failed attempt to place blocks a player will be disallowed to place another block.
# Unit is milliseconds, default is 100.
# blockplace.direction.precision:
#
# Define how precise a player has to be when placing blocks. Lower values mean more precision, higher values less precision. Default 75.
# blockplace.direction.actions:
#
# What should be done if a player is placing blocks that are not in his line of sight.
# Unit is the combined distance in blocks between where the player looked vs. where the block was.
# chat.check:
#
# If true, do various checks on PlayerChat events.
# chat.spam.check:
#
# If true, check if a player is spamming the chat.
# chat.spam.whitelist:
#
# A list of messages that should be ignored by the spam check, seperated by ','. All messages/commands starting with one of these will be let through.
# chat.spam.timeframe:
#
# Over what timeframe (in seconds) should the messages be counted?
# When the time is over, counting starts at 0 again.
# chat.spam.limit:
#
# How many messages per timeframe may the player send without it counting as spamming?
# chat.spam.actions:
#
# What should be done if a player is trying to spam the chat.
# Unit is number of chat messages above the limit you declared above.
# chat.empty.check:
#
# If true, check if a player is sending an empty message.
# chat.empty.actions:
#
# What should be done if a player sends an empty message.
# Unit is number of empty chat messages sent by the player.
# fight.check:
#
# If true, do various checks on Events related to fighting.
# fight.direction.check:
#
# If true, check if a player is really looking at enemies that he attacks.
# fight.direction.precision:
#
# Set how precise the check should be. If you experience the check to be too zealous, increase this value.
# If you want to make it tighter, reduce this value. Default is 100.
# fight.direction.penaltytime:
#
# If a player fails the check, he will be unable to attack for this amount of time (in milliseconds), default is 500.
# fight.direction.actions:
#
# What should be done if a player attacks entities that are not in his field of view.
# Unit is sqare root of the distance in blocks between where the enemy was and where the player looked.
# fight.selfhit.check:
#
# If true, check if a player is attacking itself, which should normally be impossible.
# fight.selfhit.actions:
#
# What should be done if a player attacks himself.
# Unit is number of attacks on himself.
# fight.noswing.check:
#
# If true, check if a player swung his arm before attacking, which he should have done.
# fight.noswing.actions:
#
# What should be done if a player didn't swing his arm.
# Unit is number of attacks without armswinging.