Skip to content

xGinko/AnarchyExploitFixes

Repository files navigation

bstats

AnarchyExploitFixes

MIT License Build Status CodeFactor Grade Github Downloads Join the Discord

Stargazers Forks Watchers

Ko-Fi Donations

AnarchyExploitFixes is a Paper plugin attempting to fix all major exploits affecting anarchistic Minecraft servers. It is designed for high configurability and performance.

Contact

Join the Discord:

Join the Discord

Servers using AnarchyExploitFixes:

(Add your server in a pull request)

constantiam.net (70-80), 5b5t.org (50-150), 6b6t.org (50-150), openanarchy.org (40-150), endcrystal.me (10-50), 6g6s.org (10-50), scfanarchy.ggs.gg (0-3), 22b22t.tk (8-40), 2b2t.com.ar (10-50), f3f5.org (5-24), alacity.net (20-50), oldmate.sydney (5-20), play.basedmc.club (5-16), 2b2t.pl (5-15), mc.zedanarchy.org (5-15), mc.omada.cafe (5-10), new-places.ru (5-20), mc.arch.lol (500-600)

Downloads

Downloads can be obtained from the modrinth page or the actions tab.

Requirements

  • PacketEvents - To be able to prevent packet exploits. Without it, the plugin cannot enable.

Building from source

First, clone this repository.

Then run the following command in the root directory:

./gradlew clean build

Notice

Please note that some exploits have already been patched by LPX AntiPacketExploit and Panilla, meaning they are most likely not included. It is recommended to use those alongside AEF to patch the majority of exploits.

Commands

These commands can only be executed from console or by opped players.

  • /aef reload - Reload the config
  • /aef bytesize mainhand/inventory (player) - Show bytesize of a held item or inventory
  • /aef datavalue - (1.12 Relevant) Get the data value for the item you're holding to add it to the remove list
  • /aef elytra - See who is flying on an elytra.
  • /aef geared - See how many players have armor or are new.
  • /aef lag - artificially lag the server for testing. Every time you run the command the server freezes for 1 second by default, add milliseconds to the end of the command for custom time.
  • /aef version - Plugin version.

Features

This list does not include all features, check the config for all features!

All features listed here can be disabled or enabled in the config.

  • Prevent NoCom exploit. - Prevent the 'NoCom' coordinate exploit
  • Prevent a new lag exploit where fireworks can bring tps down to single digits.
  • Prevent BowBomb exploit. - Prevent an exploit where bows can instantly kill a player.
  • Prevent Burrow hack - Where you step inside a block so crystals can't do any damage.
  • Prevent BoatFly exploit - Prevent the Futureclient / Rusherhack BoatFly exploit.
  • Prevent Book-ban - All characters still work! The size of each page is just limited to 255 bytes (customizable). This allows to fill the whole page with latin characters. Characters that use more bytes such as Chinese may be limited in length.
  • Prevent unbreakable Packet elytra fly.
  • Prevent PacketFly exploit.
  • Prevent end gateway crash exploit. - https://www.youtube.com/watch?v=c5nVBQeYo-I
  • Patch end portal dupe. - https://www.youtube.com/watch?v=n-fN6txZNgc
  • Prevent Y256 dispenser crash exploit. - https://www.youtube.com/watch?v=XL17P87O6xA
  • Anti-Illegal system:
    • Remove/revert illegal items: banned items, overstacked items, higher enchanted items, items with illegal datavalues, incompatible enchanted items (eg Silk Touch & Fortune on the same item), inapplicable enchanted items (unenchantables), Spawneggs and unbreakable items and all shulkers containing them.
    • Remove illegal blocks that have been placed in the world. Supports removal of non-natural spawners too!
  • Limit speed of snowballs to prevent clientside lag.
  • Limit crafting table autorecipe speed to prevent a lag exploit.
  • Prevent all coordinate exploits related to teleporting by vanishing a player right before they are teleported.
  • Prevent destroying end portal frames.
  • Prevent multiple end dragons from being created.
  • Prevent portal traps - Teleport a player back to the original portal if they're trapped for too long.
  • Automatically fill in the bedrock floor/roof if the bedrock has been broken.
  • Prevent players from going below the bedrock floor by teleporting them up. - Useful so people can't elytra fly below the world.
  • Remove wither heads automatically to prevent lag. - Removes on chunk load, unload or after a customizable alive time
  • Option to disable wither spawning at spawn. - Disabled by default.
  • Prevent chunk ban exploit. - Checks how much of each block is in a chunk.
  • Prevent chat spam. - Delay between messages, Max messages per a certain time, separate link delay, character limit, and more!
  • Prevent god mode exploit. - Prevent most godmode exploits, please note, there could still be bypasses.
  • Prevent invalid names. - Disallow login from players with invalid characters/too long of a name.
  • Prevent command signs. - Prevent players from right-clicking signs that have been placed with a command attached. For example, from a backdoor.
  • Limit falling blocks per chunk to prevent lag.
  • Limit exp bottles per chunk to prevent lag.
  • Prevent projectiles from going through portals, shooting projectiles through portals can get them stuck in the same place on the other side, once they are loaded the server can crash.
  • Prevent too many vehicles (eg. minecarts, boats) in chunks.
  • Prevent bed-traps. - Disabled by default. Teleports players back to original location when they have been standing in a portal for too long.
  • Prevent nether roof access. - Disabled by default.
  • Prevent placing blocks on nether roof
  • Option to disable chests on donkeys. - This is unlike IllegalStack's, no items will drop if the chest is broken. Useful to prevent many dupe exploits, Disabled by default.
  • Option to prevent donkeys from going through portals. - Useful to prevent many dupe exploits, disabled by default.
  • Option to mask all kick messages. - Change every kick message to "You have lost connection to the server", or whichever you specify. Disabled by default.
  • Option to enable first join message. - Disabled by default.
  • Command whitelist - Useful for only allowing commands that you want to be allowed, so players can't find your plugins. Disabled by default.
  • Elytra speed limits for old and new chunks, and bursting settings for when tps is high.
  • Elytra action bar to show players the speed they are going and speed limit.
  • Rate-limit levers - Disabled by default. Prevent lag by spamming levers.
  • Options to disable certain game features at specific TPS. Redstone, Elytra, Explosions, Falling Blocks.
  • Bedrock Filler - Option to automatically fill overworld bedrock floor, nether bedrock floor and nether bedrock ceiling.

Config options

Missing config options will now automatically add themselves with every update without the config resetting.

This config was created on a 1.20.6 Paper server, default entries will vary based on server type and version.

config.yml
config-version: 1.1

##############
#  Language  #
##############
language:
  # The default language that will be used if auto-language is set to false 
  # or no matching language file was found.
  default-language: en_us
  # If set to true, will display messages based on client language.
  auto-language: true

#############
#  General  #
#############
general:
  # The time in ticks (1 sec = 20 ticks) a checked tps will be cached 
  # by the plugin.
  max-tps-check-interval-in-ticks: 20
  # In case packet modules are causing trouble, you can disable them here.
  disable-all-packet-listeners: false
  # The Y-level at which the nether ceiling generates the last layer of bedrock 
  # on your server.
  nether-ceiling-y: 127
  # A server restart is required when changing a command's enable status!
  commands:
    say:
      enable: false
      # Uses MiniMessage format: https://docs.advntr.dev/minimessage/format.html.
      format: '<gray>SERVER: <gold>%message%'
    help:
      # Help command that shows a small command overview for players.
      enable: false
    toggleconnectionmsgs:
      # If you don't use join leave/messages, you can set this to false.
      enable: true

###################
#  Miscellaneous  #
###################
misc:
  join-leave-messages:
    # If you want to hide yourself or someone else when logging
    # into the game, use these permissions:
    # aef.silentJoin, aef.silentLeave
    enable: true
    # If set to true, players will see join/leave messages by default 
    # and enter /toggleconnectionmsgs to disable them. 
    # If set to false will work the other way around.
    connection-messages-on-by-default: true
    show-in-console: false
    first-join-messages:
      # Configure message in lang folder.
      # You can hide yourself and other players using the permission:
      # aef.silentJoin
      enable: false
      show-in-console: true
  kicks:
    # Configure mask message in lang folder.
    mask-kick-messages: false
    prevent-message-kick:
      # Cancels the kick for specific kick messages.
      enable: false
      kick-messages-to-listen-to:
      - Kicked for spamming
      - Stop spamming!
  auto-bed:
    # Re-enables SPIGOT-5988, also known as 'auto-bed'
    # From Minecraft version 1.16 (≈June 2020) to version 1.17.1(≈October 2021)
    # there was a bug (SPIGOT-5988) which did not reset the respawn point of the
    # player after death, if his bed was blocked with a shulker.
    # After dying a second time, the player will be back at his bed again.
    # This bug persisted from the Spigot server to Paper and all its forks until
    # October 2021, after which it was fixed by the Spigot development team.
    # Attempts by players to reach out to Spigot to allow them to disable the patch
    # that fixes the SPIGOT-5988 bug have failed.
    # Demonstration of how the patch works:
    # https://www.youtube.com/watch?v=3y5SbQXzMss
    enable: false

##########
#  Chat  #
##########
chat:
  command-whitelist:
    # This will make it pretty much impossible to find your plugins as
    # only the commands you specify will be able to work.
    # Allow bypass using permission: aef.bypass.commandwhitelist
    enable: false
    # Will show logs when a command was denied.
    log: false
    # Enable only if you have problems with the default commandwhitelist. 
    # Otherwise not recommended to use.
    use-packets: false
    # Add all commands you WANT your players to be able to access 
    # WITHOUT the '/'. Not case sensitive.
    whitelisted-commands:
    - help
    - vote
    - kill
    - discord
    - togglechat
    - toggleconnectionmsgs
    - toggletells
    - togglewhispering
    - toggleprivatemsgs
    - ignore
    - ignorelist
    - ignorehard
    - toggledeathmsg
    - dmt
    - worldstats
    - stats
    - tps
    - msg
    - whisper
    - w
    - m
    - t
    - pm
    - tell
    - r
    - reply
    - last
    # Add all subcommands you DON'T want your players to be able 
    # to access. Case sensitive!
    blacklisted-subcommands:
    - help about
    - vote List
    - vote Best
    - vote Total
    - worldstats reload
    - stats reload
  prevent-scanning-server-plugins:
    # Prevents hacked clients running .plugins to find out what plugins 
    # the server is using. 
    # Recommended to use in combination with command whitelist.
    enable: true

