Packet-based module blocking.
Server-driven feature restrictions for Flarial. Use this when a server needs to block modules without shipping a new client-side hardcoded IP check.
How it works
Flarial listens for an inbound Bedrock ScriptMessagePacket. If the packet has the expected Flarial header, the client parses the JSON payload and applies temporary server restrictions to matching modules.
- 1PacketHooks hooks inbound ScriptMessagePacket receive callbacks.
- 2The packet is wrapped in PacketEvent and dispatched through eventMgr.
- 3ServerModuleControlListener accepts only the flarial_client_event:restrict_features header.
- 4The JSON payload resolves module names through display names, aliases, and manual aliases.
- 5Matching modules receive Module::applyServerRestriction and are disabled by ModuleManager::syncState.
- 6Restrictions are cleared on Disconnect, Transfer, StartGame, or by sending an empty restriction set.
Packet format
Send a ScriptMessagePacket with this exact message id:
flarial_client_event:restrict_featuresThe message body is a JSON object. Each entry under flarial_client_modules describes one blocked module.
{
"server_name": "Example Server",
"notification_message": "This feature is disabled on this server.",
"flarial_client_modules": {
"module.freelook.name": {
"block": true,
"restriction_reason": "Freelook is disabled on this server."
},
"module.full_bright.name": {
"block": true,
"restriction_reason": "Fullbright is disabled on this server."
},
"module.crystal_optimizer.name": {
"block": true,
"restriction_reason": "Crystal Optimizer is disabled on this server."
}
}
}Examples
Block one module
{
"server_name": "Example Server",
"notification_message": "Disabled by this server.",
"flarial_client_modules": {
"module.zoom.name": { "block": true }
}
}Clear packet restrictions
{
"server_name": "Example Server",
"flarial_client_modules": {}
}Any payload replaces the current packet-driven restriction set. Sending an empty flarial_client_modules object clears existing packet restrictions.
Every blockable module
This list is synced from the dll-css module registry on origin/main. Any registered module can be blocked because the listener resolves against ModuleManager::moduleMap.
module.motion_blur.namemotion_blur, module.motion_blur.name, motionblurmodule.deepfry.namedeepfry, module.deepfry.namemodule.saturation.namesaturation, module.saturation.namemodule.patarhd.namepatarhd, module.patarhd.namemodule.dvd_screen.namedvd_screen, module.dvd_screen.name, dvdscreenmodule.fov_changer.namefov_changer, module.fov_changer.name, fovchangermodule.zoom.namezoom, module.zoom.namemodule.upside_down.nameupside_down, module.upside_down.name, upsidedownmodule.clickgui.nameclickgui, module.clickgui.namemodule.meds.namemeds, module.meds.namemodule.fps.namefps, module.fps.namemodule.cps.namecps, module.cps.namemodule.ip_display.nameip_display, module.ip_display.name, ipdisplaymodule.reach_counter.namereach_counter, module.reach_counter.name, reachcountermodule.combo.namecombo, module.combo.namemodule.ping_counter.nameping_counter, module.ping_counter.name, pingcountermodule.pot_counter.namepot_counter, module.pot_counter.name, potcountermodule.arrow_counter.namearrow_counter, module.arrow_counter.name, arrowcountermodule.item_tracker.nameitem_tracker, module.item_tracker.name, itemtrackermodule.entity_counter.nameentity_counter, module.entity_counter.name, entitycountermodule.clock.nameclock, module.clock.namemodule.memory.namememory, module.memory.namemodule.fullbright.namefullbright, module.fullbright.name, full_brightmodule.keystrokes.namekeystrokes, module.keystrokes.namemodule.toggle_sneak.nametoggle_sneak, module.toggle_sneak.name, togglesneakmodule.toggle_sprint.nametoggle_sprint, module.toggle_sprint.name, togglesprintmodule.hitbox.namehitbox, module.hitbox.name, hitboxesmodule.hurt_color.namehurt_color, module.hurt_color.name, hurtcolormodule.block_hit.nameblock_hit, module.block_hit.name, blockhitmodule.fire_height.namefire_height, module.fire_height.name, fireheightmodule.better_inventory.namebetter_inventory, module.better_inventory.name, betterinventorymodule.dynamic_lighting.namedynamic_lighting, module.dynamic_lighting.name, dynamiclightingmodule.nametag.namenametag, module.nametag.namemodule.java_dynamic_fov.namejava_dynamic_fov, module.java_dynamic_fov.name, javadynamicfovmodule.snaplook.namesnaplook, module.snaplook.namemodule.fog_color.namefog_color, module.fog_color.name, fogcolormodule.armorhud.namearmorhud, module.armorhud.namemodule.time_changer.nametime_changer, module.time_changer.name, timechangermodule.movable_paperdoll.namemovable_paperdoll, module.movable_paperdoll.name, movablepaperdollmodule.mc_gui_scale.namemc_gui_scale, module.mc_gui_scale.name, mcguiscalemodule.render_option.namerender_option, module.render_option.name, renderoptionmodule.glint_color.nameglint_color, module.glint_color.name, glintcolormodule.item_physics.nameitem_physics, module.item_physics.name, itemphysicsmodule.tab_list.nametab_list, module.tab_list.name, tablistmodule.weather_changer.nameweather_changer, module.weather_changer.name, weatherchangermodule.nick.namenick, module.nick.namemodule.freelook.namefreelook, module.freelook.name, free_lookmodule.auto_perspective.nameauto_perspective, module.auto_perspective.name, autoperspectivemodule.auto_gg.nameauto_gg, module.auto_gg.name, autoggmodule.text_hotkey.nametext_hotkey, module.text_hotkey.name, texthotkeymodule.speed_display.namespeed_display, module.speed_display.name, speeddisplaymodule.cps_limiter.namecps_limiter, module.cps_limiter.name, cpslimitermodule.break_progress.namebreak_progress, module.break_progress.name, breakprogressmodule.animations.nameanimations, module.animations.namemodule.block_outline.nameblock_outline, module.block_outline.name, blockoutlinemodule.command_hotkey.namecommand_hotkey, module.command_hotkey.name, commandhotkeymodule.no_hurt_cam.nameno_hurt_cam, module.no_hurt_cam.name, nohurtcammodule.inventory_hud.nameinventory_hud, module.inventory_hud.name, inventoryhudmodule.hive_utils.namehive_utils, module.hive_utils.name, hiveutilsmodule.hit_ping.namehit_ping, module.hit_ping.name, hitpingmodule.opponent_reach.nameopponent_reach, module.opponent_reach.name, opponentreachmodule.view_model.nameview_model, module.view_model.name, viewmodelmodule.faster_inventory.namefaster_inventory, module.faster_inventory.name, fasterinventorymodule.potionhud.namepotionhud, module.potionhud.namemodule.movable_scoreboard.namemovable_scoreboard, module.movable_scoreboard.name, movablescoreboardmodule.movable_title.namemovable_title, module.movable_title.name, movabletitlemodule.movable_bossbar.namemovable_bossbar, module.movable_bossbar.name, movablebossbarmodule.movable_chat.namemovable_chat, module.movable_chat.name, movablechatmodule.clear_scoreboard.nameclear_scoreboard, module.clear_scoreboard.name, clearscoreboardmodule.clear_chat.nameclear_chat, module.clear_chat.name, clearchatmodule.movable_coordinates.namemovable_coordinates, module.movable_coordinates.name, movablecoordinatesmodule.movable_hotbar.namemovable_hotbar, module.movable_hotbar.name, movablehotbarmodule.movable_day_counter.namemovable_day_counter, module.movable_day_counter.name, movabledaycountermodule.mouse_strokes.namemouse_strokes, module.mouse_strokes.name, mousestrokesmodule.java_hotkeys_fix.namejava_hotkeys_fix, module.java_hotkeys_fix.name, javahotkeysfix, java_hotkeys, module.java_hotkeys.namemodule.inventory_offhand_hotkey.nameinventory_offhand_hotkey, module.inventory_offhand_hotkey.name, inventoryoffhandhotkeymodule.hive_statistics.namehive_statistics, module.hive_statistics.name, hivestatisticsmodule.waypoints.namewaypoints, module.waypoints.namemodule.null_movement.namenull_movement, module.null_movement.name, nullmovementmodule.modern_handling.namemodern_handling, module.modern_handling.name, modernhandlingmodule.custom_crosshair.namecustom_crosshair, module.custom_crosshair.name, customcrosshairmodule.waila.namewaila, module.waila.namemodule.skin_stealer.nameskin_stealer, module.skin_stealer.name, skinstealermodule.raw_input_buffer.nameraw_input_buffer, module.raw_input_buffer.name, rawinputbuffermodule.low_health.namelow_health, module.low_health.name, lowhealthmodule.player_notifier.nameplayer_notifier, module.player_notifier.name, playernotifiermodule.zeqa_utils.namezeqa_utils, module.zeqa_utils.name, zeqautilsmodule.mumble_link.namemumble_link, module.mumble_link.name, mumblelinkmodule.shader_loader.nameshader_loader, module.shader_loader.name, shaderloadermodule.minimal_view_bobbing.nameminimal_view_bobbing, module.minimal_view_bobbing.name, minimalviewbobbingmodule.lewis.namelewis, module.lewis.namemodule.coordinates.namecoordinates, module.coordinates.namemodule.experience_info.nameexperience_info, module.experience_info.name, experienceinfomodule.disable_mouse_wheel.namedisable_mouse_wheel, module.disable_mouse_wheel.name, disablemousewheelmodule.java_debug_menu.namejava_debug_menu, module.java_debug_menu.name, javadebugmenumodule.directionhud.namedirectionhud, module.directionhud.namemodule.locator_bar.namelocator_bar, module.locator_bar.name, locatorbarmodule.java_view_bobbing.namejava_view_bobbing, module.java_view_bobbing.name, javaviewbobbingmodule.death_logger.namedeath_logger, module.death_logger.name, deathloggermodule.twerk.nametwerk, module.twerk.namemodule.cinematic_camera.namecinematic_camera, module.cinematic_camera.name, cinematiccameramodule.chunk_border.namechunk_border, module.chunk_border.name, chunkbordermodule.compact_chat.namecompact_chat, module.compact_chat.name, compactchatmodule.message_logger.namemessage_logger, module.message_logger.name, messageloggermodule.totem_counter.nametotem_counter, module.totem_counter.name, totemcountermodule.item_counter.nameitem_counter, module.item_counter.name, itemcountermodule.delux_overlay.namedelux_overlay, module.delux_overlay.name, deluxoverlaymodule.better_hunger_bar.namebetter_hunger_bar, module.better_hunger_bar.name, betterhungerbarmodule.particle_multiplier.nameparticle_multiplier, module.particle_multiplier.name, particlemultipliermodule.bow_sensitivity.namebow_sensitivity, module.bow_sensitivity.name, bowsensitivitymodule.subtitles.namesubtitles, module.subtitles.namemodule.sens_multiplier.namesens_multiplier, module.sens_multiplier.name, sensmultipliermodule.stopwatch.namestopwatch, module.stopwatch.namemodule.depth_of_field.namedepth_of_field, module.depth_of_field.name, depthoffieldmodule.crystal_optimizer.namecrystal_optimizer, module.crystal_optimizer.name, crystaloptimizermodule.tnt_timer.nametnt_timer, module.tnt_timer.name, tnttimermodule.inventory_lock.nameinventory_lock, module.inventory_lock.name, inventorylockmodule.audio_controller.nameaudio_controller, module.audio_controller.name, audiocontrollermodule.pitch_display.namepitch_display, module.pitch_display.name, pitchdisplaymodule.durability_warning.namedurability_warning, module.durability_warning.name, durabilitywarningmodule.camera_test.namecamera_test, module.camera_test.name, cameratestmodule.notebot.namenotebot, module.notebot.namemodule.minimap.nameminimap, module.minimap.namemodule.doom.namedoom, module.doom.namemodule.discord_rpc.namediscord_rpc, module.discord_rpc.name, discordrpcClient behavior
The module is marked server-restricted, disabled if currently active, and cannot be toggled back on while the restriction is active.
Restrictions clear on disconnect, transfer, start-game, or when a replacement payload omits/clears a module. If the module was previously enabled in settings, it can be queued to re-enable.
Server implementation notes
- Send the packet with the exact message id: flarial_client_event:restrict_features.
- Keep payloads small; avoid resending the same policy every tick.
- Send valid JSON only. If you generate payloads dynamically, validate them before sending.
- Use documented module keys/aliases instead of copying UI labels from the client.
- Re-send or clear restrictions when players switch servers, worlds, or sessions.
- To clear all restrictions, send an empty module list/object for the same header.
Packet-based restrictions are the preferred way to define server policy. They let server owners update restrictions without waiting for hardcoded client-side server checks or a new client release.