{"id":122650,"date":"2026-06-07T08:04:44","date_gmt":"2026-06-07T05:04:44","guid":{"rendered":"https:\/\/vpesports.com\/minecraft\/mods\/playerculling\/"},"modified":"2026-06-07T08:04:44","modified_gmt":"2026-06-07T05:04:44","slug":"playerculling","status":"publish","type":"mod","link":"https:\/\/vpesports.com\/minecraft\/mods\/playerculling\/","title":{"rendered":"PlayerCulling"},"content":{"rendered":"<p># PlayerCulling<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/imgur.com\/wjxP6Wh.png\" alt=\"logo\" width=\"200\"><\/p>\n<p>![GitHub tag (latest by date)](https:\/\/github.com\/MinceraftMC\/PlayerCulling)<br \/>\n![AGPLv3 License](https:\/\/opensource.org\/license\/agpl-v3\/)<br \/>\n![Status Alpha](https:\/\/img.shields.io\/badge\/Status-Alpha-red?style=flat-square)<br \/>\n![Discord](https:\/\/discord.gg\/zC8xjtSPKC)<\/p>\n<p>## Description<\/p>\n<p>PlayerCulling is an anti-cheat plugin and mod for Minecraft servers. It prevents players from seeing other players<br \/>\nthrough walls using cheats. It utilizes a unique allocationless asynchronous voxel stepping-faced-ray-casting algorithm.<\/p>\n<p>## Features<\/p>\n<p>&#8211; Asynchronous, multithreaded culling<br \/>\n&#8211; Allocationsless voxel raycasting algorithm<br \/>\n&#8211; Advanced scheduler system<br \/>\n&#8211; Support for nametag visibility, potions, glowing and spectating<br \/>\n&#8211; 2x2x2-scale voxel occlusion for non-full blocks<br \/>\n&#8211; Efficient storage of occlusion block data<br \/>\n&#8211; Nearly instant block updates<br \/>\n&#8211; Easily enable\/disable culling globally\/per-player<\/p>\n<details>\n<summary><strong>Scheduler Overview<\/strong><\/summary>\n<p>PlayerCulling uses a custom multi-threaded culling execution system. Using this system, PlayerCulling is able to scale<br \/>\naccording to server load, and can cull both very few players and very many players, as long as enough CPU is available.<br \/>\nThe scheduler will dynamically start\/stop threads (&#8220;containers&#8221;) based on how many threads are needed.<\/p>\n<p>To limit the amount of resources PlayerCulling can use, see the thread limit in the plugin configuration.<br \/>\nBy default it limits itself to (number of CPU threads \/ 3).<\/p>\n<p>Here are some examples on how the PlayerCulling scheduler works.<br \/>\nThe following examples were tested on an arch linux desktop environment with an AMD Ryzen 5 3600X CPU:<\/p>\n<ul>\n<li>\n<details>\n<summary>One Container<\/summary>\n<p>One container is able to handle the load of 42 players without many problems.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/imgur.com\/aImcHRU.gif\" alt=\"One cull container with a few players\" width=\"600\" loading=\"lazy\"><br \/>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary>Two Containers<\/summary>\n<p>If the load increases, the scheduler will automatically create a second<br \/>\ncontainer and distribute the players to maintain a buffer. In this example, a total of 55 players are together in an area.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/imgur.com\/WskzbWA.gif\" alt=\"Two cull containers with a few more players\" width=\"600\" loading=\"lazy\"><br \/>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary>Cleanup of Containers<\/summary>\n<p>If a container is no longer used because the load decreased, it gets parked first.<br \/>\nAfter its time-to-live (TTL) runs out because the load didn&#8217;t increase again,<br \/>\nit will get cleaned up automatically.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/imgur.com\/ahP2Ynm.gif\" alt=\"One cull container which gets cleaned up after its TTL expires\" width=\"600\" loading=\"lazy\"><br \/>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary>Heavy Load<\/summary>\n<p>The scheduling system is theoretically able to scale to an infinite amount of containers.<br \/>\nAs long as the load increases (and the limit of containers hasn&#8217;t been reached yet), the scheduler<br \/>\nwill automatically continue to add more containers. In this example, a total of 112 players are together in an area.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/imgur.com\/Z1Gkxxd.gif\" alt=\"A lot of cull containers with a lot of players\" width=\"600\" loading=\"lazy\"><br \/>\n<\/details>\n<\/li>\n<li>\n<details>\n<summary>Merging of Containers<\/summary>\n<p>If the load of multiple containers is too low, they will be<br \/>\nmerged together after a few seconds.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/imgur.com\/qqFvxk2.gif\" alt=\"A few cull containers with low load get merged into a single cull container\" width=\"600\" loading=\"lazy\"><br \/>\n<\/details>\n<\/li>\n<\/ul>\n<\/details>\n<details>\n<summary><strong>Performance Overview<\/strong><\/summary>\n<p>Using this view you can keep track of PlayerCulling&#8217;s performance.<\/p>\n<p>The first bossbar shows info about the container with the highest load and general<br \/>\ncontainer scheduling statistics:<\/p>\n<p>&#8211; The count of **R**unning containers<br \/>\n&#8211; The count of **P**arked containers<br \/>\n&#8211; The count of total container **T**hreads<br \/>\n&#8211; The count of total **R**aysteps per cull tick<\/p>\n<p>The second bossbar shows the load of the occlusion world cache,<br \/>\nthe working threads, amount of **C**ompleted tasks,<br \/>\namount of **S**tored chunks and the chunk cache size in bytes.<\/p>\n<p>The third bossbar shows info about culled players. The maximum amount<br \/>\nof culled players can be calculated by (playercount) * (playercount &#8211; 1).<\/p>\n<p>In this example, a total of 112 players are together in an area. The server was running in an arch linux desktop<br \/>\nenvironment with an AMD Ryzen 5 3600X CPU.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/imgur.com\/3cFkBec.gif\" alt=\"Performance overview with 42 players\" width=\"600\" loading=\"lazy\"><br \/>\n<\/details>\n<p>### Supported Software<\/p>\n<p>| Server Version | Paper | Folia | Fabric |<br \/>\n|:&#8212;&#8212;&#8212;&#8212;&#8211;:|:&#8212;&#8211;:|:&#8212;&#8211;:|:&#8212;&#8212;:|<br \/>\n|    1.21.11     |   \u2705   |   \u2705   |   \u2705    |<br \/>\n|    1.21.10     |   \u2705   |   \u2705   |   \u2705    |<br \/>\n|     1.21.9     |   \u2705   |   \u2705   |   \u2705    |<br \/>\n|     1.21.8     |   \u2705   |   \u2705   |   \u2705    |<br \/>\n|     1.21.7     |   \u2705   |   \u2705   |   \u2705    |<br \/>\n|     1.21.6     |   \u2705   |   \u2705   |   \u2705    |<br \/>\n|     1.21.5     |   \u2705   |   \u2705   |   \u2705    |<br \/>\n|     1.21.4     |   \u2705   |   \u2705   |   \u2705    |<br \/>\n|     1.21.3     |   \u2705   |   \u274c   |   \u274c    |<br \/>\n|     1.21.2     |   \u2705   |   \u274c   |   \u274c    |<br \/>\n|     1.21.1     |   \u2705   |   \u274c   |   \u274c    |<br \/>\n|      1.21      |   \u2705   |   \u274c   |   \u274c    |  <\/p>\n<p>#### Dependencies on Fabric:<\/p>\n<p>&#8211; Fabric API<\/p>\n<p>## Usage<\/p>\n<p>PlayerCulling can be installed like any other bukkit plugin.<br \/>\nPlace the jar file in your `plugins` directory. On Fabric as well, just place the jar file and the dependencies listed<br \/>\nabove in your<br \/>\n`mods` directory and restart your server.<\/p>\n<p>### Configuration<\/p>\n<p>After the first start, PlayerCulling will automatically create a configuration file. On paper under<br \/>\n`plugins\/PlayerCulling\/config.yml` or on Fabric `config\/playerculling.yml`. In there, you are able to configure the<br \/>\nfollowing options:<\/p>\n<p>&#8211; `config-version`: Don&#8217;t touch this<br \/>\n&#8211; `scheduler`:<br \/>\n    &#8211; `max-threads`: The maximum amount of threads allowed to use (default: `cpu threads \/ 3`)<br \/>\n    &#8211; `cleanup-interval`: The interval to check for cleanup of threads in seconds (default: `30`)<br \/>\n    &#8211; `container-ttl`: The time-to-live of unused threads (default: `30`)<br \/>\n    &#8211; `max-cull-time`: The maximum time a thread is allowed to have in milliseconds (default: `45`)<br \/>\n    &#8211; `max-transfer-factor`: If the load percentage of a thread is below this factor, it is allowed to accept more tasks<br \/>\n      from other overloaded threads (default: `0.7`)<br \/>\n    &#8211; `max-merge-factor`: If the combined load percentage of two threads is below this factor, the two threads are<br \/>\n      allowed to merge together (default: `0.5`)<br \/>\n&#8211; `culling`:<br \/>\n    &#8211; `nametag-visibility-distance`: The distance in blocks PlayerCulling will check for nametag visibility. Set to `0` to<br \/>\n      ignore nametags completely (default: `64`, vanilla)<br \/>\n    &#8211; `blacklisted_worlds`: A list of worlds where PlayerCulling should be disabled (default: `[]`)<br \/>\n&#8211; `updater`:<br \/>\n    &#8211; `enabled`: Enables\/disables the update checker (default: `true`)<br \/>\n    &#8211; `notify-admins`: Whether to notify admins about new PlayerCulling releases (default: `true`)<br \/>\n    &#8211; `interval-hours`: The update check interval in hours (default: `24`)<br \/>\n&#8211; `waypoint-mode`: The mode for the waypoint system, see the [Locator Bar \/ Waypoints](#locator-bar&#8211;waypoints) section<br \/>\n  for more information. (default: `HIDDEN`)<\/p>\n<p>Note: If you&#8217;re not sure what a configuration option does, it&#8217;s best to leave it at its default value.<\/p>\n<p>### Locator Bar \/ Waypoints<\/p>\n<p>The locator bar was introduced in Minecraft 1.21.6 and allows players to see the direction of other players. As this<br \/>\nwould reveal the real location of players and defeat the purpose of PlayerCulling, PlayerCulling will disable all player<br \/>\nrelated waypoints by default. If you still want to use the locator bar, you can use the `waypoint-mode` option in the<br \/>\nconfiguration file, see below for more info.<\/p>\n<p><b>Note: Players can still triangulate the real X and Z coordinates of players, use the `hidden` mode to prevent<br \/>\nthis<\/b><br \/>\n<\/b><\/p>\n<p>The following modes are available:<\/p>\n<p>| Mode             | Description                                                                                                   |<br \/>\n|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;|<br \/>\n| `HIDDEN`         | PlayerCulling will disable all player related waypoints (default)                                             |<br \/>\n| `AZIMUTH`        | PlayerCulling will send the angle between players to the viewer                                               |<br \/>\n| `CULLED_AZIMUTH` | PlayerCulling will send the angle between players to the viewer, if the other player is visible to the viewer |<br \/>\n| `VANILLA`        | The locator bar will not be changed by PlayerCulling, this makes PlayerCulling effectively useless            |<\/p>\n<p>### Permissions<\/p>\n<p>| Permission                    | Description                                                                                                                                                                                    |<br \/>\n|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;|<br \/>\n| `playerculling.update-notify` | If not disabled, players with this permission will receive update notifications                                                                                                                |<br \/>\n| `playerculling.bypass`        | Players with this permission will be ignored by PlayerCulling and therefore be able to always see anyone. Use commands (`\/playerculling toggle`) or API instead of this permission if possible |<\/p>\n<p>See the table below for command permissions.<\/p>\n<p>### Commands<\/p>\n<p>| Command                                                                                                                                                                                   | Description                                                                                                                                                                                                                                   | Permission                                                                                                   |<br \/>\n|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;|&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;|<br \/>\n| `\/playerculling blockdebug [raw] [block]` <br \/>  `\/playerculling blockdebug [block]`                                                                                                       | Checks the occluding status of a block in sight of the target entity or specified by the `block` argument. The `raw` argument specifies, if `true` get status from minecraft world, if `false` get status from PlayerCulling occlusion cache. | `playerculling.command.blockdebug`                                                                           |<br \/>\n| `\/playerculling chunkcache`                                                                                                                                                               | Gives information about the stored chunks in the PlayerCulling occlusion cache. If the executor is an entity, you will get more information about the entity&#8217;s chunk.                                                                         | `playerculling.command.chunkcache`                                                                           |<br \/>\n| `\/playerculling chunksizes`                                                                                                                                                               | Gives the byte size of each chunk in the executors world. You can click on a chunky entry to teleport.                                                                                                                                        | `playerculling.command.chunksizes`                                                                           |<br \/>\n| `\/playerculling cleancontainers [force]`                                                                                                                                                  | Triggers the cleanup process manually. The `force` argument decides if you check for the ttl or not.                                                                                                                                          | `playerculling.command.cleancontainers`                                                                      |<br \/>\n| `\/playerculling viewcontainers`                                                                                                                                                           | Toggles the view of the container scheduler. It shows the status, load and player count. Please note: The boss bar count is limited by your gui size, minecraft only renders boss bars over one third of the windows size.                    | `playerculling.command.viewcontainers`                                                                       |<br \/>\n| `\/playerculling hidden`                                                                                                                                                                   | Shows the hidden list of the executor.                                                                                                                                                                                                        | `playerculling.command.hidden`                                                                               |<br \/>\n| `\/playerculling performance`                                                                                                                                                              | Toggles the view of the PlayerCulling performance, overall occlusion cache size, and culled players count. Please note: The boss bar count is limited by your gui size, minecraft only renders boss bars over one third of the windows size.  | `playerculling.command.performance`                                                                          |<br \/>\n| `\/playerculling raycastdebug <target-player> [showRay]` <br \/> `\/playerculling raycastdebug <target-player> [blocks]` <br \/> `\/playerculling raycastdebug <target-player> [blocks] [showRay]` | Checks if the executor can see the `target-player`, the executor must be a player. The `showRay` argument enables particles of the rays. The `blocks` arguments prints all checked blocks in the ray.                                         | `playerculling.command.raycastdebug`                                                                         |<br \/>\n| `\/playerculling reloadconfig`                                                                                                                                                             | Reloads the configuration.                                                                                                                                                                                                                    | `playerculling.command.reloadconfig`                                                                         |<br \/>\n| `\/playerculling toggle global [enabled]` <br \/> `\/playerculling toggle player <player-list> [enabled]`                                                                                      | Toggles PlayerCulling either for a `player-list` or `global`. The `enabled` argument can be used to always enable (`true`) or disable (`false`) PlayerCulling for the target -> no toggle.                                                    | `playerculling.command.toggle`, `playerculling.command.toggle.global`, `playerculling.command.toggle.player` |<\/p>\n<p>Note: `[&#8230;]` is an optional argument, `<...>` is a required argument<\/p>\n<p>PlayerCulling uses brigadier for commands which means command blocks and datapacks are also able to use these commands.<br \/>\nAdditionally, this also means `\/execute` can recognize these commands and you are able to change the executor\/location<br \/>\nof the executed command. For example:<\/p>\n<p>&#8211; `\/execute as Notch run playerculling hidden` will show you the hidden players of the player `Notch`, if online<br \/>\n&#8211; `\/execute as @a run playerculling hidden` will show you the hidden players of everyone online<\/p>\n<p>### API setup<\/p>\n<p>`PlayerCulling` has to be added as a dependency to the `plugin.yml` regardless of the build system used. On Fabric add<br \/>\n`playerculling` to the `fabric.mod.json` file.<\/p>\n<details>\n<summary><strong>Maven<\/strong><\/summary>\n<p>&#8220;`xml<\/p>\n<p><repositories><br \/>\n    <repository><br \/>\n        <id>minceraft<\/id><br \/>\n        <url>https:\/\/repo.minceraft.dev\/releases\/<\/url><br \/>\n    <\/repository><br \/>\n<\/repositories><br \/>\n&#8220;`<\/p>\n<p>&#8220;`xml<\/p>\n<p><dependencies><br \/>\n    <dependency><br \/>\n        <groupId>de.pianoman911<\/groupId><br \/>\n        <artifactId>playerculling-api<\/artifactId><br \/>\n        <version>2.1.4-SNAPSHOT<\/version><br \/>\n        <scope>provided<\/scope><br \/>\n    <\/dependency><br \/>\n<\/dependencies><br \/>\n&#8220;`<\/p>\n<\/details>\n<details>\n<summary><strong>Gradle (groovy)<\/strong><\/summary>\n<p>&#8220;`groovy<br \/>\nrepositories {<br \/>\n    maven {<br \/>\n        url = &#8216;https:\/\/repo.minceraft.dev\/releases\/&#8217;<br \/>\n        name = &#8216;minceraft&#8217;<br \/>\n    }<br \/>\n}<\/p>\n<p>dependencies {<br \/>\n    compileOnly &#8216;de.pianoman911:playerculling-api:2.1.4-SNAPSHOT&#8217;<br \/>\n}<br \/>\n&#8220;`<\/p>\n<\/details>\n<details>\n<summary><strong>Gradle (kotlin)<\/strong><\/summary>\n<p>&#8220;`kotlin<br \/>\nrepositories {<br \/>\n    maven(&#8220;https:\/\/repo.minceraft.dev\/releases\/&#8221;) {<br \/>\n        name = &#8220;minceraft&#8221;<br \/>\n    }<br \/>\n}<\/p>\n<p>dependencies {<br \/>\n    compileOnly(&#8220;de.pianoman911:playerculling-api:2.1.4-SNAPSHOT&#8221;)<br \/>\n}<br \/>\n&#8220;`<\/p>\n<\/details>\n<p>### API usage<\/p>\n<p>Basic paper plugin example:<\/p>\n<p>&#8220;`java<br \/>\npublic class ExamplePlugin extends JavaPlugin {<\/p>\n<p>    @Override<br \/>\n    public void onEnable() {<br \/>\n        \/\/ this loads the player culling api from bukkit&#8217;s services manager<br \/>\n        PlayerCullingApi api = Bukkit.getServicesManager().load(PlayerCullingApi.class);<\/p>\n<p>        \/\/ example: disable culling for the player &#8220;Notch&#8221;, if online<br \/>\n        Player player = Bukkit.getPlayer(&#8220;Notch&#8221;);<br \/>\n        if (player != null) {<br \/>\n            api.setCullingEnabled(player.getUniqueId(), false);<br \/>\n        }<br \/>\n    }<br \/>\n}<br \/>\n&#8220;`<\/p>\n<p>Basic fabric mod example:<\/p>\n<p>&#8220;`java<br \/>\npublic class ExampleMod implements ModInitializer {<\/p>\n<p>    @Override<br \/>\n    public void onInitialize() {<br \/>\n        FabricLoader.getInstance().getObjectShare().whenAvailable(&#8220;playerculling:api&#8221;, (__, obj) -> {<br \/>\n            if (!(obj instanceof PlayerCullingApi api)) {<br \/>\n                return;<br \/>\n            }<br \/>\n            \/\/ Toggle global culling<br \/>\n            api.setCullingEnabled(false);<br \/>\n        });<br \/>\n    }<br \/>\n}<br \/>\n&#8220;`<\/p>\n<p>## Building<\/p>\n<p>1. Clone the project (`git clone https:\/\/github.com\/MinceraftMC\/PlayerCulling.git`)<br \/>\n2. Go to the cloned directory (`cd PlayerCulling`)<br \/>\n3. Build the jar (`.\/gradlew build` on Linux\/MacOS, `gradlew build` on Windows)<\/p>\n<p>The PlayerCulling jars can be found in the `build` \u2192 `libs` directory.<\/p>\n<p>### Contributing<\/p>\n<p>If you want to contribute to PlayerCulling, feel free to fork the repository and create a pull request.<br \/>\nPlease make sure to follow the code style and conventions used in the project. If you have any questions or need help,<br \/>\nfeel free to ask in our Discord.<\/p>\n<p>You can test your changes by running `.\/gradlew plugin-paper:runServer` or `.\/gradlew platform-fabric:runServer`. This<br \/>\nwill start a local development server with the compiled plugin or mod automatically installed. This can be combined with<br \/>\nthe debugger of your IDE. <br \/>\nPlease note that the update checker will be automatically disabled when running in a development environment.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A culling paper\/folia plugin and fabric mod designed to prevent players from seeing each other through walls using cheats.<\/p>\n","protected":false},"featured_media":122651,"template":"","meta":{"_minecraft_slug":"playerculling","_minecraft_project_id":"CI9dvSKN","_minecraft_author":"booky10","_minecraft_license":"AGPL-3.0-or-later","_minecraft_downloads":17582,"_minecraft_follows":41,"_minecraft_client_side":"unsupported","_minecraft_server_side":"required","_minecraft_storage_type":"zip","_minecraft_archive_name":"playerculling.zip","_minecraft_size_bytes":20849311,"_minecraft_version_count":18,"_minecraft_updated_at":"2026-05-16T00:52:25.278578Z","_minecraft_date_created":"2025-06-17T08:15:41.734622Z","_minecraft_date_modified":"2026-02-14T22:42:02.171464Z","_minecraft_project_url":"https:\/\/modrinth.com\/mod\/playerculling","_minecraft_icon_attachment_id":122651,"_minecraft_imported_at":"2026-06-07T05:04:45+00:00","_minecraft_import_hash":"4b558a16740745c92b0e65ad39bd0e5d","_minecraft_versions":"","_minecraft_links":"","_minecraft_gallery":"","_minecraft_api_metadata":""},"mod_category":[97,125,89,126,127,128,92],"mod_loader":[99,131,132,133],"minecraft_version":[62,37,40,41,73,74,38,78,79,80,81,82],"class_list":["post-122650","mod","type-mod","status-publish","has-post-thumbnail","hentry","mod_category-fabric","mod_category-folia","mod_category-game-mechanics","mod_category-management","mod_category-paper","mod_category-purpur","mod_category-utility","mod_loader-fabric","mod_loader-folia","mod_loader-paper","mod_loader-purpur","minecraft_version-1-21","minecraft_version-1-21-1","minecraft_version-1-21-10","minecraft_version-1-21-11","minecraft_version-1-21-2","minecraft_version-1-21-3","minecraft_version-1-21-4","minecraft_version-1-21-5","minecraft_version-1-21-6","minecraft_version-1-21-7","minecraft_version-1-21-8","minecraft_version-1-21-9"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>PlayerCulling - Minecraft<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vpesports.com\/minecraft\/mods\/playerculling\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PlayerCulling - Minecraft\" \/>\n<meta property=\"og:description\" content=\"A culling paper\/folia plugin and fabric mod designed to prevent players from seeing each other through walls using cheats.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vpesports.com\/minecraft\/mods\/playerculling\/\" \/>\n<meta property=\"og:site_name\" content=\"Minecraft\" \/>\n<meta property=\"og:image\" content=\"https:\/\/imgur.com\/wjxP6Wh.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/playerculling\\\/\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/playerculling\\\/\",\"name\":\"PlayerCulling - Minecraft\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/playerculling\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/playerculling\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/playerculling-icon-096e405f198ea676c36abef23b5c1d15090c9641_96.webp\",\"datePublished\":\"2026-06-07T05:04:44+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/playerculling\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/playerculling\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/playerculling\\\/#primaryimage\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/playerculling-icon-096e405f198ea676c36abef23b5c1d15090c9641_96.webp\",\"contentUrl\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/playerculling-icon-096e405f198ea676c36abef23b5c1d15090c9641_96.webp\",\"width\":96,\"height\":96},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/playerculling\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mods\",\"item\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"PlayerCulling\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/\",\"name\":\"Minecraft\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"PlayerCulling - Minecraft","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vpesports.com\/minecraft\/mods\/playerculling\/","og_locale":"en_US","og_type":"article","og_title":"PlayerCulling - Minecraft","og_description":"A culling paper\/folia plugin and fabric mod designed to prevent players from seeing each other through walls using cheats.","og_url":"https:\/\/vpesports.com\/minecraft\/mods\/playerculling\/","og_site_name":"Minecraft","og_image":[{"url":"https:\/\/imgur.com\/wjxP6Wh.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/vpesports.com\/minecraft\/mods\/playerculling\/","url":"https:\/\/vpesports.com\/minecraft\/mods\/playerculling\/","name":"PlayerCulling - Minecraft","isPartOf":{"@id":"https:\/\/vpesports.com\/minecraft\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/playerculling\/#primaryimage"},"image":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/playerculling\/#primaryimage"},"thumbnailUrl":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/playerculling-icon-096e405f198ea676c36abef23b5c1d15090c9641_96.webp","datePublished":"2026-06-07T05:04:44+00:00","breadcrumb":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/playerculling\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vpesports.com\/minecraft\/mods\/playerculling\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/vpesports.com\/minecraft\/mods\/playerculling\/#primaryimage","url":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/playerculling-icon-096e405f198ea676c36abef23b5c1d15090c9641_96.webp","contentUrl":"https:\/\/vpesports.com\/minecraft\/wp-content\/uploads\/2026\/06\/playerculling-icon-096e405f198ea676c36abef23b5c1d15090c9641_96.webp","width":96,"height":96},{"@type":"BreadcrumbList","@id":"https:\/\/vpesports.com\/minecraft\/mods\/playerculling\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vpesports.com\/minecraft\/"},{"@type":"ListItem","position":2,"name":"Mods","item":"https:\/\/vpesports.com\/minecraft\/mods\/"},{"@type":"ListItem","position":3,"name":"PlayerCulling"}]},{"@type":"WebSite","@id":"https:\/\/vpesports.com\/minecraft\/#website","url":"https:\/\/vpesports.com\/minecraft\/","name":"Minecraft","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vpesports.com\/minecraft\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod\/122650","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod"}],"about":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/types\/mod"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/media\/122651"}],"wp:attachment":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/media?parent=122650"}],"wp:term":[{"taxonomy":"mod_category","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_category?post=122650"},{"taxonomy":"mod_loader","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_loader?post=122650"},{"taxonomy":"minecraft_version","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/minecraft_version?post=122650"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}