############
#  Elytra  #
############
elytra:
  # NOTE: Set nocheatplus horizontal elytra settings to 500 or higher.
  elytra-speed:
    # The period in ticks players will be checked to determine their speed.
    check-period-ticks: 10
    # If set to false, will only calculate 2-Dimensional speed without taking height 
    # changes into consideration.
    calculate-3D-speed: false
    # Display info in Actionbar while flying.
    display-actionbar: true
    # Inform flying player if they are in old or new chunks.
    display-chunk-info-in-actionbar: true
    # Plays XP pickup sound to alert players when theyre going above the limit.
    play-sound-when-too-fast: true
    sound: ENTITY_EXPERIENCE_ORB_PICKUP
    # Recommended to leave false if you dont experience any issues.
    teleport-instead-of-canceling-movement: false
    Global-Settings:
      # Global settings. If nothing else is enabled, this will be used for all environments.
      enable: true
      # Can be slow with a lot of players. Enable only if needed.
      use-bypass-permission: false
      deny-elytra-usage: false
      speed-old-chunks: 1.81
      speed-new-chunks: 1.81
      enable-bursting: true
      burst-speed-old-chunks: 5.0
      burst-speed-old-chunk-TPS: 18.0
      burst-speed-new-chunks: 3.12
      burst-speed-new-chunk-TPS: 19.0
      deny-elytra-on-low-TPS: true
      deny-elytra-TPS: 12.0
      also-remove-elytra-on-low-TPS: true
    At-Spawn:
      # Use separate values for players at spawn.
      enable: false
      # Radius in blocks around 00 that should count as spawn.
      radius: 3000
      # Can be slow with a lot of players. Enable only if needed.
      use-bypass-permission: false
      deny-elytra-usage: false
      speed-old-chunks: 1.0
      speed-new-chunks: 0.8
      deny-elytra-on-low-TPS: true
      deny-elytra-TPS: 10.0
      also-remove-elytra-on-low-TPS: true
    Nether-Ceiling:
      # Use separate values for players above the nether ceiling.
      enable: true
      # Can be slow with a lot of players. Enable only if needed.
      use-bypass-permission: false
      deny-elytra-usage: false
      speed-old-chunks: 0.5
      speed-new-chunks: 0.5
      enable-bursting: true
      burst-speed-old-chunks: 1.0
      burst-speed-old-chunk-TPS: 18.0
      burst-speed-new-chunks: 1.0
      burst-speed-new-chunk-TPS: 18.0
      deny-elytra-on-low-TPS: true
      deny-elytra-TPS: 12.0
      also-remove-elytra-on-low-TPS: true
  packet-elytra-fly:
    # Patches the future/rusherhack/kamiblue 2b2t elytra fly exploit.
    patch-packet-elytra-fly: false
    # The fly exploit causes the player to constantly toggle gliding. 
    # If too many glide toggles occur within a timeframe, they are 
    # most likely using PacketFly. 
    # Still may trigger false positives when players are jumping and 
    # sprinting with elytra equipped, so recommended to play around 
    # with the values.
    max-elytra-opens-per-time: 25
    # Time in seconds a elytra open count will be remembered by the plugin.
    time-in-seconds: 8

##################
#  Chunk Limits  #
##################
chunk-limits:
  entity-limits:
    dropped-item-limit:
      # Limit the amount of dropped items in a chunk to combat lag. 
      # Be aware this does not prioritize items by value or anything, 
      # it just deletes whatever happens to get over the limit during 
      # counting.
      enable: false
      log-removals: true
      max-dropped-items-per-chunk: 200
      # The delay in ticks the plugin will wait after an item in a chunk 
      # has dropped before the check logic will run. 
      # This improves performance as there will be no check for each single 
      # item entity that spawns.
      post-item-drop-check-delay-ticks: 60
      # The period in ticks in which all loaded chunks should be regularly 
      # checked. Keep in mind: A lower number provides more accuracy but is 
      # also worse for performance.
      check-period-in-ticks: 1200
      # Runs item check when a chunk is loaded.
      check-on-chunk-load: true
      whitelist-specific-item-types: false
      # Check the paper api for correct Material enums: 
      # https://jd.papermc.io/paper/1.20.6/org/bukkit/Material.html 
      # Make sure your minecraft version is matching as well.
      whitelisted-types:
      - BLACK_SHULKER_BOX
      - BLUE_SHULKER_BOX
      - BROWN_SHULKER_BOX
      - CYAN_SHULKER_BOX
      - GRAY_SHULKER_BOX
      - GREEN_SHULKER_BOX
      - LIGHT_BLUE_SHULKER_BOX
      - LIGHT_GRAY_SHULKER_BOX
      - LIME_SHULKER_BOX
      - MAGENTA_SHULKER_BOX
      - ORANGE_SHULKER_BOX
      - PINK_SHULKER_BOX
      - PURPLE_SHULKER_BOX
      - RED_SHULKER_BOX
      - SHULKER_BOX
      - WHITE_SHULKER_BOX
      - YELLOW_SHULKER_BOX
    tile-entity-limit:
      # Limit the amount of tile entities in a chunk to prevent lag.
      enable: false
      log-removals: true
      max-tile-entities-per-chunk: 100
      check-period-in-ticks: 20
    villager-limit:
      enable: false
      max-villagers-per-chunk: 25
      log-removals: false
      # Check all chunks every x ticks.
      check-period-in-ticks: 600
      # Professions that are in the top of the list are going to be scheduled 
      # for removal first.
      removal-priority:
      - NONE
      - NITWIT
      - SHEPHERD
      - FISHERMAN
      - BUTCHER
      - CARTOGRAPHER
      - LEATHERWORKER
      - FLETCHER
      - MASON
      - FARMER
      - ARMORER
      - TOOLSMITH
      - WEAPONSMITH
      - CLERIC
      - LIBRARIAN
    non-living-limit:
      # Limit the amount of non living entities in a chunk to prevent lag. 
      # Ignores dropped items.
      enable: false
      log-removals: true
      max-non-living-per-chunk: 100
      check-period-in-ticks: 20
    custom-limit:
      # Limit specific entity types per chunk.
      enable: false
      log-removals: true
      # Check all loaded chunks every x ticks.
      check-period-in-ticks: 1200
      chunk-age-skip:
        enable: true
        # How long a chunk has to have been inhabited for it to be checked. 
        # 1 second = 20 ticks.
        min-age-in-ticks: 800
      # When a chunk is loaded, entities inside of it are not necessarily 
      # loaded as well. Force loading is worse for performance, but there 
      # might be a scenario where this turns out to be useful.
      forceload-entities: false
      # Check the paper api for correct EntityType enums: 
      # https://jd.papermc.io/paper/1.20.6/org/bukkit/entity/EntityType.html 
      # Make sure your minecraft version is matching as well.
      limited-types:
        ALLAY: 20
        ARROW: 20
        AXOLOTL: 10
        BAT: 3
        BEE: 15
        BLAZE: 10
        CAT: 10
        CAVE_SPIDER: 10
        CHICKEN: 10
        COD: 6
        COW: 10
        CREEPER: 10
        DOLPHIN: 4
        DONKEY: 10
        DROWNED: 10
        ENDERMAN: 10
        ENDERMITE: 3
        EVOKER: 15
        FIREBALL: 5
        FOX: 10
        FROG: 20
        GLOW_SQUID: 20
        GOAT: 10
        GUARDIAN: 20
        HOGLIN: 10
        HORSE: 10
        HUSK: 10
        IRON_GOLEM: 15
        LLAMA: 10
        MAGMA_CUBE: 10
        MOOSHROOM: 10
        MULE: 10
        OCELOT: 3
        PANDA: 5
        PARROT: 10
        PHANTOM: 10
        PIG: 10
        PIGLIN: 25
        PIGLIN_BRUTE: 10
        PILLAGER: 15
        POLAR_BEAR: 5
        PUFFERFISH: 3
        RABBIT: 5
        RAVAGER: 15
        SALMON: 6
        SHEEP: 10
        SILVERFISH: 3
        SKELETON: 10
        SKELETON_HORSE: 10
        SLIME: 10
        SMALL_FIREBALL: 5
        SNOWBALL: 5
        SPIDER: 10
        SQUID: 20
        STRAY: 10
        STRIDER: 3
        TADPOLE: 20
        TRADER_LLAMA: 10
        TROPICAL_FISH: 6
        TURTLE: 20
        VEX: 15
        VINDICATOR: 15
        WANDERING_TRADER: 10
        WITCH: 15
        WITHER: 16
        WITHER_SKELETON: 10
        WITHER_SKULL: 10
        WOLF: 10
        ZOGLIN: 10
        ZOMBIE: 10
        ZOMBIE_HORSE: 10
        ZOMBIE_VILLAGER: 25
        ZOMBIFIED_PIGLIN: 20
  vehicle-limit:
    # Limit the amount of vehicles to prevent some lag machines. 
    # ex. dispenser that spawns a lot of boats into a single location 
    # then hitting it, causing all boats to explode in every direction.
    enable: false
    log-removals: false
    max-vehicles-per-chunk: 25
    # 200 ticks = 10 seconds.
    check-period-in-ticks: 400
  falling-block-limit:
    # Prevent players from placing massive sand chunks, then collapsing 
    # them to kill the server.
    enable: true
    log: false
    # Removes any falling block if there is more than x blocks actively 
    # falling in a chunk.
    max-falling-gravity-blocks-per-chunk: 60
    # Delay in ticks until the same chunk can be checked again. 
    # Prevents overchecking, because physics events can be called many 
    # times in a short time for the same chunk.
    chunk-check-delay-in-ticks: 20
  block-limit:
    enable: false
    # Attempt to prevent ChunkBan / Client FPS Lag
    max-blocks-per-chunk:
      ACACIA_HANGING_SIGN: 8
      ACACIA_SIGN: 8
      ACACIA_WALL_HANGING_SIGN: 8
      ACACIA_WALL_SIGN: 8
      BAMBOO_HANGING_SIGN: 8
      BAMBOO_SIGN: 8
      BAMBOO_WALL_HANGING_SIGN: 8
      BAMBOO_WALL_SIGN: 8
      BEACON: 32
      BIRCH_HANGING_SIGN: 8
      BIRCH_SIGN: 8
      BIRCH_WALL_HANGING_SIGN: 8
      BIRCH_WALL_SIGN: 8
      BLACK_BANNER: 12
      BLACK_WALL_BANNER: 12
      BLUE_BANNER: 12
      BLUE_WALL_BANNER: 12
      BROWN_BANNER: 12
      BROWN_WALL_BANNER: 12
      CHEST: 500
      CREEPER_HEAD: 16
      CREEPER_WALL_HEAD: 16
      CRIMSON_HANGING_SIGN: 8
      CRIMSON_SIGN: 8
      CRIMSON_WALL_HANGING_SIGN: 8
      CRIMSON_WALL_SIGN: 8
      CYAN_BANNER: 12
      CYAN_WALL_BANNER: 12
      DARK_OAK_HANGING_SIGN: 8
      DARK_OAK_SIGN: 8
      DARK_OAK_WALL_HANGING_SIGN: 8
      DARK_OAK_WALL_SIGN: 8
      DISPENSER: 100
      DRAGON_HEAD: 16
      DRAGON_WALL_HEAD: 16
      ENCHANTING_TABLE: 16
      ENDER_CHEST: 64
      GLOWSTONE: 5000
      GRAY_BANNER: 12
      GRAY_WALL_BANNER: 12
      GREEN_BANNER: 12
      GREEN_WALL_BANNER: 12
      JUNGLE_HANGING_SIGN: 8
      JUNGLE_SIGN: 8
      JUNGLE_WALL_HANGING_SIGN: 8
      JUNGLE_WALL_SIGN: 8
      LIGHT_BLUE_BANNER: 12
      LIGHT_BLUE_WALL_BANNER: 12
      LIGHT_GRAY_BANNER: 12
      LIGHT_GRAY_WALL_BANNER: 12
      LIME_BANNER: 12
      LIME_WALL_BANNER: 12
      MAGENTA_BANNER: 12
      MAGENTA_WALL_BANNER: 12
      MANGROVE_HANGING_SIGN: 8
      MANGROVE_SIGN: 8
      MANGROVE_WALL_HANGING_SIGN: 8
      MANGROVE_WALL_SIGN: 8
      MOVING_PISTON: 32
      OAK_HANGING_SIGN: 8
      OAK_SIGN: 8
      OAK_WALL_HANGING_SIGN: 8
      OAK_WALL_SIGN: 8
      ORANGE_BANNER: 12
      ORANGE_WALL_BANNER: 12
      PIGLIN_HEAD: 16
      PIGLIN_WALL_HEAD: 16
      PINK_BANNER: 12
      PINK_WALL_BANNER: 12
      PISTON: 32
      PISTON_HEAD: 32
      PLAYER_HEAD: 16
      PLAYER_WALL_HEAD: 16
      PURPLE_BANNER: 12
      PURPLE_WALL_BANNER: 12
      RED_BANNER: 12
      RED_WALL_BANNER: 12
      SLIME_BLOCK: 128
      SPRUCE_HANGING_SIGN: 8
      SPRUCE_SIGN: 8
      SPRUCE_WALL_HANGING_SIGN: 8
      SPRUCE_WALL_SIGN: 8
      STICKY_PISTON: 32
      TRAPPED_CHEST: 200
      WARPED_HANGING_SIGN: 8
      WARPED_SIGN: 8
      WARPED_WALL_HANGING_SIGN: 8
      WARPED_WALL_SIGN: 8
      YELLOW_BANNER: 12
      YELLOW_WALL_BANNER: 12
      ZOMBIE_HEAD: 16
      ZOMBIE_WALL_HEAD: 16
  minecart-limit:
    # Limit the amount of minecarts to prevent lag caused by collisions.
    enable: false
    log-removals: false
    max-minecarts-per-chunk: 25
    check-period-in-ticks: 400
  exp-bottle-limit:
    # Prevent players from crashing the server or other players by 
    # creating a ton of THROWN_EXP_BOTTLE entities, then loading 
    # them at once. 
    # Does not limit the EXP_ORBS, just the bottle entities.
    enable: true
    log: false
    max-exp-bottle-per-chunk: 25
    # 20 ticks = 1 second
    check-period-in-ticks: 800

