SoaromaSAC | Lightweight Cheat Detection System 1.0.10

Free simple, lightweight anti-cheat for 1.17

  1. Korbsti
    Native Minecraft Version:
    1.17
    Tested Minecraft Versions:
    • 1.17
    Contributors:
    Sality2, PhoenixHaven, Entity303, Elementeral, PrdMasterXx69Xx42069, Vekster
    [​IMG]

    General


    SoaromaSAC is a simple anti-cheat plugin to detect and remove cheaters from your server. SAC has an extensive amount of configurable options that allow you to customize the anti-cheat that suits your server's needs. This plugin is meant to be used in passive servers such as skyblock, survival and so on. This is not a PVP anti-cheat, since this anti-cheat is more focused on movement detection and on being performance efficient and friendly. With a total of ~55 checks, ~46 for movement, ~3 for combat, ~4 for world and ~2 for other. This anti-cheat not only focused on cheat detection but also includes moderation capabilities.

    [​IMG]


    Cheats Detected

    Movement
    • flight A, B, C, D, E
    • bHop A, B
    • slowGlide A B
    • groundSpoof A
    • fastClimb A
    • fluidWalk A, B, C, D, E (Jesus)
    • noFall A
    • speed A, B, C, D, E, F, G, H, I, J, K, L, M, N, O
    • Baritone A, B, C (May take a while to flag, depending on configuration)
    • noSlowDown A, B, C
    • spider A, B
    • step A
    • elytraFlight A (Using an elytra for an extended period of time without using a firework)
    Combat

    • killAura A (Angular Checks)
    • reach A
    • criticals A
    World
    • irrPlacement A (Place blocks mid-air)
    • reach break A
    • reach place A
    • nuker A
    Other
    • irregularEventCount A (Timer, detects >= 1.1x)
    • regen x1 A
    Experimental Checks - disabled upon default configuration
    • Step B
    • IrregularMovement A B
    Note that checks may very well detect other cheats as well due to similar movements, there are more checks than listed above but some are not displayed due to being disabled in configuration or the check is enabled but too insensitive to be displayed on the list.

    [​IMG]

    Permissions

    • sac.bypass {Bypass every check}
    • sac.notify {Violation messages}
    • sac.notifykick {Notify admins when a kick occurs}
    • sac.reload {Reload configuration}
    • sac.alertCommandGet {For the command sacnotify}
    • sac.configset {For sacconfigset}
    • sac.kick
    • sac.ban
    • sac.gui
    • sac.warn
    • sac.mute
    • sac.unban
    • sac.freeze
    • sac.ping
    • sac.user {For sacuser}
    • sac.hashclear
    • sac.report
    • sac.reportRecieve {When a user types a report, players with this permission get the report}
    • sac.reportList
    • sac.display.custompayload {For /sacppicp}
    Commands
    • sacreload
    • sacuser <player> {Displays certain information about the player}
    • sacnotify <disable/enable> {Violation messages}
    • sacgui <player> {Punishment GUI}
    • sacmute <player>
    • sackick <player>
    • sacwarn <player> <reason>
    • sacunban <player>
    • sacping <player>
    • sacconfigset <config> <value>
    • sacfreeze <player>
    • sachashclear
    • sacreport <reason> {All reports are logged inside of a file}
    • sacreports <number> {View X amount of recent reports}
    • sacppicp <player>
    Features
    • Receive a violation every X amount of violations (Auto Disabled)
    • Freeze System
    • Punishment GUI
    • Automatic kicking and banning (Banning Auto Disabled)
    • Report System
    • Hex colour codes
    • Ping command for a target player
    • Enable or disable violation messages with a command
    • Automatic clearing violations (Auto Disabled)
    • Most messages are customizable (Cheat names are not customizable)
    • Kick Logging
    • Violation Logging
    • Report Logging
    • Cancel actions (Auto Enabled, called 'cancelEventIfHacking' in configuration)
    • The severity of check flagged within the violation message (low, medium and high)
    • Each check is configurable and can be easily changed or disabled if needed
    • Discord webhook integration
    [​IMG]

    Extra Information

    Most configurations have a detailed explanation of what it does with a comment above the variable. The check fluidWalk has been known to flag many other cheats it was not designed to detect, for example using Aristois Criticals will flag the check as well as some flight types from Sigma. This anti-cheat runs asynchronously to ensure little performance impact on your server, movement checks analyze the packet PacketPlayInFlying, this anti-cheat does not require any dependencies. If you turn 'cancelEventIfHacking' to false in the configuration and use cheats, cheats will be detected a lot faster. The only downside if you turn this configuration off, it will not cancel movements/actions. SoaromaSAC is a movement-based AC detection system and is not suited for combat, there are some checks for combat, but the majority is for movement and targeted for survival, skyblock and passive servers without a lot of PVP. You can use this on a kitpvp server though it isn't recommended. This anti-cheat is compatible with other anti-cheats, but you have to turn 'cancelEventIfHacking' to false in configuration if you desire to use this with another anti-cheat. AirJump, bHop and some speed types do seem to flag Baritone sometimes.

    Code (Java):
    import me.korbsti.soaromaac.api;

    @EventHandler
    public void onFlag(SoaromaFlagEvent event){
         Player p = event.getFlaggedPlayer();
    }

    @EventHandler
    public void onPunish(PunishmentEvent event){
         String punishType = event.returnType();
    }
     

    Here is a timings report - 60 players were online [1.16.5]
    All checks listed in detected were enabled + configuration options checking for item attributes
    [​IMG]
    It used 0.17% of tick, around 0.002% ~ 0.003% per player, so in short, incredibly lightweight

    Code (YAML):

    # ********************************************** #
    #                                                #
    #    -- SoaromaSAC Configuration File --         #
    #           -- Version 1.0.08 --                 #
    #                                                #
    # ********************************************** #

    # ======================= IMPORTANT =============================
    # Don't change any configurations if you do not know what it does
    # If you have any questions, message developer on discord, usually a problem can be
    # fixed in a matter of seconds
    # main.yml is the anti-cheats configuration file! Not copy.yml!
    # Restarting or reloading the anti cheat may be prefferable to /sacconfigset
    # [sacconfigset command delete most comments of the main.yml file and should only be used in emergencies or you know what you are doing]
    # ===============================================================
    # =========================================================================
    # The meaning "How long or the amount" is 2 PacketPlayInFlying as 1 in this configuration
    # Any config that has the name "timer" is 20 = 1 second
    # The numbers in GUI ban is by hours so 1 = 60 minutes
    # The speed variables of this file is the players "to" position and the "from" position, calculating the distance and multiplying it by 10
    # Only the variables with the name "speed" are doubles, rest are integers
    # =========================================================================
    # IT IS EXTREMELY IMPORTANT WHEN EDITING ANY NON-COMBAT VALUES | THE MEANING "untilFlagging" means CONSISTENT FLAGGING, not STUTTERING FLAGS
    # IF IT STUTTERS THEN IT WILL RESET THE FLAG COUNTER AND NOT FLAG THE PLAYER
    # MANY OF THOSE VALUES ARE SET TO STOP FALSES FROM OCCURING, meaning if you set one of those variables too high
    # it will certainly not flag the player | THE ENTIRE ANTI-CHEAT RUNS OFF THIS TYPE OF SYSTEM
    # =========================================================================
    # This is a variable you do not touch, this variable is set when multiple new configurations are out
    # If you change this Interger in any way it will delete main.yml and generate a new one
    # Unless the number is equal to the new numbers version, for example if you've changed a lot of configuration
    # Delete copy.yml and copy any new configuration
    versionStringResetter
    : 1008

    # Enabling or disabling All checks. If false, the plugin will not check for any violations (default: true)
    enableAntiCheat
    : true

    flag-system
    :
       # Disable anti-cheat for X amount of ticks upon join (20 = 1 second), Stops falses upon joining
        disablerTimeOnJoin
    : 170
     
        # Cancels event if a violation occurs, NOTE If this variable is set to false, the anti-cheat detection system becomes incredibly fast at detecting cheats
        # As when set to true, it becomes less sensitive (default: true)
        cancelEventIfHacking
    : false
     
        # Enables violation kicks
        autoViolationKick
    : true

        # The number of violations occuring before a kick occurs : linked with autoViolationKick
        violationKickNumUntilKick
    : 100.0

        # Clears all and any violations of any player after X amount of time : linked with clearAllViolationsTimerNum
        # This is good for falses that slowly build up over time and are erased by the AC, as actual cheaters will get flagged very fast compared
        # to non-cheaters so you can easily tell the difference
        clearAllViolationsTimer
    : true

        # Timer for when to clear any violations after X amount of time | time is in seconds : linked with clearAllViolationsTimer
        clearAllViolationsTimerNum
    : 3600
     
        # Enable warning the flagged player for cheating (default: false)
        warnFlaggedPlayer
    : false
        # Enable auto ban. It will automatically ban players (default: false)
        enableAutoBan
    :

            # Enable auto ban. It will automatically ban players (default: false)
            enableAutoBan
    : false
     
            # Use the usage command to ban instead of SoaromaSAC's automatic ban system, meaning autoBanTime
            # is no longer valid if you enable this option and it uses 'usage' to ban
            useUsageForAutoBan
    : false
     
            # Console command sent if useUsageForAutoBan is set to true
            usage
    : 'ban {player}'
     
            # The number of kicks occuring before a ban : linked with enableAutoBan
            numPlayerKickUntilBan
    : 5.0
     
            # Automatic ban time towards flagged players - Time is in hours
            autoBanTime
    : 720
     
        # Option to disable all checks in certain worlds - NOTE DO NOT REMOVE THE FIRST WORLD: linked with all checks
        blacklisted-worlds
    :
         - PutWorldYouDontWantHereEtcEtcEtc

    thresholders
    :

        # just for regen and timer check and stuff and stuff
        irregularEventCountLow
    : 3000
        irregularEventCountMedium
    : 2900
        irregularEventCountHigh
    : 2800
     
        # flag the check as "low" "medium" or "high" meaning if the player just barely flagged the check and so far
        roundedThresholdLow
    : 1
        roundedThresholdMedium
    : 2
        roundedThresholdHigh
    : 3
     
        high-string
    : "&4high"
        low-string
    : "&alow"
        medium-string
    : "&6medium"
     
    # Spaced violation messages
    spacedViolationMessages
    :
       # It sends a message to players with sac.notify each X amount of violations
        # If disabled, it will message players with sac.notify for each violation
        spacedViolationMessages
    : true
     
        # The number of messages occuring, every X amount of violations then send a message to all
        spacedViolationNotificationsNum
    : 10.0

    # This are the GUI commands when you open it in game
    # You can adjust display glasses name and time in GUI
    GUI
    :
      Ban
    :
        FirstTime
    :
          DisplayName
    : 1D
          Time
    : 24
        SecondTime
    :
          DisplayName
    : 3D
          Time
    : 72
        ThirdTime
    :
          DisplayName
    : 7D
          Time
    : 168
        FourthTime
    :
          DisplayName
    : 30D
          Time
    : 720
        FifthTime
    :
          DisplayName
    : PERM
          Time
    : 10000000

    # All messages
    messages
    :

        # Message to show to banned player when trying to enter the server
        banMessage
    : 'Blacklisted Client'
     
        # Ban message to all ops
        banMessageInGame
    : '&8[#00bf5f/SAC&8]#26ff92/ %s has been banned forever due to reaching max violations and kicks'

        # Clears all warnings of a specified player (using GUI)
        clearWarning
    : '&8[#00bf5f/SAC&8]#26ff92/ You have cleared any warnings of the specified player'
     
        # Message showing that you have frozen a player
        freezeMessage
    : '&8[#00bf5f/SAC&8]#26ff92/ You have frozen the player'
     
        # Message that player get when he/she has been frozen
        freezeMessagePlayer
    : '&8[#00bf5f/SAC&8]#26ff92/ You have been frozen'
     
        # Message to a player when a player that has been frozen tries to type in a command
        frozenPlayerCommandBlocked
    : '&8[#00bf5f/SAC&8]#26ff92/ Your commands have been blocked as you are frozen'
     
        # Message shown if invalid arguments for config are provided
        invalidArgsSetConfig
    : '&8[#00bf5f/SAC&8]#26ff92/ invalid arguments'
     
        # Message shown if no player name is specified onto the command
        invalidArguments
    : '&8[#00bf5f/SAC&8]#26ff92/ invalid arguments, add a player name onto the command'
     
        # Message shown if arguments for enabling / disabling notifications are invalid
        invalidArgumentsNotify
    : '&8[#00bf5f/SAC&8]#26ff92/ invalid arguments, /sacnotify <enable/disable>'
     
        # Message to a player
        kickMessage
    : 'Timed out'
     
        # Message shown in game to all players with the permission sac.notifykick about a player being kicked by the anti-cheat
        kickMessageInGame
    : '&8[#00bf5f/SAC&8]#26ff92/ %s has been kicked due to reaching max violations'

        # Message showing that you muted a player
        mutedPlayer
    : '&8[#00bf5f/SAC&8]#26ff92/ You have muted the specified player'
     
        # Message shown to muted player
        mutedPlayerMessage
    : '&8[#00bf5f/SAC&8]#26ff92/ You have been muted'

        # Message showing that violation notifications are disabled
        notificationsDisabled
    : '&8[#00bf5f/SAC&8]#26ff92/ Violation notifications disabled'

        # Message showing that violation notifications are enabled
        notificationsEnabled
    : '&8[#00bf5f/SAC&8]#26ff92/ Violation notifications enabled'

        # Showing you a message that the specified player is not online
        notOnline
    : '&8[#00bf5f/SAC&8]#26ff92/ Specified player is not online'
     
        # Message shown to muted player
        playerIsMuted
    : '&8[#00bf5f/SAC&8]#26ff92/ You are muted'

        # It shows player ping
        playerPingMessage
    : '&8[#00bf5f/SAC&8]#26ff92/ Player ping is {ping}'

        # Message informing that the player is hacking, format is cheat, number of violations and ping
        violationMessage
    : '&8[#00bf5f/SAC&8]#26ff92/ {player} flagged {hack} ({type}) : V({num}) : P({ping}) : F({vioType}#26ff92/)'

        # Message informing that you warned a specified player
        warnedPlayer
    : '&8[#00bf5f/SAC&8]#26ff92/ You have warned the specified player'

        # Message that is sent to the warned player (used in GUI)
        warnedPlayerMessage
    : '&8[#00bf5f/SAC&8]#26ff92/ You have been warned'

        # Message that is sent to warned player including the reason (used in console or in-game)
        warnMessageFormat
    : '&8[#00bf5f/SAC&8]#26ff92/ You have been warned for {reason}'

        # Warn player for flagging the anti-cheat
        warnFlaggedPlayerMessage
    : '&8[#00bf5f/SAC&8]#26ff92/ You have been flagged for cheating, please disable any cheats that are activated'

        # Message showing you that the player has been unbanned
        unbanMessage
    : '&8[#00bf5f/SAC&8]#26ff92/ Unbanned player'

        # Message showing that the player is not banned (if trying to unban a no banned player)
        unbanMessageError
    : '&8[#00bf5f/SAC&8]#26ff92/ Player is not banned'

        # Message showing that you unfroze the player
        unfreezeMessage
    : '&8[#00bf5f/SAC&8]#26ff92/ You have unfrozen the player'

        # Message sent to player informing that he / she has been unfrozen
        unfreezeMessagePlayer
    : '&8[#00bf5f/SAC&8]#26ff92/ You have been unfrozen'

        # Message informing that you have unmuted the specified player
        unmutedPlayer
    : '&8[#00bf5f/SAC&8]#26ff92/ You have unmuted the specified player'

        # Message sent to player informing that he / she is no longer muted
        unmutedPlayerMessage
    : '&8[#00bf5f/SAC&8]#26ff92/ You have been unmuted'
     
        # Message showing that there are no permission to perform some actions
        noPerm
    : '&8[#00bf5f/SAC&8]#26ff92/ No Permission'
     
        # Message about how to set some config parameters
        setConfigMessage
    : '&8[#00bf5f/SAC&8]#26ff92/ Configuration set {config} to {set} | Please note that this does delete most comments of the main.yml file'

        # clear hashmaps message
        clearedHashMaps
    : '&8[#00bf5f/SAC&8]#26ff92/ Cleared all known hashmaps and set all internal hashmaps to default for every player on the server'
     
        # up to date
        upToDate
    : '&8[#00bf5f/SAC&8]#26ff92/ SoaromaSAC is up to date'
     
        # not up to date
        notUpToDate
    : '&8[#00bf5f/SAC&8]#26ff92/ SoaromaSAC is not up to date'
     
        reportLog
    : '&8[#00bf5f/SAC&8]#26ff92/ {player} reported: {report}{date}'
     
        wroteReport
    : '&8[#00bf5f/SAC&8]#26ff92/ Report logged...'
     
        recieveReport
    : '&8[#00bf5f/SAC&8]#26ff92/ {player} has reported: {report}'
     
        noReports
    : '&8[#00bf5f/SAC&8]#26ff92/ No reports'

        # List recent reports
        reportsListWrongArgument
    : '&8[#00bf5f/SAC&8]#26ff92/ An integer is required, for example, /sacreports 10'
     
        sacinfo
    :
           - '#26ff92/----- #00bf5f/{user} Info #26ff92/-----'
            - '#26ff92/IP: #00bf5f/{player-ip}'
            - '#26ff92/Violations: #00bf5f/{current-vio}'
            - '#26ff92/total-violations: #00bf5f/{total-vio}'
            - '#26ff92/Uuid: #00bf5f/{player-uuid}'
            - '#26ff92/Current-speed: #00bf5f/{player-speed}'
            - '#26ff92/Coordinates: #00bf5f/{coords}'
            - '#26ff92/InsideVehicle: #00bf5f/{is-in-veh}'
            - '#26ff92/World: #00bf5f/{world}'
            - '#26ff92/AllowedFlight: #00bf5f/{flight}'
            - '#26ff92/Flying: #00bf5f/{isflying}'
            - '#26ff92/WarnCount: #00bf5f/{warns}'
        sacmodified
    :
           - '#26ff92/----- #00bf5f/{user} PacketPlayInCustomPayload #26ff92/-----'
            - '#26ff92/data: #00bf5f/{data}'
            - '#26ff92/key: #00bf5f/{key}'
            - '#26ff92/namespace: #00bf5f/{namespace}'
     
        tps
    : '&8[#00bf5f/SAC&8]#26ff92/ Server TPS is {tps}'
     
        tpsNotTrue
    : '&8[#00bf5f/SAC&8]#26ff92/ checkServerTPS is not set to true in config, cannot check server tps, turning this to true may cause performance issues'
     
     
     
    item-attribute
    :

       # Only turn this to true if your server uses item attributes, (Potion effects and enchants are NOT item attributes)
       enableItemAttributeChecking
    : false
     
     
       # Formula for calculating the increase variables in item generic movement is,
       # (AtttributeModifier.getAmount() / divisionAmount) * speedIncrease
     
       # For every divisionAmount from attribute modifier get amount
       # and increase speed L, and speed M, speed H, bHopA and bHopB variables from below
       speedIncrease
    : 0.7
     
       divisionAmount
    : 0.05

       # If the player unequips a generic movement attribute
       # the next X movement packets they send
       # they will have their speed limits increased
       # to stop falses
       # even if they don't have a item attribute on them
       counter
    : 7
     
     
    # All Movement Checks
    movement
    :

        # When above ice, adjust speed accordingly between bHop and speed checks
        iceIncrease
    : 2.7
     
        # Check for bHop
        checkBHop
    :

            # Check for bHop
            checkBHop
    : true
     
            # The max speed a player go be while above a block : linked with bHop
            speedCheckMidAirA
    : 4.2

            # The amount of times a player is flagged before getting flagged for bHop : linked with bHop
            BhopUntilHackingA
    : 4.0

            #The amount of times a player is flagged before getting flagged for bHop alternative : linked with bHop
            BhopUntilHackingAlternativeB
    : 3.0
     
            # The max speed a player go be while above a block : linked with bHop
            speedCheckbHopAlternativeB
    : 0.1
     
        # Check for fastClimb
        checkFastLadder
    :

            # Check for fastClimb
            checkFastLadder
    : true
     
            # How long the player is on ladders until checking for fastLadder : linked with fastClimb check
            numUntilCheckingFastClimbA
    : 10.0
     
            # The max speed a player can go while going up ladders, water, lava and vines : Linked with fastClimb check
            speedMaxClimbingA
    : 2.9

        # Check for flight
        checkFly
    :

            # Check for flight
            checkFly
    : true
     
            # How many jumps a player takes in mid-air until hacking : linked with flight check
            inAirJumpUntilHackingA
    : 6.0

            # How long the player is in the air until checking for jumps : linked with flight check
            inAirUntilCheckJumpB
    : 2.0

            # How long a player is going up in air until hacking : linked with flight check
            inAirUpwardUntilHackingB
    : 14.0
     
            # How many times a player is going down with levitiation before hacking : linked with flight check
            levitationDownUntilHackingC
    : 25.0
     
            # How many times check D for flight flags before flagging for hacking : linked with flight check
            inAirYCoodD
    : 5.0
     
            # This is pretty much impossible to false
            checkFlightE
    : true
     
        # Check for irregular pitch
        checkIrregularPitch
    :

            # Check for irregular pitch
            checkIrregularPitch
    : true
     
            # If the players pitch exceeds this number negatively: linked with irregularPitch check
            irregularPitchNegativeMaxA
    : -91

            # If the players pitch exceeds this number positively: linked with irregularPitch check
            irregularPitchPositiveMaxA
    : 91

        # noFall
        checkNoFall
    :

            # Check for noFall
            checkNoFall
    : true
     
            # The height in blocks, a player can fall before checking for noFall : linked with noFall check
            noFallBlockHeightA
    : 5.0

            # How long until the player has hit the ground, check for noFall (in ticks) : linked with noFall
            noFallTimerA
    : 6.0

        # Glide
        checkGlide
    :

            # Check for glide
            checkGlide
    : true
     
            # The min speed a player can descend : linked with glide check
            speedMinimumWhenDescendingA
    : 1.1

            # How many times a player is flagged for glide until they are flagged for hacking : linked with glide
            glideUntilHackingA
    : 6.0
     
            # This is pretty much a flight check, if the player goes suddenly slow mid-air
            speedMinimumWhenDescendingB
    : 1.4
     
            glideUntilHackingB
    : 7.0


        checkElytraFlight
    :

           checkElytraFlight
    : true
     
           # Pretty much just, if the player didn't use a firework rocket this number for the player
           # will keep going up ANDDD if it exceeds this threshold then flag the player
           # aka, packets sent while the player is flying
           elytraFlightUntilHacking
    : 155
     
        # Speed
        checkSpeed
    :
            # Check for speed
            checkSpeed
    : true
     
            # When a user has the speed affect, increase all speed thresholds by x every speed level
            speedAmplifierThreshold
    : 0.8
     
            # When a user has the jump affect, increase all speed thresholds by x every jump level
            jumpAmplifierThreshold
    : 1.0

            # The max speed a player is in the air when Y coords are the same : linked with speed check
            speedCheckWhenInAirAlternativeA
    : 6.0

            # The speed of movements a player takes in the same Y air coord until they start getting flagged : linked with speed check
            speedCheckWhenInAirAlternativeNumA
    : 5.0
     
            # The max speed of a player under a block : linked with speed check
            speedMaxUnderBlockB
    : 6.0

            # The max speed a player can go in the air, the max is 40 : Linked with speed check
            speedMaxInAirC
    : 60.0

            # The max speed a player can go when in a vehicle : Linked with speed check
            speedMaxInVehicleD
    : 21.0

            # Speed limit when the player is on a block : Linked with speed check
            speedMaxOnGroundE
    : 6.7

            # The max speed a player can go when on ice : Linked with speed check
            speedMaxOnIceF
    : 20.0

            # The max speed a player can go when on ice : Linked with speed check
            speedMaxInWaterG
    : 10.0

            # The max speed a player can ascend : Linked with speed check
            speedMaxWhenAscendingH
    : 10.0

            # The max speed a player can descend : Linked with speed check
            speedMaxWhenDescendingI
    : 40.0
     
            # The max speed a player can go in the air on the same Y axis : linked with speed check
            speedCheckMidAirAlternativeJ
    : 5.0
     
            # The amount of times speedMaxInWater is flagged before flagging the player as cheating | linked with speed check
            speedMaxInWaterNumK
    : 4.0
     
            # The max speed a player can go XZ : linked with speed check
            speedMaxXZL
    : 3.75
     
            # The max speed on a block : linked with speed check
            speedMaxOnBlockM
    : 7.8
     
            # The amount of flags that needs to occur consistently to flag the player : linked with speed check
            speedMaxXZMaxL
    : 4.0
     
            # Max speed going up
            speedMaxYN
    : 5.0
     
            # Max speed with an elytra
            maxSpeedElytra
    : 36.0
     
            # Max speed going up until flagging
            speedMaxYNFlag
    : 2
     
            # How long the player is on slime until checking for speed : linked with speed check
            onSlimeTillCheckSpeed
    : 3.0

        # Spider Check
        checkSpider
    :

            # Check for spider
            checkSpider
    : true
     
            # How long a player can be going up before hacking : linked with spiderCheck
            spiderUpUntilHackingA
    : 7.0

            # How long a player can be going up before hacking : linked with spiderCheck
            spiderUpUntilHackingAlternativeB
    : 5.0
     
        checkIrrMovement
    :
           # Check for Irr movement (pretty much a speed and bhop check on the ground combined)
            checkIrrMovement
    : false
     
            # Logs the coords of the first and last packet
            irrMovementPacketSamples
    : 5
     
            # Max distance between both packets
            irrMaxDistance
    : 4.5
     
            # if first packet and last packet coords are X blocks within eachother then check distance
            irrYAxisIgnore
    : 0.1
     
            irrMovementPacketSamplesB
    : 23
     
            irrMaxDistanceB
    : 11.0
     
            irrYAxisIgnoreB
    : 0.1
     
        # Check for step
        checkStep
    :

            # Check for step
            checkStep
    : true
     
            # Step block height until getting flagged : linked with stepCheck
            stepBlockHeightA
    : 2.5

            # Enable experimental step B check
            checkStepB
    : false
     
            # Max speed for step B
            stepMaxSpeedB
    : 4.25

        # Check for noSlowDown
        noSlowDownCheck
    :

            # Check for noSlowDown
            noSlowDownCheck
    : true
     
            # The max speed a player can go when crouching : Linked with noSlowDown check:
            speedCheckWhenCrouchingA
    : 2.7
     
            # The amount of times a player is flagged in a slowable block (cobweb or sweet berry bush) : linked with noSlowDown check
            inSlowableBlockUntilCheckB
    : 2.0
     
            # The max speed a player can go when in webs, and sweetberry bushes : Linked with noSlowDown check
            noSlowDownSpeedNumB
    : 1.9
     
            # How long the player is shifting until checking for noSlowDown : linked with noSlowDown check
            shiftUntilCheckingNoSlowA
    : 5.0
     
            # If player is sprinting while food bar is less than 3
            checkNoSlowDownC
    : true

        # Fluid Walk
        checkWalkOnFluid
    :

            # Check for Jesus, water walking, fluid walk
            checkWalkOnFluid
    : true
     
            # How long the player is standing above water until flagging : linked with fluidWalk check
            fluidWalkUntilHackingAlternativeA
    : 7.0

            # How long the player is above water until hacking : linked with fluidWalk check
            fluidJumpsOnWaterUntilHackingB
    : 6.0

            # How fast the player is going above water to be flagged : linked with fluidWalk check
            fluidWalkIrregularSpeedB
    : 1.5

            # How long the player is standing above water until flagging : linked with fluidWalk check
            fluidWalkUntilHackingC
    : 3.0
     
            # Enable fluidWalk D, there are no options for this one as it is hardcoded, the only thing you can change if its enabled or not
            fluidWalkDCheck
    : true
     
    # All combat checks
    combat
    :
       # Check for combat if the player is in creative mode, true means don't check, false means check regardless of gamemode : linked with all combat checks
        checkPlayersGamemodeCombat
    : true

        # Adjust movement values accordingly when a player is hit by another player to stop falses : linked with all movement checks
        smartCombatMovementChange
    :

            # Adjust movement values accordingly when a player is hit by another player to stop falses : linked with all movement checks
            smartCombatMovementChange
    : true
     
            # Timer to adjust when a player is out of combat (20 = 1 second): linked with all movement checks
            smartCombatMovementChangeTimer
    : 60.0

            # increase all movement value threshold flag limits by X: linked with all movement checks
            smartCombatMovementChangeNumber
    : 3.0
     
            # When a user is hit with a weapon that has the enchantment punch, the speed (L) and speed (M) check will increase accordingly
            smartCombatMovementChangeSpeedPunchLM
    : 4.0
     
            # When a user is hit with knockback increase variables speed (L) and speed (M) will increase accordingly
            smartCombatMovementChangeSpeedKnockbackLM
    : 2.0

        # Check for critical hits
        checkCriticals
    : true
     
        checkVelocity
    :

            # Check velocity
            checkVelocity
    : true
     
            # Number of velocity flags before flagging velocity
            velocityFlagsUntilFlagging
    : 2.0
     
            # Speed min
            velocitySpeedMin
    : 0.5
     
        # Check for killAura
        checkKillAura
    :

            # Check for killAura
            checkKillAura
    : true
     
            # Angular check for killAura, if exceeds angle then flag player : linked with killAura check
            killAuraAngleCheckA
    : 46.0
     
            # If the player is less than x blocks of the entity hit, ignore any flags : linked with killAura check
            killAuraDistanceTillIgnore
    : 2.4
     
            # Meaning does killAura only check when a player is hitting any entity, if false it only checks when hitting another player : linked with killAura check
            killAuraCheckTargetAllEntityHit
    : true

        # Check for entity reach
        checkReach
    :

            # Check for entity reach
            checkReach
    : true
     
            # Entity reach max limit : Linked with entity reach check
            checkReachNumA
    : 4.7

            # Entity reach max limit when in creative: Linked with entity reach check
            checkReachNumCreativeB
    : 7.0

    # All Timer Checks
    timer-checks
    :
       # Check for regen : linked with checkIrregularEvent
        checkRegen
    : true
     
        # Check for irregularMoveEvents
        checkIrregularEvent
    :

            # Check for irregularMoveEvents
            checkIrregularEvent
    : true
     
            # The number of events occuring in the time limit irregularCheckNumTimer
            irregularCheckNumUntilHackingA
    : 20.0

            # Gets the player packet count movement count, once reaching this number it samples the time it has taken from the first
            # and the last packet that was recieved : linked with irregularEventCount check
            irregularNumSampleNumA
    : 70.0
     
            # Gets the time taken between the first and last packet of irregularNumSampleNum,
            # if the time between the two packets is lower than this number then flag (In miliseconds) : linked with irregularEventCount
            irregularTimeCountA
    : 3000.0

            # max mili when using an elytra and flying
            maxElytraMili
    : 2000


        # Check for fast place
        checkFastPlace
    :

            # Check for fast place
            checkFastPlace
    : true
     
            # If the users fastPlaceTime is lower than this number then flag (note in miliseconds)| linked with fastPlace
            fastPlaceFlagNumA
    : 300.0

            # Takes the time between the amount of blocks placed and takes the time between the two placed | linked with fastPlace
            fastPlaceSampleNumA
    : 6.0
     

    # All block interaction checks
    interaction
    :

        # It checks for auto clicker
        checkAutoClicker
    :

            # It checks for auto clicker
            checkAutoClicker
    : true
     
            # Clicks per second until getting flagged for auto clicker : linked with autoClicker check
            CPSUntilHackingA
    : 25.0
     
        # Check for reach break
        checkReachBlockBreak
    :

            # Ch eck for reach break
            checkReachBlockBreak
    : true
     
            # If player breaks a block farther than this number, flag player : linked with reach break check
            reachBlockBreakNumA
    : 7.0

        # Reach Place
        checkReachBlockPlace
    :

            # Check for reach place
            checkReachBlockPlace
    : true
     
            # If player places a block farther than this number, flag player : linked with reach place check
            reachBlockPlaceNumA
    : 7.0
     
        # check if player is placing blocks mid-air
        irrPlacement
    : true
     
    other
    :

        # Enables the API
        enableAPI
    : false
     
        # When a report gets submitted, message all online admins
        enableReportBroadcastToAdmins
    : true
     
        # Disable anti cheat for player for X amount of ticks , 20 = 1 second, upon teleporting (This is for stopping falses upon teleportation)
        disableAntiCheatXTime
    : 170
     
        # When hit by the ender dragon, disable the AC for X amount of time, 20 = 1 second
        disableACEnderDragon
    : 100
     
        # Display PacketPlayInCustomPayload when a player joins
        enableModifiedClientBroadcast
    : false
     
        checkBaritone
    :

           # Checks for baritone
           # Sadly I cannot explain how this check works due to it being too complicated to type it all out
           # THIS IS AN EXTREMELY BETA CHECK, MEANING IT WILL TAKE A WHILE TO FLAG OR IT WILL FALSE

           checkBaritone
    : true
     
           # -----------------------------
           # samples the amount of packets into an array, ONLY CHANGE BY A FEW INTEGERS IF REQUIRED
           packetSamples
    : 6
     
           # until the player gets flagged for cheating (globally, is not consecutive), Not so important but if you set it too high it
           # becomes useless
           # USUALLY THIS NUMBER YOU WOULD WANT TO CHANGE IF NEEDED
           baritoneFlag
    : 2
     
           # higher num = more insensitive, THIS IS AN EXTREMELY IMPORTANT NUMBER, ONLY CHANGE BY A FEW INTEGERS IF REQUIRED
           baritoneLoopThreshold
    : 3
     
           # highernum = more insensitive, logs speed, THIS IS AN EXTREMELY IMPORTANT NUMBER, ONLY CHANGE BY A FEW INTEGERS IF REQUIRED
           substringNum
    : 4
     
           # min flag count
           minFlagCount
    : 6
     
           # -----------------------------
     
           # samples the amount of packets into an array, ONLY CHANGE BY A FEW INTEGERS IF REQUIRED
           packetSamplesB
    : 5
     
           # until the player gets flagged for cheating (globally, is not consecutive), Not so important but if you set it too high it
           # becomes useless
           # USUALLY THIS NUMBER YOU WOULD WANT TO CHANGE IF NEEDED, NOTHING ELSE
           baritoneFlagB
    : 4
     
           # higher num = more insensitive, THIS IS AN EXTREMELY IMPORTANT NUMBER, ONLY CHANGE BY A FEW INTEGERS IF REQUIRED
           baritoneLoopThresholdB
    : 1
     
           # highernum = more insensitive, logs speed, THIS IS AN EXTREMELY IMPORTANT NUMBER, ONLY CHANGE BY A FEW INTEGERS IF REQUIRED
           substringNumB
    : 5
     
           minFlagCountB
    : 3
           # -----------------------------
     
           # samples the amount of packets into an array, ONLY CHANGE BY A FEW INTEGERS IF REQUIRED
           packetSamplesC
    : 5
           # until the player gets flagged for cheating (globally, is not consecutive), Not so important but if you set it too high it
           # becomes useless
           # USUALLY THIS NUMBER YOU WOULD WANT TO CHANGE IF NEEDED
           baritoneFlagC
    : 1
     
           # higher num = more insensitive, THIS IS AN EXTREMELY IMPORTANT NUMBER, ONLY CHANGE BY A FEW INTEGERS IF REQUIRED
           baritoneLoopThresholdC
    : 5
     
           # highernum = more insensitive, logs speed, THIS IS AN EXTREMELY IMPORTANT NUMBER, ONLY CHANGE BY A FEW INTEGERS IF REQUIRED
           substringNumC
    : 6
     
           minFlagCountC
    : 6
     
           # -----------------
           # Optional Baritone Configuration, however does false in certain situations
           # 5
           # 2
           # 1
           # 5
           # 5
           # and turning allowedBlockTillFlagNum to 0
           # -----------------
           baritoneReset
    : 50
     
           # This is a secondary checker for A, B and C internally, its meant to limit falses if a player is acting like a bot
           # To enable this check, increase the value by X, 0 means don't check for secondary
           # 1 or more means check for secondary
           # making this number higher than 7 makes it useless, making it higher than 3 may as well make it useless depending on doubleBlockNum
           # default is 0
           # turn to 1 to enable secondary internal checking
           allowedBlockTillFlagNum
    : 0
     
           # Part of the secondary limit internal check for A, B and C
           doubleBlockNum
    : 0.5
     
     
        checkGroundSpoof
    :

           # Check for ground spoofing
           checkGroundSpoof
    : true
     
           # The number of flags consistently until flagging for groundSpoof, note keep this number above 2.0 to stop falses occuring
           checkGroundNumA
    : 6.0
        # Server TPS
        checkServerTPS
    :

            # Check For Server TPS
            checkServerTPS
    : false

            # If the servers TPS is lower than number, ignore all abnormal activity : linked with checkServerTPS
            serverTPSTillIgnore
    : 18.0

        # Check for player lag. If false, then ignores players ping regardless, and still continues checking players actions
        checkPlayerLag
    :

            # Check for player lag. If false, then ignores players ping regardless, and still continues checking players actions
            checkPlayerLag
    : false
     
            # If the ping is higher than this number, ignore players irregular activity : linked with CheckPlayerLag check
            checkPlayerLagNum
    : 500.0

        # Check for ping spoofing
        checkPingSpoofing
    :

            # Check for ping spoofing
            checkPingSpoofing
    : false
     
            # Ping until ping spoofing : Linked with pingSpoofing check
            pingUntilPingSpoofingA
    : 2000.0
     
        checkNuker
    :

           checkNuker
    : true
     
           maxMili
    : 400
     
           sample
    : 20
     
        # Debug mode is when a violation occurs, and the check that is violated will display the configuration variable
        # that the player exceeded in chat, note that it messages every player what configuration variable
        # was exceeded
        debugMode
    : false
     
        # Whenever a player with the permission sac.notify joins the game, notify the player if the anti cheat is updated or outdated
        updateNotifications
    : true
     

    Discord server: https://discord.gg/GK3rmrze2Q <-- Support, False flags can be reported here
    Few checks are open-sourced, you can find them here: checks
    You may upload this resource on other websites without my permission if you desire, you do not need to credit me
    If you want this anti-cheat to work on 1.16.X, download version 1.0.05 from the previous versions

    [​IMG]

    Disclaimers

    This plugin may not be compatible with other plugins that alter player movement or actions too much, by default this anti-cheat is suited towards vanilla player movement only. For example, if you want this to be compatible with mcMMO, variable changes would have to occur - for more information about that there is a FAQ channel in discord. Players are given grace for a certain amount of time upon teleporting and logging in for a few seconds to prevent false flags from occurring. I won't say this anti-cheat is perfect because it is not, bypasses, false flags and bugs may occur. If any of those occur, it would be appreciated if you told me so I can patch/fix them, but the majority of this AC is on the more stable side now.

    Note if you use any plugins that break trees entirely ex. Timber or mcMMO, the variable reachBlockBreakNum in configuration has to be increased to 200.0 to stop falses occurring.


    [​IMG]
    Lebrzy, adrianed04, ccorp2002 and 2 others like this.

