Themis Anti Cheat | 1.17.X | Bedrock Support | Paper, Tuinity Compatibility | Free, Optimized 0.9.0

A free Anti Cheat focused on Accuracy, Efficiency and Simplicity

  1. Olexorus
    Native Minecraft Version:
    1.17
    Tested Minecraft Versions:
    • 1.17
    This plugin only works on Minecraft version 1.17.X! To use it on 1.16.X you can download version 0.8.2, however then you will not get any updates or support.

    You need to install ProtocolLib to use Themis!
    For Bedrock support you need to install the Bukkit/Spigot version of Floodgate (both 1.0 and 2.0 are supported)!

    If there are any issues, instead of leaving a bad review please join the Discord so that we can help you!




    [​IMG]

    Themis is an anti cheat with a focus on accuracy, efficiency and simplicity.

    I highly recommend joining the Discord to stay up to date and get support: https://discord.gg/2tzKFDJ2wW

    Themis supports Spigot, Paper and Tuinity. Other forks will probably work too, but I don't guarantee it.

    Also Themis has real Bedrock/Geyser support! By "real" I mean that it actually performs proper checks on Bedrock players. Some other anti cheats simply exclude Bedrock players from the checks, which means that they can fully bypass the anti cheat. With Themis this is not the case!

    Note that supporting Bedrock is more difficult than Java since it's a completely different codebase and Geyser has bugs that cause random weird behaviour (Geyser is an absolutely amazing piece of software though!), so there will be false positives. Please report them on Discord to help me fix them!

    Themis has a flexible config that allows you to configure an arbitrary number of actions that can consist of an arbitrary number of commands which should be run. For each action you can define a minimum score required to run, and a score and time delay for it to be run again. All of this can be configured for each check individually. You can find the config in the config section below.

    Themis currently focuses on movement hacks but will expand and detect more hacks in the future.



    [​IMG]
    • BHop Speed
    • Blink
    • Climb / Spider
    • Fly
    • Jetpack
    • NoFall
    • OnGround Speed
    • Step
    • Timer
    • Vanilla Speed
    • WaterWalk / Jesus
    Note that this list is not complete. Some checks can catch hacks they weren't even designed for, and some hacks can have many different names in different hack clients, so even if a hack is not on this list, there's a chance it's blocked anyways, especially if it's similar to the ones listed.



    [​IMG]

    Themis doesn't just promise efficiency, it also delivers it. This is a timings report over an hour of a server running Themis 0.8.1 with all checks enabled and about 15 players online.
    [​IMG]
    It shows that on average Themis uses 0.23% of the tick, which is about 0.015% per player. Of course this number will vary, depending on your server hardware and setup (plugins, gamemodes, ...).

    For comparison, as of writing this (13th April 2021), AAC has a similar statistic on its plugin page where it uses 3.92% for 140-150 players which is about 0.026% to 0.028% per player, so Themis is almost twice as fast.

    (Note that this is not at all a fair comparison since AAC has a lot more features than Themis! I didn't put this here to say Themis is better, I just think the statistic alone will be meaningless to most people, so I wanted some reference point, and I chose AAC because it's a well optimized anti cheat, it's widely known and it has a similar statistic on its plugin page.)

    If you notice any mistakes in these calculations please let me know!



    [​IMG]

    To install Themis, please carefully follow these steps:
    • Make sure you're running version 1.16.X of either Spigot, Paper or Tuinity. Other forks will probably work too, but I don't guarantee it.
    • Check if ProtocolLib is already installed on your server. If not, please download it here. Note that depending on your server version, you might need a specific version, please read the ProtocolLib plugin page carefully. Even if it's already installed, I recommend redownloading it to make sure it's up to date and contains no old bugs.
    • Download the Themis .jar file from this page and drop it in your plugins directory.
    • Only if your server allows Bedrock players: Install Floodgate to allow Themis to check if a player is using Bedrock and to adjust the checks accordingly (both 1.0 and 2.0 are supported). Note that you need the Bukkit version installed on every server where Themis is running, the Bungee version is not enough! If you're using Bungee, you need to set the "send-floodgate-data" option in the Bungee Floodgate option, otherwise the Floodgate API won't work. It is also highly recommended to enable "forward-player-ping" in the Geyser config, otherwise Themis will not be able to measure the ping of Bedrock players.
    • Now restart the server, to make it load all the changes. Run /themis to check if the installation worked. If it didn't, please check the troubleshooting section below.
    • Only if your server allows Bedrock players: Run "/themis info [PlayerName]" on a Bedrock player and make sure Themis correctly reports it as a Bedrock player, otherwise something with your Floodgate setup is wrong. If not, make sure you enabled the "send-floodgate-data" like mentioned above and join the Discord server for assistance.


    [​IMG]

    Problem: Themis isn't working
    If you installed Themis, but it didn't work, please try running /themis to see if Themis is running. Note that you need the themis.command.info permission, by default everyone has it but your permission plugin might be disabling it.
    If it worked: This means that Themis was loaded and is running correctly. If you're not getting any detections, first please check the "Blocked Hacks" section below make sure that the hack your testing is supported by Themis. If it is, it might not show up because you have the bypass permission. This is disabled by default (even for ops), but you might get it from your permissions plugin, e.g. if you have * perms. If you have LuckPerms, you can use "/lp user [Usermame] permission check themis.bypass" to see if you have the permission, other permission plugins probably offer similar commands. If you're sure that Themis is running and that you don't have the bypass permission, but you're still not getting any detections, please join the Discord for assistance.
    If it didn't work: This mean that something went wrong while loading Themis. Try running /pl and see if Themis shows up.
    If it doesn't show up, it probably means that you didn't place the .jar file in the right directory, or you didn't restart the server after doing so. Make sure the .jar file is in the plugins directory and restart the server. If this doesn't help, please join the Discord for more information.
    If it shows up in red, this most likely means that you're either not on 1.16.X or you didn't install ProtocolLib. If neither of these is the problem, please check the logs for more information and join the Discord for assistance.​
    When asking for support on Discord because something is not working, please directly include the config file. It contains a lot of helpful information and will make helping you easier and faster!

    Problem: Bedrock players are getting flagged
    Run /themis info [player name]" on a Bedrock player and check if Themis correctly detects them as a Bedrock player. If not that means you don't have Floodgate set up correctly. This is not a Themis issue! Often this can be solved by changing the "send-floodgate-data" in the Bungee/Velocity Floodgate config to true.

    Probelm: Bedrock players always have 0 ping
    You need to enable the "forward-player-ping" option in the Geyser config.



    [​IMG]

    As of version 0.8.1, this is the default config:

    Code (Text):

    # ----------------------------------------------------------------------------------------------------
    # Welcome to the Themis configuration file!
    #
    # This config file was generated from Themis version 0.8.1
    # --> if you're using a newer version of Themis you should check the changelog to see if your config needs to be updated.
    # If you want to update your config file, you can either change it manually, or rename this file which will lead to a new
    # up to date one being generated on the next server restart.
    #
    # Important: This configuration file allows you to change every single setting for each check individually for maximum
    # flexibility. Often however you'll want to use the same values for most of the checks. Because of this, there is the
    # "default" section, which defines the default values for all checks, and these can then be overwritten in the check
    # specific sections below.
    # For example if you wanted to disable the tickrate check, you could overwrite the "enable" setting by adding it like this:
    # ----------
    # tickrate:             <-- this should already be in the config, remove the {} at the end if it's still there
    #   enable: false       <-- this is what you add
    # ----------
    #
    # All values are either booleans (true / false) or doubles (1.0, 2.5, -123.456, ...).
    # All time values are in seconds.
    #
    # If you have any questions, problems, or just generally want to stay up to date, you can join the Themis Discord:
    # https://discord.gg/jjkR2EU
    # However before asking questions first please read everything here carefully, this only takes a few minutes and will answer
    # lots of questions. We are happy to help you on the Discord, but we often get the same questions over and over again even
    # though they are already answered here.
    # ----------------------------------------------------------------------------------------------------

    # These are the default values which are used for all checks that don't explicitly overwrite them below
    default:

      # Should the check be enabled?
      enable: true

      # Should Themis block hacks (e.g. by dragging players back)?
      block: true
      # At which score should Themis start blocking the hacks?
      block-threshold: 10.0

      # Themis allows you to configure actions which can each run a list of arbitrary commands. You can specify exactly when
      # an action should be run. Refer to the notify action below for a detailed example:
      actions:
        # What is the name of the action? This name needs to be unique.
        notify:
          # What is the minimum score for Themis to run this action?
          execution-threshold: 10.0
          # Which amount of new violations need to happen for this action to be repeated?
          repetition-threshold: 5.0
          # Which amount of time needs to pass for this action to be repeated?
          repetition-delay: 10.0
          # Which commands should be run? You can specify as many as you'd like which will be run in the order they're listed.
          # Currently you can use the following placeholders: %player_name%, %detection_type%, %score%, %ping%, %tps%
          commands:
            - "themis notify §5[Themis] §4%player_name% §cwas flagged for §4%detection_type% §chacks!\n§c[Score: §4%score% §c| Ping: §4%ping% §c| TPS: §4%tps%§c]"

      # Until which maximum ping should Themis check players? Themis will not check player who have a higher ping than this.
      # Warning: Hacked clients can fake a high ping, use this setting with caution!
      # Set to -1.0 to always check
      max-ping: -1.0

      # Until which minimum TPS should Themis perform checks? Themis will not check any players when the server's TPS are blow this value
      # Set to -1.0 to always check
      min-tps: -1.0

      # After which amount of time should violations expire?
      # Set this to -1.0 to disable this feature and store violations until the server is restarted
      violation-expiration: 900.0

    # Note: It is totally fine if the sections below are empty. Please refer to the third paragraph at the top of the
    # configuration for the explanation. The {} marks it as an empty section, you need to remove when adding settings.

    # This checks horizontal movements (along the x- and z-axis).
    # Ingame name: Speed
    # Hacks that can trigger this: All types of Speed, Fly, ...
    horizontal_movement: {}

    # This checks for some impossible packets
    # Ingame name: Illegal Packets
    # Hacks that can trigger this: Fly (e.g. in Aristois or Inertia), ...
    illegal_packets: {}

    # This checks for a certain type of illegal packet data which is used in many movement hacks.
    # Ingame name: Spoofed Packets
    # Hacks that can trigger this: NoFall, WaterWalk/Jesus, some Fly and Speed hacks, ...
    packet_spoof: {}

    # This check detects if a client is speeding up the time, which means it can e.g. move faster.
    # Ingame name: Timer / Blink
    # Hacks that can trigger this: Timer, Blink, ...
    tickrate: {}

    # This checks vertical movements (along the y-axis).
    # Ingame name: Flight / Y-Movement
    # Hacks that can trigger this: Fly, Glide, Jetpack, HighJump, Step, some Speed modes, ...
    vertical_movement: {}
     

    [​IMG]

    /themis
    Shows if Themis is running and which version is installed

    /themis help
    Lists Themis' commands and their descriptions

    /themis info <player name>
    Shows violations scores and other information about a player

    /themis notifications [on|off]
    Toggles or shows notification settings

    /themis notify <message>
    Sends an anti cheat notification to everyone with the themis.notify permission, this is meant to be used in the config file, not directly ingame

    /themis reload
    Reloads the config to make changes take effect


    [​IMG]

    themis.bypass
    Bypass all of Themis' checks
    default: false

    themis.bypass.[checkName]
    Bypass a specific Themis check, replace [checkName] with the name of a check (uses the same names as in the config, e.g. themis.bypass.vertical_movement for the fly check)

    themis.silent
    Make Themis' checks silent, i.e. they won't block hacks
    default: false

    themis.notifications
    description: Receive detection notifications
    default: op

    themis.update
    description: Receive update notifications
    default: op

    themis.command.base
    description: Use /themis to see if Themis is running and which version is installed
    default: true

    themis.command.help
    Use /themis help
    default: true

    themis.command.info
    Use /themis info
    default: op

    themis.command.notify
    description: Use /themis notify
    default: false

    themis.command.reload
    description: Use /themis reload to reload the config file
    default: op
    lokka30 and Subject_4 like this.

Recent Reviews

  1. AlfredNobel
    AlfredNobel
    5/5,
    Version: 0.9.0
    Very nice, would be nice to have a anti-boat fly as well!
    As of writing this, there has been no errors!
  2. __Vekster007__
    __Vekster007__
    5/5,
    Version: 0.9.0
    [10:18:15] [Server thread/ERROR]: Could not pass event ViolationEvent to Themis v0.9.0
    java.lang.NullPointerException: Cannot throw exception because "null" is null
    at com.gmail.olexorus.themis.o.y(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.Ud.U(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.Ud.I(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.iH.E(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.iH.O(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.G7.p(Unknown Source) ~[?:?]
    at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor144.execute(Unknown Source) ~[?:?]
    at org.bukkit.plugin.EventExecutor.lambda$create$1(EventExecutor.java:69) ~[patched_1.17.1.jar:git-Airplane-43]
    at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:76) ~[patched_1.17.1.jar:git-Airplane-43]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[patched_1.17.1.jar:git-Airplane-43]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:624) ~[patched_1.17.1.jar:git-Airplane-43]
    at com.gmail.olexorus.themis.U9.d(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.U9.I(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.iH.E(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.e.B(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.H.T(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.UD.e(Unknown Source) ~[?:?]
    at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor122.execute(Unknown Source) ~[?:?]
    at org.bukkit.plugin.EventExecutor.lambda$create$1(EventExecutor.java:69) ~[patched_1.17.1.jar:git-Airplane-43]
    at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:76) ~[patched_1.17.1.jar:git-Airplane-43]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[patched_1.17.1.jar:git-Airplane-43]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:624) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.server.network.ServerGamePacketListenerImpl.handleMovePlayer(ServerGamePacketListenerImpl.java:1477) ~[?:?]
    at net.minecraft.network.protocol.game.ServerboundMovePlayerPacket.handle(ServerboundMovePlayerPacket.java:114) ~[?:?]
    at net.minecraft.network.protocol.game.ServerboundMovePlayerPacket$Pos.handle(ServerboundMovePlayerPacket.java:42) ~[?:?]
    at net.minecraft.network.protocol.PacketUtils.lambda$ensureRunningOnSameThread$1(PacketUtils.java:56) ~[?:?]
    at net.minecraft.server.TickTask.run(TickTask.java:18) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.util.thread.BlockableEventLoop.doRunTask(BlockableEventLoop.java:149) ~[?:?]
    at net.minecraft.util.thread.ReentrantBlockableEventLoop.doRunTask(ReentrantBlockableEventLoop.java:23) ~[?:?]
    at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:1407) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.server.MinecraftServer.shouldRun(MinecraftServer.java:190) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.util.thread.BlockableEventLoop.pollTask(BlockableEventLoop.java:122) ~[?:?]
    at net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:1385) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:1378) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.util.thread.BlockableEventLoop.managedBlock(BlockableEventLoop.java:132) ~[?:?]
    at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:1456) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1261) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:317) ~[patched_1.17.1.jar:git-Airplane-43]
    at java.lang.Thread.run(Thread.java:831) [?:?]
    [10:18:15] [Server thread/ERROR]: Could not pass event ViolationEvent to Themis v0.9.0
    java.lang.NullPointerException: Cannot throw exception because "null" is null
    at com.gmail.olexorus.themis.o.y(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.Ud.U(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.Ud.I(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.iH.E(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.iH.O(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.G7.p(Unknown Source) ~[?:?]
    at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor144.execute(Unknown Source) ~[?:?]
    at org.bukkit.plugin.EventExecutor.lambda$create$1(EventExecutor.java:69) ~[patched_1.17.1.jar:git-Airplane-43]
    at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:76) ~[patched_1.17.1.jar:git-Airplane-43]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[patched_1.17.1.jar:git-Airplane-43]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:624) ~[patched_1.17.1.jar:git-Airplane-43]
    at com.gmail.olexorus.themis.U9.d(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.U9.I(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.iH.E(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.e.B(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.H.T(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.UD.e(Unknown Source) ~[?:?]
    at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor122.execute(Unknown Source) ~[?:?]
    at org.bukkit.plugin.EventExecutor.lambda$create$1(EventExecutor.java:69) ~[patched_1.17.1.jar:git-Airplane-43]
    at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:76) ~[patched_1.17.1.jar:git-Airplane-43]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[patched_1.17.1.jar:git-Airplane-43]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:624) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.server.network.ServerGamePacketListenerImpl.handleMovePlayer(ServerGamePacketListenerImpl.java:1477) ~[?:?]
    at net.minecraft.network.protocol.game.ServerboundMovePlayerPacket.handle(ServerboundMovePlayerPacket.java:114) ~[?:?]
    at net.minecraft.network.protocol.game.ServerboundMovePlayerPacket$Pos.handle(ServerboundMovePlayerPacket.java:42) ~[?:?]
    at net.minecraft.network.protocol.PacketUtils.lambda$ensureRunningOnSameThread$1(PacketUtils.java:56) ~[?:?]
    at net.minecraft.server.TickTask.run(TickTask.java:18) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.util.thread.BlockableEventLoop.doRunTask(BlockableEventLoop.java:149) ~[?:?]
    at net.minecraft.util.thread.ReentrantBlockableEventLoop.doRunTask(ReentrantBlockableEventLoop.java:23) ~[?:?]
    at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:1407) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.server.MinecraftServer.shouldRun(MinecraftServer.java:190) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.util.thread.BlockableEventLoop.pollTask(BlockableEventLoop.java:122) ~[?:?]
    at net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:1385) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:1378) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.util.thread.BlockableEventLoop.managedBlock(BlockableEventLoop.java:132) ~[?:?]
    at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:1456) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1261) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:317) ~[patched_1.17.1.jar:git-Airplane-43]
    at java.lang.Thread.run(Thread.java:831) [?:?]
    [10:18:15] [Server thread/ERROR]: Could not pass event ViolationEvent to Themis v0.9.0
    java.lang.NullPointerException: Cannot throw exception because "null" is null
    at com.gmail.olexorus.themis.o.y(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.Ud.U(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.Ud.I(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.iH.E(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.iH.O(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.G7.p(Unknown Source) ~[?:?]
    at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor144.execute(Unknown Source) ~[?:?]
    at org.bukkit.plugin.EventExecutor.lambda$create$1(EventExecutor.java:69) ~[patched_1.17.1.jar:git-Airplane-43]
    at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:76) ~[patched_1.17.1.jar:git-Airplane-43]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[patched_1.17.1.jar:git-Airplane-43]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:624) ~[patched_1.17.1.jar:git-Airplane-43]
    at com.gmail.olexorus.themis.U9.d(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.U9.I(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.iH.E(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.e.B(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.H.T(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.UD.e(Unknown Source) ~[?:?]
    at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor122.execute(Unknown Source) ~[?:?]
    at org.bukkit.plugin.EventExecutor.lambda$create$1(EventExecutor.java:69) ~[patched_1.17.1.jar:git-Airplane-43]
    at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:76) ~[patched_1.17.1.jar:git-Airplane-43]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[patched_1.17.1.jar:git-Airplane-43]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:624) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.server.network.ServerGamePacketListenerImpl.handleMovePlayer(ServerGamePacketListenerImpl.java:1477) ~[?:?]
    at net.minecraft.network.protocol.game.ServerboundMovePlayerPacket.handle(ServerboundMovePlayerPacket.java:114) ~[?:?]
    at net.minecraft.network.protocol.game.ServerboundMovePlayerPacket$Pos.handle(ServerboundMovePlayerPacket.java:42) ~[?:?]
    at net.minecraft.network.protocol.PacketUtils.lambda$ensureRunningOnSameThread$1(PacketUtils.java:56) ~[?:?]
    at net.minecraft.server.TickTask.run(TickTask.java:18) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.util.thread.BlockableEventLoop.doRunTask(BlockableEventLoop.java:149) ~[?:?]
    at net.minecraft.util.thread.ReentrantBlockableEventLoop.doRunTask(ReentrantBlockableEventLoop.java:23) ~[?:?]
    at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:1407) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.server.MinecraftServer.shouldRun(MinecraftServer.java:190) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.util.thread.BlockableEventLoop.pollTask(BlockableEventLoop.java:122) ~[?:?]
    at net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:1385) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:1378) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.util.thread.BlockableEventLoop.managedBlock(BlockableEventLoop.java:132) ~[?:?]
    at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:1456) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1261) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:317) ~[patched_1.17.1.jar:git-Airplane-43]
    at java.lang.Thread.run(Thread.java:831) [?:?]
    [10:18:15] [Server thread/ERROR]: Could not pass event ViolationEvent to Themis v0.9.0
    java.lang.NullPointerException: Cannot throw exception because "null" is null
    at com.gmail.olexorus.themis.o.y(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.Ud.U(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.Ud.I(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.iH.E(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.iH.O(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.G7.p(Unknown Source) ~[?:?]
    at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor144.execute(Unknown Source) ~[?:?]
    at org.bukkit.plugin.EventExecutor.lambda$create$1(EventExecutor.java:69) ~[patched_1.17.1.jar:git-Airplane-43]
    at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:76) ~[patched_1.17.1.jar:git-Airplane-43]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[patched_1.17.1.jar:git-Airplane-43]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:624) ~[patched_1.17.1.jar:git-Airplane-43]
    at com.gmail.olexorus.themis.U9.d(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.U9.I(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.iH.E(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.e.B(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.H.T(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.UD.e(Unknown Source) ~[?:?]
    at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor122.execute(Unknown Source) ~[?:?]
    at org.bukkit.plugin.EventExecutor.lambda$create$1(EventExecutor.java:69) ~[patched_1.17.1.jar:git-Airplane-43]
    at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:76) ~[patched_1.17.1.jar:git-Airplane-43]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[patched_1.17.1.jar:git-Airplane-43]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:624) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.server.network.ServerGamePacketListenerImpl.handleMovePlayer(ServerGamePacketListenerImpl.java:1477) ~[?:?]
    at net.minecraft.network.protocol.game.ServerboundMovePlayerPacket.handle(ServerboundMovePlayerPacket.java:114) ~[?:?]
    at net.minecraft.network.protocol.game.ServerboundMovePlayerPacket$PosRot.handle(ServerboundMovePlayerPacket.java:16) ~[?:?]
    at net.minecraft.network.protocol.PacketUtils.lambda$ensureRunningOnSameThread$1(PacketUtils.java:56) ~[?:?]
    at net.minecraft.server.TickTask.run(TickTask.java:18) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.util.thread.BlockableEventLoop.doRunTask(BlockableEventLoop.java:149) ~[?:?]
    at net.minecraft.util.thread.ReentrantBlockableEventLoop.doRunTask(ReentrantBlockableEventLoop.java:23) ~[?:?]
    at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:1407) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.server.MinecraftServer.shouldRun(MinecraftServer.java:190) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.util.thread.BlockableEventLoop.pollTask(BlockableEventLoop.java:122) ~[?:?]
    at net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:1385) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:1378) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.util.thread.BlockableEventLoop.managedBlock(BlockableEventLoop.java:132) ~[?:?]
    at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:1456) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1261) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:317) ~[patched_1.17.1.jar:git-Airplane-43]
    at java.lang.Thread.run(Thread.java:831) [?:?]
    [10:18:15] [Server thread/ERROR]: Could not pass event ViolationEvent to Themis v0.9.0
    java.lang.NullPointerException: Cannot throw exception because "null" is null
    at com.gmail.olexorus.themis.o.y(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.Ud.U(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.Ud.I(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.iH.E(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.iH.O(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.G7.p(Unknown Source) ~[?:?]
    at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor144.execute(Unknown Source) ~[?:?]
    at org.bukkit.plugin.EventExecutor.lambda$create$1(EventExecutor.java:69) ~[patched_1.17.1.jar:git-Airplane-43]
    at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:76) ~[patched_1.17.1.jar:git-Airplane-43]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[patched_1.17.1.jar:git-Airplane-43]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:624) ~[patched_1.17.1.jar:git-Airplane-43]
    at com.gmail.olexorus.themis.U9.d(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.U9.I(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.iH.E(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.e.B(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.H.T(Unknown Source) ~[?:?]
    at com.gmail.olexorus.themis.UD.e(Unknown Source) ~[?:?]
    at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor122.execute(Unknown Source) ~[?:?]
    at org.bukkit.plugin.EventExecutor.lambda$create$1(EventExecutor.java:69) ~[patched_1.17.1.jar:git-Airplane-43]
    at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:76) ~[patched_1.17.1.jar:git-Airplane-43]
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[patched_1.17.1.jar:git-Airplane-43]
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:624) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.server.network.ServerGamePacketListenerImpl.handleMovePlayer(ServerGamePacketListenerImpl.java:1477) ~[?:?]
    at net.minecraft.network.protocol.game.ServerboundMovePlayerPacket.handle(ServerboundMovePlayerPacket.java:114) ~[?:?]
    at net.minecraft.network.protocol.game.ServerboundMovePlayerPacket$PosRot.handle(ServerboundMovePlayerPacket.java:16) ~[?:?]
    at net.minecraft.network.protocol.PacketUtils.lambda$ensureRunningOnSameThread$1(PacketUtils.java:56) ~[?:?]
    at net.minecraft.server.TickTask.run(TickTask.java:18) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.util.thread.BlockableEventLoop.doRunTask(BlockableEventLoop.java:149) ~[?:?]
    at net.minecraft.util.thread.ReentrantBlockableEventLoop.doRunTask(ReentrantBlockableEventLoop.java:23) ~[?:?]
    at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:1407) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.server.MinecraftServer.shouldRun(MinecraftServer.java:190) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.util.thread.BlockableEventLoop.pollTask(BlockableEventLoop.java:122) ~[?:?]
    at net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:1385) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:1378) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.util.thread.BlockableEventLoop.managedBlock(BlockableEventLoop.java:132) ~[?:?]
    at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:1456) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1261) ~[patched_1.17.1.jar:git-Airplane-43]
    at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:317) ~[patched_1.17.1.jar:git-Airplane-43]
    at java.lang.Thread.run(Thread.java:831) [?:?]
  3. Porkchop
    Porkchop
    3/5,
    Version: 0.9.0
    Crashes my server randomly with this error message:
    [14:03:07] [Server thread/ERROR]: Could not pass event ViolationEvent to Themis v0.9.0
    java.lang.ThreadDeath: null
    at java.lang.Thread.stop(Thread.java:939) [?:?]
    at net.minecraft.server.MinecraftServer.stopServer(MinecraftServer.java:939) ~[patched_1.17.jar:git-Paper-46]
    at net.minecraft.server.dedicated.DedicatedServer.stopServer(DedicatedServer.java:804) ~[patched_1.17.jar:git-Paper-46]
    at net.minecraft.server.MinecraftServer.close(MinecraftServer.java:911) ~[patched_1.17.jar:git-Paper-46]
    at org.spigotmc.WatchdogThread.run(WatchdogThread.java:161) ~[patched_1.17.jar:git-Paper-46]
  4. ZacQueralt
    ZacQueralt
    5/5,
    Version: 0.9.0
    Vey good for a new anticheat,
    cant wait to see how much it will grow and develop
  5. asters94
    asters94
    5/5,
    Version: 0.9.0
    thank you for your free plugin, :), i hope that you will keep it updated. A must have for survival/pvp servers
  6. comonier
    comonier
    5/5,
    Version: 0.9.0
    There are no words to express how great this work is. Among all the tested anti-cheats, this was the only one that has already been configured, with no false positives, no console errors, with console warns when a player tries to cheat, no unnecessary auto-bans, and action blocking hacks. Wonderful!, congratulations on the excellent work.
  7. frafol
    frafol
    4/5,
    Version: 0.9.0
    The plugin is good and it is one of the few anticheats updated to 1.17, add some more check in? There are some undetected hacks.
  8. ElectricAirplane
    ElectricAirplane
    4/5,
    Version: 0.9.0
    Excellent, but you have to add in boat fly checks and a few other movement ones. Other than that, it blocks and stops most hacks from working.
  9. ItsBirch
    ItsBirch
    5/5,
    Version: 0.9.0
    We use this for our server, definitely helps catch all the people who come in with a free client and try something, even if it doesn't catch everything, still helpful for pointing us to the people we need to keep an eye on.
  10. jaypeethegoat
    jaypeethegoat
    2/5,
    Version: 0.9.0
    the anticheat is a nice try limiting hacks on 1.17. I really understand how hard is it to make an anticheat in few days for a new version but the anticheat is kinda sloppy and gets bypassed very easily with several clients. boat fly & elytra fly still work perfectly and sometimes when the tps is low, fly & timer works as well as a result the server laggs a lot from chunk loading. also needs some work on irregural movement and packet checks. Also the speed checks on legit players are insanely wrong
    1. Olexorus
      Author's Response
      Please read the plugin page, neither boat fly nor elytra fly are supported yet, that's not a bug or bypass, it's simply a feature I didn't have time to implement yet, and I don't advertise anything else on the plugin page.