#####################
#  Lag Preventions  #
#####################
lag-preventions:
  keep-stash-chunks-loaded:
    # Idea by 6g6s admin kumorio: 
    # Improves lag generated by large stash chunks constantly loading and 
    # unloading by setting them force loaded. This might cause increased ram 
    # usage, so keep an eye out for that.
    enable: false
    log: false
    # How many container blocks have to be in a chunk for it to be seen 
    # as a stash chunk to keep force loaded.
    container-block-threshold: 50
    # The minimum time in ticks a chunk has to have been inhabited to be checked.
    min-chunk-inhabited-time-ticks: 1000
    # The time in minutes a stash chunks will be kept force loaded before 
    # setting it back to normal.
    keep-loaded-minutes: 120
    # Set to false if you want to check more blocks than just tile entities. 
    # Makes the overall speed of the module faster if set to true.
    only-check-tile-entities: true
    container-types:
    - CHISELED_BOOKSHELF
    - DECORATED_POT
    - CHEST
    - FURNACE
    - JUKEBOX
    - SHULKER_BOX
    - WHITE_SHULKER_BOX
    - ORANGE_SHULKER_BOX
    - MAGENTA_SHULKER_BOX
    - LIGHT_BLUE_SHULKER_BOX
    - YELLOW_SHULKER_BOX
    - LIME_SHULKER_BOX
    - PINK_SHULKER_BOX
    - GRAY_SHULKER_BOX
    - LIGHT_GRAY_SHULKER_BOX
    - CYAN_SHULKER_BOX
    - PURPLE_SHULKER_BOX
    - BLUE_SHULKER_BOX
    - BROWN_SHULKER_BOX
    - GREEN_SHULKER_BOX
    - RED_SHULKER_BOX
    - BLACK_SHULKER_BOX
    - HOPPER
    - DISPENSER
    - DROPPER
    - LECTERN
    - TRAPPED_CHEST
    - CRAFTER
    - BREWING_STAND
    - BARREL
    - SMOKER
    - BLAST_FURNACE
    # Radiuses around spawn in chunks (not blocks) that should not be checked.
    # Worlds not on this list are exempt from all checking.
    worlds:
      world: 100
      world_the_end: 100
      world_nether: 100
  target-distance-limits:
    enable: false
    log: false
    global-limit:
      enable: false
      # The max distance no target should exceed. 
      # You want this to be higher than your highest max distance 
      # for a specific mob.
      max-target-distance: 20.0
    custom-limits:
      enable: true
      entities:
        SKELETON: 6.0
        WITHER: 8.0
        WITHER_SKELETON: 8.0
        ZOMBIE: 6.0
        ZOMBIE_VILLAGER: 10.0
        ZOMBIFIED_PIGLIN: 8.0
  disable-item-drops-during-large-stash-explosions:
    # Explodes containers without dropping items after a certain amount 
    # of exploded containers per chunk.
    enable: false
    log: false
    # How many container blocks in a chunk can be blown up until items 
    # no longer drop from them.
    min-explosions-before-drops-disable: 6
    # The time in seconds to wait after an explosion for another one to happen. 
    # If no explosion happens within x seconds after the first one, the count resets to 0.
    time-in-seconds: 3
    container-types:
    - CHISELED_BOOKSHELF
    - DECORATED_POT
    - CHEST
    - FURNACE
    - JUKEBOX
    - HOPPER
    - DISPENSER
    - DROPPER
    - LECTERN
    - TRAPPED_CHEST
    - CRAFTER
    - BREWING_STAND
    - BARREL
    - SMOKER
    - BLAST_FURNACE
  prevent-lever-spam:
    # Rate Limit levers to prevent a lag exploit.
    enable: false
    show-actionbar: true
    kick-player: false
    max-lever-usages-per-time: 15
    lever-time-in-ticks: 40
  pathfinding-limits:
    enable: false
    # Only meant for debug.
    log: false
    global-limit:
      enable: false
      # The max distance no mob pathfinding should exceed. 
      # You always want this to be higher than your highest max distance 
      # for a specific mob.
      max-target-distance: 20.0
    custom-limits:
      enable: true
      entities:
        SKELETON: 6.0
        WITHER: 8.0
        WITHER_SKELETON: 8.0
        ZOMBIE: 6.0
        ZOMBIE_VILLAGER: 10.0
        ZOMBIFIED_PIGLIN: 8.0
  entity-age-limits:
    custom-limits:
      # Kill certain entities after a custom amount of ticks lived.
      enable: false
      log-removals: false
      # Check all loaded chunks every x ticks.
      check-period-in-ticks: 1200
      # When a chunk is loaded, entities inside of it are not necessarily 
      # loaded as well. Force loading is worse for performance, but there 
      # might be a scenario where this turns out to be useful.
      forceload-entities: false
      # Check the paper api for correct EntityType enums:
      # https://jd.papermc.io/paper/1.20/org/bukkit/entity/EntityType.html
      # Make sure your minecraft version is matching as well.
      limited-types:
        ARROW: 120
        FALLING_BLOCK: 160
        SNOWBALL: 100
        SPECTRAL_ARROW: 120
        WITHER_SKULL: 100
    projectile-limit:
      # Patches any lag exploit that abuses spawning a ton of projectile entities
      # (ex. Snowball exploit).Skips over the following entities: ENDER_PEARL, FISHING_HOOK, WITHER_SKULL
      # and ENDER_SIGNAL. You can configure those separately in the custom entity age
      # limit section.
      enable: false
      # (20 ticks = 1 second) Will not touch Ender Pearls
      max-alive-time-ticks: 300
      # How frequently we should check all projectiles for their alive time
      check-period-seconds: 20
  prevent-flooding-machines:
    # Will prevent pistons from pushing waterlogged blocks. 
    # Stops players from using waterlogged blocks and piston flying 
    # machines to generate large walls of water that generate lag 
    # due to the fluid physics.
    enable: false
    delete-waterlogged-blocks: true
  prevent-inventory-action-lag:
    # WARNING: VERY EXPERIMENTAL! 
    # Prevent lag generated by players quickly moving big items back and 
    # forth between inventories. Uses cached counters that auto-reset after 
    # the configurable time in milliseconds.
    enable: false
    log: true
    # The amount of time in milliseconds an entry is kept after writing.
    cache-time-millis: 2000
    # Use correct enums from: 
    # https://jd.papermc.io/paper/1.20/org/bukkit/event/inventory/InventoryAction.html. 
    # Format is: InventoryClickAction: AllowedClicksPerTime
    click-action-limits:
      COLLECT_TO_CURSOR: 15
      HOTBAR_SWAP: 30
      MOVE_TO_OTHER_INVENTORY: 8
  anti-shulker-drops:
    # Disables shulkers dropping stored items when blown up. 
    # This helps fix client- and serverside lag when done often and fast.
    enable: false
  prevent-inventory-open-spam:
    # Rate-limit interactions with inventory holders to prevent a lag exploit.
    enable: false
    max-interacts-per-time: 2
    time-in-ticks: 20
  physics:
    redstone:
      enable: false
      log: false
      # The radius in blocks in which activity will be grouped together and measured.
      check-radius-blocks: 1500.0
      # The time in milliseconds all related activity will be blocked if it exceeded
      # the configured limit.
      pause-time-millis: 5000
      # The time in milliseconds before a region and its data will be expired
      # if no activity has been detected.
      # For proper functionality, needs to be at least as long as your pause time.
      data-keep-time-millis: 8000
      # The TPS at which to cancel the physics entirely.
      pause-TPS: 16.0
      # The MSPT at which to cancel the physics entirely.
      pause-MSPT: 100.0
      # Maximum number of redstone events within configured timeframe.
      redstone-event-limit: 5000
    sculk-bloom:
      enable: false
      log: false
      # The radius in blocks in which activity will be grouped together and measured.
      check-radius-blocks: 1500.0
      # The time in milliseconds all related activity will be blocked if it exceeded
      # the configured limit.
      pause-time-millis: 5000
      # The time in milliseconds before a region and its data will be expired
      # if no activity has been detected.
      # For proper functionality, needs to be at least as long as your pause time.
      data-keep-time-millis: 8000
      # The TPS at which to cancel the physics entirely.
      pause-TPS: 16.0
      # The MSPT at which to cancel the physics entirely.
      pause-MSPT: 100.0
      # Maximum number of sculk bloom events within the configured timeframe.
      sculk-bloom-limit: 300
    block-spread:
      enable: false
      log: false
      # The radius in blocks in which activity will be grouped together and measured.
      check-radius-blocks: 1500.0
      # The time in milliseconds all related activity will be blocked if it exceeded
      # the configured limit.
      pause-time-millis: 5000
      # The time in milliseconds before a region and its data will be expired
      # if no activity has been detected.
      # For proper functionality, needs to be at least as long as your pause time.
      data-keep-time-millis: 8000
      # The TPS at which to cancel the physics entirely.
      pause-TPS: 16.0
      # The MSPT at which to cancel the physics entirely.
      pause-MSPT: 100.0
      # Maximum number of times a block can form due to natural causes like
      # Snow storms, mushrooms growing or cobblestone forming due to water and lava
      # within the configured timeframe before they will be paused.
      block-form-event-limit: 500
    noteblocks:
      enable: false
      log: false
      # The radius in blocks in which activity will be grouped together and measured.
      check-radius-blocks: 1500.0
      # The time in milliseconds all related activity will be blocked if it exceeded
      # the configured limit.
      pause-time-millis: 5000
      # The time in milliseconds before a region and its data will be expired
      # if no activity has been detected.
      # For proper functionality, needs to be at least as long as your pause time.
      data-keep-time-millis: 8000
      # The TPS at which to cancel the physics entirely.
      pause-TPS: 16.0
      # The MSPT at which to cancel the physics entirely.
      pause-MSPT: 100.0
      # Maximum number of times a noteblock can be played within the configured
      # timeframe before they will be disabled.
      noteblock-play-limit: 300
    explosions:
      enable: false
      log: false
      # The radius in blocks in which activity will be grouped together and measured.
      check-radius-blocks: 1500.0
      # The time in milliseconds all related activity will be blocked if it exceeded
      # the configured limit.
      pause-time-millis: 5000
      # The time in milliseconds before a region and its data will be expired
      # if no activity has been detected.
      # For proper functionality, needs to be at least as long as your pause time.
      data-keep-time-millis: 8000
      # The TPS at which to cancel the physics entirely.
      pause-TPS: 16.0
      # The MSPT at which to cancel the physics entirely.
      pause-MSPT: 100.0
      # Maximum number of explode events within configured timeframe.
      explode-event-limit: 5000
    pistons:
      enable: false
      log: false
      # The radius in blocks in which activity will be grouped together and measured.
      check-radius-blocks: 1500.0
      # The time in milliseconds all related activity will be blocked if it exceeded
      # the configured limit.
      pause-time-millis: 5000
      # The time in milliseconds before a region and its data will be expired
      # if no activity has been detected.
      # For proper functionality, needs to be at least as long as your pause time.
      data-keep-time-millis: 8000
      # The TPS at which to cancel the physics entirely.
      pause-TPS: 16.0
      # The MSPT at which to cancel the physics entirely.
      pause-MSPT: 100.0
      # Maximum number of piston extend and/or retract events
      # within the configured timeframe.
      piston-movement-limit: 300
    liquid-spread:
      enable: false
      log: false
      # The radius in blocks in which activity will be grouped together and measured.
      check-radius-blocks: 1500.0
      # The time in milliseconds all related activity will be blocked if it exceeded
      # the configured limit.
      pause-time-millis: 5000
      # The time in milliseconds before a region and its data will be expired
      # if no activity has been detected.
      # For proper functionality, needs to be at least as long as your pause time.
      data-keep-time-millis: 8000
      # The TPS at which to cancel the physics entirely.
      pause-TPS: 16.0
      # The MSPT at which to cancel the physics entirely.
      pause-MSPT: 100.0
      # Maximum number of times a physics check can be performed within the configured
      # timeframe before they will be paused.
      liquid-spread-event-limit: 1300
    block-physics:
      enable: false
      log: false
      # The radius in blocks in which activity will be grouped together and measured.
      check-radius-blocks: 1500.0
      # The time in milliseconds all related activity will be blocked if it exceeded
      # the configured limit.
      pause-time-millis: 5000
      # The time in milliseconds before a region and its data will be expired
      # if no activity has been detected.
      # For proper functionality, needs to be at least as long as your pause time.
      data-keep-time-millis: 8000
      # The TPS at which to cancel the physics entirely.
      pause-TPS: 16.0
      # The MSPT at which to cancel the physics entirely.
      pause-MSPT: 100.0
      # Maximum number of times a physics check can be performed within the configured
      # timeframe before they will be paused.
      block-physics-event-limit: 900