Recent Updates

  1. Changelog
  2. Changelog
  3. Changelog

Recent Reviews

  1. ToXiiCxBusiness
    ToXiiCxBusiness
    5/5,
    Version: 1.0.10
    Great plugin, love the gui for punishment. Would be nice to have kick,ban,mute exemptions for staff.
  2. Lebrzy
    Lebrzy
    5/5,
    Version: 1.0.10
    This anti-cheat works amazing, helped me find quite a bit of hackers
    It is also extremely easy to use and each check is easy to change if needed. Also love how it had little to no impact on performance, support is extremely fast for a free plugin. Some cheat detections are instant, which is quite nice.
  3. DreamVoid
    DreamVoid
    2/5,
    Version: 1.0.10
    This Anti-Cheat plugin works well on some cheating detection.
    But when I trying to use "useUsageForAutoBan" for custom ban command. This plugin send over 39 times of command and the console spammed. And cannot customize the ban command for each detection
    If author will fix this problem, I will change my rating, after all, this should be the first anti-cheat plugin for 1.17
    1. Korbsti
      Author's Response
      I can fix the repeated spam upon a ban easily, but you want a specific ban command for each detection type?

      So you're rating two-star reviews where it doesn't affect the plugin performance but in fact that you want a feature added, this greatly discourages me from adding this. Could have just gone to discord and message me there.
  4. OMGPandaYT
    OMGPandaYT
    3/5,
    Version: 1.0.07
    Good anticheat, except you can easily step up 3 blocks and phasing through a block inside that step
    And also it spams console with errors. :D
    1. Korbsti
      Author's Response
      yes I am aware of the errors in console, I am patching that at the moment, if you could contact me about the 3 block step that would be great


      Edit: Found the console errors, it is fixed now, as for that bypass I just released a new version of (1.0.08) which has an experimental step check [Disabled upon default configuration so go into config and enable it]

      Best regards
      Korbsti
  5. Shadowpauler
    Shadowpauler
    5/5,
    Version: 1.0.06
    An incredibly accurate anti-cheat for 1.16+ I find it to be nearly perfect. It's tweaked slightly better than NCP+ which is why I use it.
  6. Romanrf34
    Romanrf34
    5/5,
    Version: 1.0.05
    A great solution as a free anti-cheat.

    The developer did a great job.
  7. JIMSAM2
    JIMSAM2
    5/5,
    Version: 1.0.05
    Straight 5 STARS
    Better Than Most Anti Cheats
    Default Config is bad but if you configure it you can have the best anti cheat BETTER THAN NCP!!
  8. __Vekster007__
    __Vekster007__
    5/5,
    Version: 1.0.04
    Nice plugin! Very light, good detection! I hope that in the future it will become a little better
  9. iRaphi05
    iRaphi05
    5/5,
    Version: 1.0.04
    Hello, i really like SAC, it works perfect on my small server! The fact that you only need this plugin and no others is very great. I tested SAC with the SIGMA 5.o Client. It is flagging fly and speed instantly. Thank you for the awesome plugin. I look forward to later updates.
  10. Rinne_owo
    Rinne_owo
    5/5,
    Version: 1.0.04
    It really scared me. It works so well. It's better than NCP.I hope to add the support of Protocollib and add more anti cheating options.
    1. Korbsti
      Author's Response
      Thanks for the review, I'll add some more detections in later updates

      ProtocolLib isn't really needed for this plugin since it handles and reads the packets itself