#############
#  Patches  #
#############
patches:
  anti-book-ban:
    enable: false
    # If set to false, will use UTF-8. 
    # Charset to use to encode the result of NBTCompound#toString into 
    # a sequence of bytes. The length of that sequence is then used to 
    # get the approximate Byte-size of an ItemStack. 
    # Use the /aef bytesize command to get a better understanding.
    use-UTF-16: false
    max-book-size: 56000
    # Kicks players when they try to create a book bigger than the limit.
    kick-on-too-large-book-edit: true
    max-author-chars: 32
    max-title-chars: 32
    max-pages: 100
    max-item-size: 56000
    max-inventory-size: 2050000
    # How long in ticks a dropped item's size should be cached after 
    # checking.
    dropped-items-size-cache-ticks: 120
    # How long in ticks a player's inventory size should be cached after 
    # checking.
    player-inventory-size-cache-ticks: 20
  prevent-command-sign:
    # Patch signs that have run_command NBT tags attached, allowing the 
    # to run a command with operator permissions on click. 
    # Recommended to enable if you had a rogue admin or backdoor incident.
    enable: true
  pearl-phase:
    # Attempts to patch a pearl phasing exploit by cancelling the teleport
    # if the pearl is thrown at or near a specific block type.
    enable: false
    # How many blocks around the teleport location should be searched
    # for potential glitch blocks if the teleport location isn't one itself.
    search-radius: 2
    glitchy-materials:
    - ACACIA_PRESSURE_PLATE
    - ACACIA_SLAB
    - ACACIA_TRAPDOOR
    - ANDESITE_SLAB
    - BAMBOO_MOSAIC_SLAB
    - BAMBOO_PRESSURE_PLATE
    - BAMBOO_SLAB
    - BAMBOO_TRAPDOOR
    - BIRCH_PRESSURE_PLATE
    - BIRCH_SLAB
    - BIRCH_TRAPDOOR
    - BLACKSTONE_SLAB
    - BRICK_SLAB
    - CALIBRATED_SCULK_SENSOR
    - CHERRY_PRESSURE_PLATE
    - CHERRY_SLAB
    - CHERRY_TRAPDOOR
    - COBBLED_DEEPSLATE_SLAB
    - COBBLESTONE_SLAB
    - COBWEB
    - COPPER_TRAPDOOR
    - CRIMSON_PRESSURE_PLATE
    - CRIMSON_SLAB
    - CRIMSON_TRAPDOOR
    - CUT_COPPER_SLAB
    - CUT_RED_SANDSTONE_SLAB
    - CUT_SANDSTONE_SLAB
    - DARK_OAK_PRESSURE_PLATE
    - DARK_OAK_SLAB
    - DARK_OAK_TRAPDOOR
    - DARK_PRISMARINE_SLAB
    - DEEPSLATE_BRICK_SLAB
    - DEEPSLATE_TILE_SLAB
    - DIORITE_SLAB
    - END_STONE_BRICK_SLAB
    - EXPOSED_COPPER_TRAPDOOR
    - EXPOSED_CUT_COPPER_SLAB
    - GRANITE_SLAB
    - HEAVY_WEIGHTED_PRESSURE_PLATE
    - IRON_TRAPDOOR
    - JUNGLE_PRESSURE_PLATE
    - JUNGLE_SLAB
    - JUNGLE_TRAPDOOR
    - LIGHT_WEIGHTED_PRESSURE_PLATE
    - MANGROVE_PRESSURE_PLATE
    - MANGROVE_SLAB
    - MANGROVE_TRAPDOOR
    - MOSSY_COBBLESTONE_SLAB
    - MOSSY_STONE_BRICK_SLAB
    - MUD_BRICK_SLAB
    - NETHER_BRICK_SLAB
    - OAK_PRESSURE_PLATE
    - OAK_SLAB
    - OAK_TRAPDOOR
    - OXIDIZED_COPPER_TRAPDOOR
    - OXIDIZED_CUT_COPPER_SLAB
    - PETRIFIED_OAK_SLAB
    - POLISHED_ANDESITE_SLAB
    - POLISHED_BLACKSTONE_BRICK_SLAB
    - POLISHED_BLACKSTONE_PRESSURE_PLATE
    - POLISHED_BLACKSTONE_SLAB
    - POLISHED_DEEPSLATE_SLAB
    - POLISHED_DIORITE_SLAB
    - POLISHED_GRANITE_SLAB
    - POLISHED_TUFF_SLAB
    - POWDER_SNOW
    - PRISMARINE_BRICK_SLAB
    - PRISMARINE_SLAB
    - PURPUR_SLAB
    - QUARTZ_SLAB
    - RED_NETHER_BRICK_SLAB
    - RED_SANDSTONE_SLAB
    - SANDSTONE_SLAB
    - SCULK_SENSOR
    - SCULK_SHRIEKER
    - SMOOTH_QUARTZ_SLAB
    - SMOOTH_RED_SANDSTONE_SLAB
    - SMOOTH_SANDSTONE_SLAB
    - SMOOTH_STONE_SLAB
    - SPRUCE_PRESSURE_PLATE
    - SPRUCE_SLAB
    - SPRUCE_TRAPDOOR
    - STONE_BRICK_SLAB
    - STONE_PRESSURE_PLATE
    - STONE_SLAB
    - TUFF_BRICK_SLAB
    - TUFF_SLAB
    - WARPED_PRESSURE_PLATE
    - WARPED_SLAB
    - WARPED_TRAPDOOR
    - WAXED_COPPER_TRAPDOOR
    - WAXED_CUT_COPPER_SLAB
    - WAXED_EXPOSED_COPPER_TRAPDOOR
    - WAXED_EXPOSED_CUT_COPPER_SLAB
    - WAXED_OXIDIZED_COPPER_TRAPDOOR
    - WAXED_OXIDIZED_CUT_COPPER_SLAB
    - WAXED_WEATHERED_COPPER_TRAPDOOR
    - WAXED_WEATHERED_CUT_COPPER_SLAB
    - WEATHERED_COPPER_TRAPDOOR
    - WEATHERED_CUT_COPPER_SLAB
    # We will have to schedule the check on folia, meaning theres a chance
    # the task might take longer than expected. To make sure that does not cause
    # more lag, we set a time limit here.
    check-timeout-millis: 800
  map-cursor-lag-patch:
    # Patches the famous stacked map cursor lag that causes both 
    # client and server crashes.
    enable: false
  prevent-fast-world-teleport-crash:
    # Prevents crash methods that involve very fast teleporting between 
    # different worlds in a short time.
    enable: false
    # Time in milliseconds until an entity can teleport to another 
    # world again.
    teleport-delay-millis: 1000
    log: false
  prevent-teleport-coordinate-exploit:
    # Patches coordinate exploit for teleportation commands such as /tpa,
    # /home AS WELL as respawn exploits. 
    # This is done by vanishing the player for x ticks before teleporting.
    enable: false
    min-distance-to-vanish-player: 100
    teleport-vanish-time-in-ticks: 10
  # Removes entities or players if they are invalid, dead or not located
  # within a ticking chunk. Not sure if this works.
  experimental-godmode-patch: false
  tab-complete-crash-patch:
    # Patches two lag exploits and an instant server shutdown exploit that 
    # works by sending a malicious TabComplete packet that triggers a 
    # StackOverflowError inside the TagParser class.
    enable: true
    log: false
    kick-player: false
  remove-beehive-coordinates:
    # Patches an exploit that allows players to obtain another player's 
    # coordinates by trading them for Beehives or Beenests. 
    # If the traded item contains any bees, the stored bee's NBT data can 
    # then be read from the item. 
    # This data includes, but is not limited to: 
    # - XYZ coordinates of where the bee has its hive 
    # - XYZ of the bee's last coordinates before entering it's hive 
    # - XYZ coordinates of where the bee last visited a flower 
    # - XYZ coordinates of where the bee was first spawned into existence 
    # - UID of the world the bee was first spawned into existence
    enable: true
    # The NBT tags to filter from the item. These are the Keys that hold 
    # the position data. You may add more tags you want removed here.
    tags:
    - Pos
    - HivePos
    - FlowerPos
    - Paper.Origin
    - Paper.OriginWorld
    - WorldUUIDMost
    - WorldUUIDLeast
  window-click-crash-patch:
    # Patches a variety of different lag and crash methods that work 
    # by sending invalid Window Click packets, causing the server to 
    # dump error logs until it runs out of memory.
    enable: true
    log: false
    kick-player: false
  sequence-crash-patch:
    # Patches a variety of lag/crash exploits that involves sending packets 
    # with invalid sequences.
    enable: true
    log: false
    kick-player: false
  sign-lag:
    # Patches a lag exploit that involves sending specific oversized 
    # sign edit packets.
    enable: true
    # Vanilla limit is 384 characters per line, which can be too much.
    line-character-limit: 80
    # General char limit for all lines combined.
    total-char-limit: 384
    log: false
    kick-player: false
  beehive-crash-patch:
    # Patches a server crash exploit exclusive to Purpur servers. 
    # This exploit works due to PurpurClient having a feature that 
    # lets clients request stored data of a clicked beehive from 
    # the server. The server does not check how far the clicked 
    # beehive is away from the client enabling a malicious sender 
    # to load chunks very fast at far away locations by telling 
    # the server it clicked a beehive there.
    enable: true
    max-distance: 24
    log: false
    kick-player: false

##############
#  Illegals  #
##############
illegals:
  remove-placed-blocks:
    on-chunkload:
      # Remove illegally placed blocks on chunkload.
      enable: false
      # Enter PLAYER_HEAD here if you want to remove placed playerheads.
      blocks-to-remove:
      - PLAYER_HEAD
      - CHAIN_COMMAND_BLOCK
      - COMMAND_BLOCK
      - COMMAND_BLOCK_MINECART
      - REPEATING_COMMAND_BLOCK
      - BEDROCK
      - BARRIER
      exempted-worlds:
      - exampleworld1
      - exampleworld2
      pause-on-low-TPS: false
      pause-TPS: 14.0
    periodically:
      enable: false
      # Enter PLAYER_HEAD here if you want to remove placed playerheads.
      blocks-to-remove:
      - PLAYER_HEAD
      - CHAIN_COMMAND_BLOCK
      - COMMAND_BLOCK
      - COMMAND_BLOCK_MINECART
      - REPEATING_COMMAND_BLOCK
      - BEDROCK
      - BARRIER
      exempted-worlds:
      - exampleworld1
      - exampleworld2
      check-period-in-seconds: 10
      pause-on-low-TPS: false
      pause-TPS: 14.0
  remove-unnatural-spawners-on-chunkload:
    enable: false
    pause-on-low-TPS: false
    pause-TPS: 14.0
    # You can add or remove as much world names here as you want.
    natural-spawner-types-per-world:
      world:
      - SKELETON
      - ZOMBIE
      - SILVERFISH
      - SPIDER
      - CAVE_SPIDER
      world_the_end:
      - SKELETON
      - SPIDER
      world_nether:
      - BLAZE
      - MAGMA_CUBE
  enchantments:
    higher-enchants:
      # Bypass permission: aef.bypass.illegal.enchants.higher
      # Reverts or prevents usage of ItemStacks with Enchantments higher
      # than the natural, in vanilla survival obtainable level (aka 32ks / 255s).
      enable: false
      # Enable this if you have problems with the plugin removing items from chest guis.
      # Check if the inventory is connected to a location in the game.
      # If it is not, its very likely created by custom gui plugin.
      # Enable this if you have problems with the plugin removing items from chest guis.
      # Check if the inventory is connected to a location in the game.
      # If it is not, its very likely created by custom gui plugin.
      gui-plugins-supported: false
      # Available options:
      # STRICT - Deletes or reverts illegals even on chest open
      # ACTION_ON_USE - Deletes or reverts illegals when interacted with
      # PREVENT_USE_ONLY - Only prevents usage of illegals if possible
      handling: PREVENT_USE_ONLY
      # Prevents Hopper32k mechanic of placing a shulker containing illegals 
      # on top of a hopper, then using the illegal out of the hoppers inventory. 
      # WARNING: Hooks into InventoryMoveItemEvent, which can become VERY resource 
      # intense as the event fires for every single item getting moved by the 
      # hopper. Enable only if you need to.
      prevent-hopper32k-mechanic: false
      check-on-chunkload:
        # WARNING: CHECKING ON CHUNKLOAD IS NOT RECOMMENDED AS IT IS VERY RESOURCE INTENSE. 
        # BE VERY SURE YOU ACTUALLY NEED THIS. 
        # Iterates over all blocks in a chunk when it is loaded and checks any inventories 
        # for illegals. If a container with illegals is found, it will be REMOVED.
        enable: false
        # If set to true, immediately replaces the container with air. Otherwise, will try 
        # to handle items separately.
        remove-container: false
      check-stored-items: false
      only-specific-enchants: false
      specific-enchants:
      - DIG_SPEED
      item-whitelist-enabled: true
      use-as-blacklist-instead: false
      whitelisted-items:
      - GOLDEN_APPLE
    incompatible-enchants:
      # Bypass permission: aef.bypass.illegal.enchants.incompatible
      # Reverts or prevents usage of ItemStacks with Enchantments that
      # cannot coexist in vanilla survival minecraft.
      # Examples: A bow with mending and infinity or armor with every
      # protection enchantment.
      enable: false
      # Enable this if you have problems with the plugin removing items from chest guis.
      # Check if the inventory is connected to a location in the game.
      # If it is not, its very likely created by custom gui plugin.
      # Enable this if you have problems with the plugin removing items from chest guis.
      # Check if the inventory is connected to a location in the game.
      # If it is not, its very likely created by custom gui plugin.
      gui-plugins-supported: false
      # Available options:
      # STRICT - Deletes or reverts illegals even on chest open
      # ACTION_ON_USE - Deletes or reverts illegals when interacted with
      # PREVENT_USE_ONLY - Only prevents usage of illegals if possible
      handling: PREVENT_USE_ONLY
      # Prevents Hopper32k mechanic of placing a shulker containing illegals 
      # on top of a hopper, then using the illegal out of the hoppers inventory. 
      # WARNING: Hooks into InventoryMoveItemEvent, which can become VERY resource 
      # intense as the event fires for every single item getting moved by the 
      # hopper. Enable only if you need to.
      prevent-hopper32k-mechanic: false
      check-on-chunkload:
        # WARNING: CHECKING ON CHUNKLOAD IS NOT RECOMMENDED AS IT IS VERY RESOURCE INTENSE. 
        # BE VERY SURE YOU ACTUALLY NEED THIS. 
        # Iterates over all blocks in a chunk when it is loaded and checks any inventories 
        # for illegals. If a container with illegals is found, it will be REMOVED.
        enable: false
        # If set to true, immediately replaces the container with air. Otherwise, will try 
        # to handle items separately.
        remove-container: false
      check-stored-items: false
      item-whitelist-enabled: true
      use-as-blacklist-instead: false
      whitelisted-items:
      - BOW
    inapplicable-enchants:
      # Bypass permission: aef.bypass.illegal.enchants.inapplicable
      # Reverts or prevents usage of ItemStacks with Enchantments that
      # cannot be applied to that ItemStack in vanilla survival minecraft.
      # Examples: A helmet with sharpness or a block of stone with fortune.
      enable: false
      # Enable this if you have problems with the plugin removing items from chest guis.
      # Check if the inventory is connected to a location in the game.
      # If it is not, its very likely created by custom gui plugin.
      # Enable this if you have problems with the plugin removing items from chest guis.
      # Check if the inventory is connected to a location in the game.
      # If it is not, its very likely created by custom gui plugin.
      gui-plugins-supported: false
      # Available options:
      # STRICT - Deletes or reverts illegals even on chest open
      # ACTION_ON_USE - Deletes or reverts illegals when interacted with
      # PREVENT_USE_ONLY - Only prevents usage of illegals if possible
      handling: PREVENT_USE_ONLY
      # Prevents Hopper32k mechanic of placing a shulker containing illegals 
      # on top of a hopper, then using the illegal out of the hoppers inventory. 
      # WARNING: Hooks into InventoryMoveItemEvent, which can become VERY resource 
      # intense as the event fires for every single item getting moved by the 
      # hopper. Enable only if you need to.
      prevent-hopper32k-mechanic: false
      check-on-chunkload:
        # WARNING: CHECKING ON CHUNKLOAD IS NOT RECOMMENDED AS IT IS VERY RESOURCE INTENSE. 
        # BE VERY SURE YOU ACTUALLY NEED THIS. 
        # Iterates over all blocks in a chunk when it is loaded and checks any inventories 
        # for illegals. If a container with illegals is found, it will be REMOVED.
        enable: false
        # If set to true, immediately replaces the container with air. Otherwise, will try 
        # to handle items separately.
        remove-container: false
      check-stored-items: false
      item-whitelist-enabled: true
      use-as-blacklist-instead: false
      whitelisted-items:
      - GOLDEN_APPLE
  nbt:
    ban-custom-tags:
      # Bypass permission: aef.bypass.illegal.nbt.custom
      # Deletes items that have one or more of the configured tags.
      enable: false
      # Enable this if you have problems with the plugin removing items from chest guis.
      # Check if the inventory is connected to a location in the game.
      # If it is not, its very likely created by custom gui plugin.
      # Enable this if you have problems with the plugin removing items from chest guis.
      # Check if the inventory is connected to a location in the game.
      # If it is not, its very likely created by custom gui plugin.
      gui-plugins-supported: false
      # Available options:
      # STRICT - Deletes or reverts illegals even on chest open
      # ACTION_ON_USE - Deletes or reverts illegals when interacted with
      # PREVENT_USE_ONLY - Only prevents usage of illegals if possible
      handling: PREVENT_USE_ONLY
      # Prevents Hopper32k mechanic of placing a shulker containing illegals 
      # on top of a hopper, then using the illegal out of the hoppers inventory. 
      # WARNING: Hooks into InventoryMoveItemEvent, which can become VERY resource 
      # intense as the event fires for every single item getting moved by the 
      # hopper. Enable only if you need to.
      prevent-hopper32k-mechanic: false
      check-on-chunkload:
        # WARNING: CHECKING ON CHUNKLOAD IS NOT RECOMMENDED AS IT IS VERY RESOURCE INTENSE. 
        # BE VERY SURE YOU ACTUALLY NEED THIS. 
        # Iterates over all blocks in a chunk when it is loaded and checks any inventories 
        # for illegals. If a container with illegals is found, it will be REMOVED.
        enable: false
        # If set to true, immediately replaces the container with air. Otherwise, will try 
        # to handle items separately.
        remove-container: false
      check-stored-items: false
      # The exact, case sensitive value of the nbt tag.
      tags:
      - dmg
      item-whitelist-enabled: false
      use-as-blacklist-instead: false
      whitelisted-items:
      - GOLDEN_APPLE
    impossibly-stored-items:
      # Bypass permission: aef.bypass.illegal.nbt.storeditems
      # Prevents usage of or deletes storage items that have been pre-filled
      # with items using NBT tags. These can only be created by players with
      # creative access.
      # Most commonly dispensers, droppers and chests containing kit shulkers
      # are created but there are more combinations possible.
      enable: false
      # Enable this if you have problems with the plugin removing items from chest guis.
      # Check if the inventory is connected to a location in the game.
      # If it is not, its very likely created by custom gui plugin.
      # Enable this if you have problems with the plugin removing items from chest guis.
      # Check if the inventory is connected to a location in the game.
      # If it is not, its very likely created by custom gui plugin.
      gui-plugins-supported: false
      # Available options:
      # STRICT - Deletes or reverts illegals even on chest open
      # ACTION_ON_USE - Deletes or reverts illegals when interacted with
      # PREVENT_USE_ONLY - Only prevents usage of illegals if possible
      handling: PREVENT_USE_ONLY
      # Prevents Hopper32k mechanic of placing a shulker containing illegals 
      # on top of a hopper, then using the illegal out of the hoppers inventory. 
      # WARNING: Hooks into InventoryMoveItemEvent, which can become VERY resource 
      # intense as the event fires for every single item getting moved by the 
      # hopper. Enable only if you need to.
      prevent-hopper32k-mechanic: false
      check-on-chunkload:
        # WARNING: CHECKING ON CHUNKLOAD IS NOT RECOMMENDED AS IT IS VERY RESOURCE INTENSE. 
        # BE VERY SURE YOU ACTUALLY NEED THIS. 
        # Iterates over all blocks in a chunk when it is loaded and checks any inventories 
        # for illegals. If a container with illegals is found, it will be REMOVED.
        enable: false
        # If set to true, immediately replaces the container with air. Otherwise, will try 
        # to handle items separately.
        remove-container: false
      # The exact name of the nbt tag that signals items are stored inside.
      tag: BlockEntityTag
      check-stored-items: false
      storage-types:
      - BARREL
      - BLAST_FURNACE
      - BREWING_STAND
      - CHEST
      - CHISELED_BOOKSHELF
      - CRAFTER
      - DECORATED_POT
      - DISPENSER
      - DROPPER
      - FURNACE
      - HOPPER
      - JUKEBOX
      - LECTERN
      - SMOKER
      - TRAPPED_CHEST
    command-items:
      # Bypass permission: aef.bypass.illegal.nbt.commanditem
      # Deletes items with commands in their NBT data that run as operator.
      # These can only be created by players with creative access.
      # Most common items are books, since it allows storing multiple commands.
      enable: false
      # Enable this if you have problems with the plugin removing items from chest guis.
      # Check if the inventory is connected to a location in the game.
      # If it is not, its very likely created by custom gui plugin.
      # Enable this if you have problems with the plugin removing items from chest guis.
      # Check if the inventory is connected to a location in the game.
      # If it is not, its very likely created by custom gui plugin.
      gui-plugins-supported: false
      # Available options:
      # STRICT - Deletes or reverts illegals even on chest open
      # ACTION_ON_USE - Deletes or reverts illegals when interacted with
      # PREVENT_USE_ONLY - Only prevents usage of illegals if possible
      handling: PREVENT_USE_ONLY
      # Prevents Hopper32k mechanic of placing a shulker containing illegals 
      # on top of a hopper, then using the illegal out of the hoppers inventory. 
      # WARNING: Hooks into InventoryMoveItemEvent, which can become VERY resource 
      # intense as the event fires for every single item getting moved by the 
      # hopper. Enable only if you need to.
      prevent-hopper32k-mechanic: false
      check-on-chunkload:
        # WARNING: CHECKING ON CHUNKLOAD IS NOT RECOMMENDED AS IT IS VERY RESOURCE INTENSE. 
        # BE VERY SURE YOU ACTUALLY NEED THIS. 
        # Iterates over all blocks in a chunk when it is loaded and checks any inventories 
        # for illegals. If a container with illegals is found, it will be REMOVED.
        enable: false
        # If set to true, immediately replaces the container with air. Otherwise, will try 
        # to handle items separately.
        remove-container: false
      check-stored-items: false
  banned-item-names:
    # Bypass permission: aef.bypass.illegal.bannedname
    # Resets an item's name (or deletes the item) if it matches one of
    # the configured regexes.
    # Regexes can be complex. Use a tool like https://regex101.com/ or
    # ChatGPT for good results.
    enable: false
    # Enable this if you have problems with the plugin removing items from chest guis.
    # Check if the inventory is connected to a location in the game.
    # If it is not, its very likely created by custom gui plugin.
    # Enable this if you have problems with the plugin removing items from chest guis.
    # Check if the inventory is connected to a location in the game.
    # If it is not, its very likely created by custom gui plugin.
    gui-plugins-supported: false
    # Available options:
    # STRICT - Deletes or reverts illegals even on chest open
    # ACTION_ON_USE - Deletes or reverts illegals when interacted with
    # PREVENT_USE_ONLY - Only prevents usage of illegals if possible
    handling: PREVENT_USE_ONLY
    # Prevents Hopper32k mechanic of placing a shulker containing illegals 
    # on top of a hopper, then using the illegal out of the hoppers inventory. 
    # WARNING: Hooks into InventoryMoveItemEvent, which can become VERY resource 
    # intense as the event fires for every single item getting moved by the 
    # hopper. Enable only if you need to.
    prevent-hopper32k-mechanic: false
    check-on-chunkload:
      # WARNING: CHECKING ON CHUNKLOAD IS NOT RECOMMENDED AS IT IS VERY RESOURCE INTENSE. 
      # BE VERY SURE YOU ACTUALLY NEED THIS. 
      # Iterates over all blocks in a chunk when it is loaded and checks any inventories 
      # for illegals. If a container with illegals is found, it will be REMOVED.
      enable: false
      # If set to true, immediately replaces the container with air. Otherwise, will try 
      # to handle items separately.
      remove-container: false
    # Will delete the item instead of resetting the name.
    delete-item: false
    regex:
    - (?i)illegalstring
    whitelisted-items:
    - DIRT
  illegally-stacked-items:
    # Bypass permission: aef.bypass.illegal.overstacked
    # Prevents usage of or reverts items with a higher or lower
    # stack size than their vanilla limit.
    enable: false
    # Enable this if you have problems with the plugin removing items from chest guis.
    # Check if the inventory is connected to a location in the game.
    # If it is not, its very likely created by custom gui plugin.
    # Enable this if you have problems with the plugin removing items from chest guis.
    # Check if the inventory is connected to a location in the game.
    # If it is not, its very likely created by custom gui plugin.
    gui-plugins-supported: false
    # Available options:
    # STRICT - Deletes or reverts illegals even on chest open
    # ACTION_ON_USE - Deletes or reverts illegals when interacted with
    # PREVENT_USE_ONLY - Only prevents usage of illegals if possible
    handling: PREVENT_USE_ONLY
    # Prevents Hopper32k mechanic of placing a shulker containing illegals 
    # on top of a hopper, then using the illegal out of the hoppers inventory. 
    # WARNING: Hooks into InventoryMoveItemEvent, which can become VERY resource 
    # intense as the event fires for every single item getting moved by the 
    # hopper. Enable only if you need to.
    prevent-hopper32k-mechanic: false
    check-on-chunkload:
      # WARNING: CHECKING ON CHUNKLOAD IS NOT RECOMMENDED AS IT IS VERY RESOURCE INTENSE. 
      # BE VERY SURE YOU ACTUALLY NEED THIS. 
      # Iterates over all blocks in a chunk when it is loaded and checks any inventories 
      # for illegals. If a container with illegals is found, it will be REMOVED.
      enable: false
      # If set to true, immediately replaces the container with air. Otherwise, will try 
      # to handle items separately.
      remove-container: false
    item-whitelist-enabled: false
    use-as-blacklist-instead: true
    check-stored-items: false
    whitelisted-items:
    - TOTEM_OF_UNDYING
  ban-player-heads:
    # Bypass permission: aef.bypass.illegal.playerhead
    # Deletes or prevents usage of player heads.
    enable: false
    # Enable this if you have problems with the plugin removing items from chest guis.
    # Check if the inventory is connected to a location in the game.
    # If it is not, its very likely created by custom gui plugin.
    # Enable this if you have problems with the plugin removing items from chest guis.
    # Check if the inventory is connected to a location in the game.
    # If it is not, its very likely created by custom gui plugin.
    gui-plugins-supported: false
    # Available options:
    # STRICT - Deletes or reverts illegals even on chest open
    # ACTION_ON_USE - Deletes or reverts illegals when interacted with
    # PREVENT_USE_ONLY - Only prevents usage of illegals if possible
    handling: PREVENT_USE_ONLY
    # Prevents Hopper32k mechanic of placing a shulker containing illegals 
    # on top of a hopper, then using the illegal out of the hoppers inventory. 
    # WARNING: Hooks into InventoryMoveItemEvent, which can become VERY resource 
    # intense as the event fires for every single item getting moved by the 
    # hopper. Enable only if you need to.
    prevent-hopper32k-mechanic: false
    check-on-chunkload:
      # WARNING: CHECKING ON CHUNKLOAD IS NOT RECOMMENDED AS IT IS VERY RESOURCE INTENSE. 
      # BE VERY SURE YOU ACTUALLY NEED THIS. 
      # Iterates over all blocks in a chunk when it is loaded and checks any inventories 
      # for illegals. If a container with illegals is found, it will be REMOVED.
      enable: false
      # If set to true, immediately replaces the container with air. Otherwise, will try 
      # to handle items separately.
      remove-container: false
    # Will delete shulker/bundle if they contain any player heads.
    check-stored-items: false
  ban-specific-materials:
    # Bypass permission: aef.bypass.illegal.bannedmaterial
    # Prevents usage of or deletes items with material that you do not want
    # your players to be able to use.
    # Useful if your players have blocks that shouldn't be obtainable in survival.
    enable: false
    # Enable this if you have problems with the plugin removing items from chest guis.
    # Check if the inventory is connected to a location in the game.
    # If it is not, its very likely created by custom gui plugin.
    # Enable this if you have problems with the plugin removing items from chest guis.
    # Check if the inventory is connected to a location in the game.
    # If it is not, its very likely created by custom gui plugin.
    gui-plugins-supported: false
    # Available options:
    # STRICT - Deletes or reverts illegals even on chest open
    # ACTION_ON_USE - Deletes or reverts illegals when interacted with
    # PREVENT_USE_ONLY - Only prevents usage of illegals if possible
    handling: PREVENT_USE_ONLY
    # Prevents Hopper32k mechanic of placing a shulker containing illegals 
    # on top of a hopper, then using the illegal out of the hoppers inventory. 
    # WARNING: Hooks into InventoryMoveItemEvent, which can become VERY resource 
    # intense as the event fires for every single item getting moved by the 
    # hopper. Enable only if you need to.
    prevent-hopper32k-mechanic: false
    check-on-chunkload:
      # WARNING: CHECKING ON CHUNKLOAD IS NOT RECOMMENDED AS IT IS VERY RESOURCE INTENSE. 
      # BE VERY SURE YOU ACTUALLY NEED THIS. 
      # Iterates over all blocks in a chunk when it is loaded and checks any inventories 
      # for illegals. If a container with illegals is found, it will be REMOVED.
      enable: false
      # If set to true, immediately replaces the container with air. Otherwise, will try 
      # to handle items separately.
      remove-container: false
    check-stored-items: false
    banned-materials:
    - CHAIN_COMMAND_BLOCK
    - COMMAND_BLOCK
    - COMMAND_BLOCK_MINECART
    - REPEATING_COMMAND_BLOCK
    - BEDROCK
    - BARRIER
    - STRUCTURE_BLOCK
    - STRUCTURE_VOID
    - END_PORTAL_FRAME
    - END_PORTAL
    - NETHER_PORTAL
    - LIGHT
  revert-unbreakables:
    # Bypass permission: aef.bypass.illegal.unbreakable
    # Deletes and prevents usage of unbreakable items.
    # This can be anything from items with illegal damage attributes to
    # Metadata/NBT tags.
    # Note: Due to the limitations of the API, we can only fully prevent
    # usage of these items by deleting them.
    enable: false
    # Enable this if you have problems with the plugin removing items from chest guis.
    # Check if the inventory is connected to a location in the game.
    # If it is not, its very likely created by custom gui plugin.
    # Enable this if you have problems with the plugin removing items from chest guis.
    # Check if the inventory is connected to a location in the game.
    # If it is not, its very likely created by custom gui plugin.
    gui-plugins-supported: false
    # Available options:
    # STRICT - Deletes or reverts illegals even on chest open
    # ACTION_ON_USE - Deletes or reverts illegals when interacted with
    # PREVENT_USE_ONLY - Only prevents usage of illegals if possible
    handling: PREVENT_USE_ONLY
    # Prevents Hopper32k mechanic of placing a shulker containing illegals 
    # on top of a hopper, then using the illegal out of the hoppers inventory. 
    # WARNING: Hooks into InventoryMoveItemEvent, which can become VERY resource 
    # intense as the event fires for every single item getting moved by the 
    # hopper. Enable only if you need to.
    prevent-hopper32k-mechanic: false
    check-on-chunkload:
      # WARNING: CHECKING ON CHUNKLOAD IS NOT RECOMMENDED AS IT IS VERY RESOURCE INTENSE. 
      # BE VERY SURE YOU ACTUALLY NEED THIS. 
      # Iterates over all blocks in a chunk when it is loaded and checks any inventories 
      # for illegals. If a container with illegals is found, it will be REMOVED.
      enable: false
      # If set to true, immediately replaces the container with air. Otherwise, will try 
      # to handle items separately.
      remove-container: false
    item-whitelist-enabled: false
    use-as-blacklist-instead: false
    # Will delete shulkers and bundles if they contain unbreakables.
    check-stored-items: false
    whitelisted-items:
    - DIAMOND_CHESTPLATE
  ban-spawn-eggs:
    # Bypass permission: aef.bypass.illegal.spawnegg
    # Deletes or prevents usage of spawn eggs.
    enable: false
    # Enable this if you have problems with the plugin removing items from chest guis.
    # Check if the inventory is connected to a location in the game.
    # If it is not, its very likely created by custom gui plugin.
    # Enable this if you have problems with the plugin removing items from chest guis.
    # Check if the inventory is connected to a location in the game.
    # If it is not, its very likely created by custom gui plugin.
    gui-plugins-supported: false
    # Available options:
    # STRICT - Deletes or reverts illegals even on chest open
    # ACTION_ON_USE - Deletes or reverts illegals when interacted with
    # PREVENT_USE_ONLY - Only prevents usage of illegals if possible
    handling: PREVENT_USE_ONLY
    # Prevents Hopper32k mechanic of placing a shulker containing illegals 
    # on top of a hopper, then using the illegal out of the hoppers inventory. 
    # WARNING: Hooks into InventoryMoveItemEvent, which can become VERY resource 
    # intense as the event fires for every single item getting moved by the 
    # hopper. Enable only if you need to.
    prevent-hopper32k-mechanic: false
    check-on-chunkload:
      # WARNING: CHECKING ON CHUNKLOAD IS NOT RECOMMENDED AS IT IS VERY RESOURCE INTENSE. 
      # BE VERY SURE YOU ACTUALLY NEED THIS. 
      # Iterates over all blocks in a chunk when it is loaded and checks any inventories 
      # for illegals. If a container with illegals is found, it will be REMOVED.
      enable: false
      # If set to true, immediately replaces the container with air. Otherwise, will try 
      # to handle items separately.
      remove-container: false
    # If remove-spawn-eggs is set to true Will delete shulker/bundle 
    # should they contain any spawneggs.
    check-stored-items: false
    whitelisted-items:
    - VILLAGER_SPAWN_EGG

######################
#  Dupe Preventions  #
######################
dupe-preventions:
  # Prevent any possible dupes involving chested entities by making 
  # it impossible to put a chest on them. 
  # Only do this if you have reason to believe a dupe like that exists 
  # on your server.
  prevent-chests-on-living-entities: false
  # Closes open inventories of all entities that are in a chunk 
  # that will be unloaded.
  close-entity-inventories-on-chunk-unload: false
  # Prevents entities that can carry chests from using portals to 
  # block some common dupe tactics. 
  # CAUTION: Will remove chests and their contents from a chested 
  # entity if it touches a portal on Folia!
  prevent-chested-living-entities-in-portals: false
  # Closes open inventories of entities that disappeared when the 
  # player riding it disconnects.
  close-entity-inventories-on-player-disconnect: false

#################
#  Preventions  #
#################
preventions:
  withers:
    disable-wither-spawning-at-spawn:
      # Disables spawning withers near a configurable radius around 
      # spawn. Helps if players are generating endless amounts of withers 
      # to lag the server.
      enable: false
      inform-players: true
      worlds:
        world: 5000
        world_the_end: 5000
        world_nether: 5000
    remove-flying-wither-skulls:
      # Removes wither skulls when the chunk gets unloaded. 
      # Use if you have a ton of them at spawn and they are causing lag.
      on-chunk-unload: false
      # Removes wither skulls when the chunk gets loaded. 
      # Use if you have a ton of them at spawn and they are causing lag.
      on-chunk-load: true
      periodically-remove-all-flying-skulls:
        # Enable if a lot of wither skulls at spawn are causing lag.
        enable: false
        check-period-in-ticks: 80
    # Prevents wither skulls from being shot.
    disable-withers-from-shooting-skulls: false
    rate-limit-wither-skulls:
      # This can help combat lag caused by a ton of wither skulls 
      # spawning but weakens withers.
      enable: false
      # Cooldown until another skull can be shot at a player.
      player-target-cooldown-in-ticks: 20
      # Cooldown until another skull can be shot at anything 
      # else other than a player.
      other-target-cooldown-in-ticks: 40
      # Cooldown when wither has no target.
      no-target-cooldown-in-ticks: 100
  portals:
    prevent-specific-types:
      # Configure entities here that you suspect might be used in a dupe 
      # with portals. 
      # CAUTION: Will kill the entity on folia due to broken portal event. 
      # There is sadly no other efficient way.
      enable: true
      # Defaults prevent common lag methods.
      entities:
      - DROPPED_ITEM
      - FIREWORK
      - PRIMED_TNT
      - THROWN_EXP_BOTTLE
      - EXPERIENCE_ORB
      - ARMOR_STAND
    # Only enable if you must. Does not affect players.
    # CAUTION: Will kill the entity on folia due to broken portal event.
    prevent-all-entities-in-portals: false
    prevent-destroying-end-portals:
      enable: true
      show-logs: true
      end:
        bedrock-protection-radius-blocks: 8
        # Add block locations that should be protected as well. 
        # Format: <worldname>:<x>:<y>:<z> 
        # If you don't want to use this, just configure an empty list: 
        # pillar-blocks: []
        pillar-blocks:
        - world_the_end:143:140:-50
        - world_the_end:112:90:-90
    prevent-portal-traps:
      # Teleports a player back to the original location if they have been 
      # standing in a portal for too long.
      enable: false
      wait-time-until-tp-back-in-seconds: 10
    # Prevents a lag exploit. Might disable some chunk loader designs.
    prevent-projectiles-in-portals: false
  permanent-block-breaking:
    by-placing-piston-on-retract:
      enable: true
      whitelisted-worlds:
      - example_world_name
    by-exploding-pistons:
      enable: true
      whitelisted-worlds:
      - example_world_name
      # If enabled, will only protect portals and end gateways
      only-for-portals-and-gateways: false
    by-growing-structures:
      # Prevents removal of permanent blocks by growing structures 
      # like mushrooms into them.
      enable: true
  prevent-opped-players:
    # Useful if you suspect a backdoor has happened.
    enable: false
    log: false
    whitelisted-players:
    - Notch
  prevent-nether-roof:
    # Prevent players from going above the nether roof.
    enable: true
    safely-teleport-players: true
  anti-bed-trap:
    # Resets a players bed respawn they die too many times within 
    # a certain timeframe.
    enable: false
    # Amount of times player can die until he is determined as bed-trapped.
    max-deaths-per-time: 7
    # "Time until death counter will be reset again.
    time-in-seconds: 5
    log: false
  prevent-non-survival-players:
    # Checks if player is in survival and if not, puts him back into survival. 
    # Useful if you had a backdoor incident.
    enable: false
    log: false
    whitelisted-players:
    - Notch

############
#  Combat  #
############
combat:
  anchor-aura-delay:
    enable: false
    # Can help with desync but recommended to leave off unless needed.
    update-inventory-on-cancel: false
    place-delay-in-ticks: 8
    break-delay-in-ticks: -1
  crystal-aura:
    hotbar-switch-delay:
      enable: false
      # Delay between switching from an end crystal to other items in hotbar
      delay-in-ticks: 2
      # Only delay when switched to specific materials
      only-delay-specific-materials: true
      delayed-specific-materials:
      - BOW
      - DIAMOND_SWORD
      - DIAMOND_AXE
      - TRIDENT
      - GOLDEN_SWORD
      - GOLDEN_AXE
      - IRON_SWORD
      - IRON_AXE
      - STONE_SWORD
      - STONE_AXE
      - WOODEN_SWORD
      - WOODEN_AXE
      - BLACK_BED
      - BLUE_BED
      - BROWN_BED
      - CYAN_BED
      - GRAY_BED
      - GREEN_BED
      - LIGHT_BLUE_BED
      - LIGHT_GRAY_BED
      - LIME_BED
      - MAGENTA_BED
      - ORANGE_BED
      - PINK_BED
      - PURPLE_BED
      - RED_BED
      - WHITE_BED
      - YELLOW_BED
      - CROSSBOW
      - NETHERITE_SWORD
      - NETHERITE_AXE
    regular-delay:
      enable: false
      # Can help with desync but recommended to leave off unless needed.
      update-inventory-on-cancel: false
      # Set to -1 to disable.
      break-delay-in-ticks: 4
      place-delay-in-ticks: -1
    piston-aura-delay:
      # Rate-limits pistons that extend into crystals.
      enable: false
      piston-extend-delay-in-ticks: 40
  auto-bed:
    # As it happens, players on a server with a huge game world somehow need to travel long distances.
    # From Minecraft version 1.16 (≈June 2020) to version 1.17.1(≈October 2021) in the game there was a bug SPIGOT-5988 which did not reset the respawn point of the player after death, if his bed was blocked.
    # After some manipulations, it turned out to be a simple mechanism that allowed the player to get to the spavn by blocking his bed with a shalker before death, and after the second death to be near his bed again.
    # This bug persisted from the Spigot server to Paper and all its forks until October 2021, after which it was fixed by the Spigot development team.
    # Attempts by players to reach out to Spigot to allow them to disable the patch that fixes the SPIGOT-5988 bug have failed.
    # 
    # Demonstration of how the patch works:
    # https://www.youtube.com/watch?v=3y5SbQXzMss&feature=youtu.be
    # As it happens, players on a server with a huge game world somehow need to travel long distances.
    # From Minecraft version 1.16 (≈June 2020) to version 1.17.1(≈October 2021) in the game there was a bug SPIGOT-5988 which did not reset the respawn point of the player after death, if his bed was blocked.
    # After some manipulations, it turned out to be a simple mechanism that allowed the player to get to the spavn by blocking his bed with a shalker before death, and after the second death to be near his bed again.
    # This bug persisted from the Spigot server to Paper and all its forks until October 2021, after which it was fixed by the Spigot development team.
    # Attempts by players to reach out to Spigot to allow them to disable the patch that fixes the SPIGOT-5988 bug have failed.
    # 
    # Demonstration of how the patch works:
    # https://www.youtube.com/watch?v=3y5SbQXzMss&feature=youtu.be
    enable: false
  prevent-bow-bomb:
    enable: false
    # Fully pulled bow is ~9-10. 15 is default just to be safe.
    max-bow-squared-velocity: 15
  prevent-burrow:
    enable: false
    # 1.0 = Half a heart of damage every time you move.
    damage-when-moving: 1.0
    teleport-above-block: true
    # Prevent burrow even if there is a block above the block they 
    # are burrowing in. 
    # Please note this may allow creating an "elevator", players will 
    # keep teleporting up until they hit air.
    prevent-if-block-above-burrow: false
    break-anvil-instead-of-teleport: true
    # Needs to be enabled to prevent a bug where players are teleported 
    # above a slab when the slab is underwater.
    allow-slabs-in-burrow: true
  bed-aura-delay:
    enable: false
    # Set to -1 to disable.
    break-delay-in-ticks: 5
    place-delay-in-ticks: -1

#############
#  Bedrock  #
#############
bedrock:
  fill-in-bedrock:
    overworld-floor:
      periodically-check-and-fill:
        # Only checks loaded chunks.
        enable: false
        check-period-in-seconds: 10
        # Uses the exact name of the world's folder in your server directory.
        exempted-worlds:
        - exampleworld
        - exampleworld2
        # Pauses the task during low tps to avoid lag.
        pause-on-low-tps: true
        # The TPS at which bedrock filling will pause to avoid adding to the lag.
        pause-tps: 16.0
      fill-on-chunkload:
        enable: false
        # Recommended to leave off. Only useful if world generation is broken.
        also-check-new-chunks: false
        # Uses the exact name of the world's folder in your server directory.
        exempted-worlds:
        - exampleworld
        - exampleworld2
        pause-on-low-tps: true
        # The TPS at which bedrock filling will pause to avoid adding to the lag.
        pause-tps: 16.0
    nether-ceiling:
      periodically-check-and-fill:
        # Only checks loaded chunks.
        enable: false
        check-period-in-seconds: 10
        # Uses the exact name of the world's folder in your server directory.
        exempted-worlds:
        - exampleworld
        - exampleworld2
        pause-on-low-tps: true
        # The TPS at which bedrock filling will pause to avoid adding to the lag.
        pause-tps: 16.0
      fill-on-chunkload:
        enable: false
        # Recommended to leave off. Only useful if world generation is broken.
        also-check-new-chunks: false
        # Uses the exact name of the world's folder in your server directory.
        exempted-worlds:
        - exampleworld
        - exampleworld2
        pause-on-low-tps: true
        # The TPS at which bedrock filling will pause to avoid adding to the lag.
        pause-tps: 16.0
    nether-floor:
      periodically-check-and-fill:
        # Only checks loaded chunks.
        enable: false
        check-period-in-seconds: 10
        # Uses the exact name of the world's folder in your server directory.
        exempted-worlds:
        - exampleworld
        - exampleworld2
        pause-on-low-tps: true
        # The TPS at which bedrock filling will pause to avoid adding to the lag.
        pause-tps: 16.0
      fill-on-chunkload:
        enable: false
        # Recommended to leave off. Only useful if world generation is broken.
        also-check-new-chunks: false
        # Uses the exact name of the world's folder in your server directory.
        exempted-worlds:
        - exampleworld
        - exampleworld2
        pause-on-low-tps: true
        # The TPS at which bedrock filling will pause to avoid adding to the lag.
        pause-tps: 16.0
  prevent-going-below-bedrock-floor:
    # Prevents players from going below the bedrock floor.
    enable: true
    # Whether to make player leave their vehicle.
    leave-vehicle: true
    # Whether to close the player's elytra if they were flying.
    stop-elytra: true
    # Whether the bedrock hole should be filled or not.
    fill-bedrock-hole: true
    exempted-worlds:
    - world_the_end
    - skyblock_world
    filler-material: BEDROCK

Optimization Guide

You can find an optimization guide at the file GUIDE.md

Stars over time

Stargazers over time