Force Sensitivity Detector
Invision Community Suite v4.7.20 Extension
Automatically determines user Force Sensitivity upon registration or via admin trigger
The Force Sensitivity Detector is a custom extension for Invision Community Suite (ICS) v4.7.20 that adds a mystical element to your community by determining whether users possess "Force Sensitivity" - a special trait stored in their profile.
π² Probability-based Detection - Configurable chance system for Force Sensitivity determination
π€ Registration Hook - Automatic detection upon new user registration
π§ Admin Controls - Manual trigger and probability manipulation per user
π Community Ratios - Maintain desired balance of Force Sensitive users
π Audit Logging - Track all Force Sensitivity determinations
π¨ Profile Integration - Custom profile field with badge/flair display options
Invision Community Suite v4.7.20
PHP 7.4+ (recommended 8.0+)
MySQL 5.7+ / MariaDB 10.2+
Admin ACP access for installation and configuration
forcesensitivity/
βββ Application.php # Main application class
βββ extensions/
β βββ core/
β βββ Profile/
β β βββ ForceSensitivity.php # Profile badge extension
β βββ MemberFilter/
β βββ ForceSensitivity.php # ACP member filter
βββ hooks/
β βββ memberCreate.php # Registration detection hook
βββ modules/
β βββ admin/
β βββ forcesensitivity/
β βββ settings.php # Admin settings module
β βββ members.php # Member management module
β βββ modifiers.php # Probability modifiers CRUD
β βββ logs.php # Audit log viewer
βββ sources/
β βββ ForceSensitivity/
β β βββ Detector.php # Core detection logic
β β βββ Status.php # Status ActiveRecord model
β β βββ Modifier.php # Probability modifier model
β β βββ RatioManager.php # Community ratio management
β βββ Log/
β βββ Entry.php # Audit log entry model
βββ dev/
β βββ lang.php # Language strings (150+ keys)
β βββ jslang.php # JavaScript language strings
β βββ settings.json # ACP settings definitions
β βββ css/
β β βββ forcesensitivity.css # Badge and indicator styles
β βββ html/ # Template files
β βββ admin/ # Admin templates
β βββ front/ # Front-end templates
βββ data/
β βββ application.json # App metadata
β βββ extensions.json # Extension definitions
β βββ hooks.json # Hook definitions
β βββ modules.json # Module definitions
βββ setup/
βββ install.php # Database installation
βββ uninstall.php # Clean removal
βοΈ Configuration Options
Core Probability Settings
Setting
Type
Default
Description
base_probability
Float
0.05 (5%)
Base chance of Force Sensitivity
max_probability
Float
0.50 (50%)
Maximum allowed probability cap
min_probability
Float
0.01 (1%)
Minimum allowed probability floor
detection_enabled
Boolean
true
Master toggle for auto-detection
Setting
Type
Default
Description
target_ratio
Float
0.10 (10%)
Desired FS:Total user ratio
ratio_enforcement
Enum
soft
none, soft, hard enforcement mode
ratio_window
Integer
100
Number of recent registrations to consider
auto_adjust_probability
Boolean
true
Dynamically adjust based on current ratio
Setting
Type
Default
Description
admin_can_override
Boolean
true
Allow admins to set FS status directly
admin_probability_boost
Float
0.10
Per-user probability modifier range
bulk_operations_enabled
Boolean
true
Enable bulk FS operations
reroll_enabled
Boolean
true
Allow re-determination of FS status
reroll_cooldown
Integer
86400
Cooldown between rerolls (seconds)
Setting
Type
Default
Description
show_badge
Boolean
true
Display FS badge on profiles
badge_style
Enum
glow
simple, glow, animated
show_in_posts
Boolean
true
Show FS indicator in forum posts
custom_field_name
String
Force Sensitive
Profile field display name
sensitive_label
String
Force Sensitive
Label for FS users
not_sensitive_label
String
Force Blind
Label for non-FS users
βββββββββββββββββββ
β User Registers β
ββββββββββ¬βββββββββ
β
βΌ
βββββββββββββββββββββββ
β Check if Detection β
β is Enabled β
ββββββββββ¬βββββββββββββ
β Yes
βΌ
βββββββββββββββββββββββ
β Calculate Current β
β Community Ratio β
ββββββββββ¬βββββββββββββ
β
βΌ
βββββββββββββββββββββββ
β Adjust Probability β
β Based on Ratio β
ββββββββββ¬βββββββββββββ
β
βΌ
βββββββββββββββββββββββ
β Roll for Force β
β Sensitivity β
ββββββββββ¬βββββββββββββ
β
ββββββ΄βββββ
β β
βΌ βΌ
βββββββββ βββββββββββββ
β Yes β β No β
βββββ¬ββββ βββββββ¬ββββββ
β β
βΌ βΌ
βββββββββββββββββββββββββ
β Update Profile Field β
β & Log Result β
βββββββββββββββββββββββββ
βββββββββββββββββββββββ
β Admin Selects User β
ββββββββββ¬βββββββββββββ
β
βΌ
βββββββββββββββββββββββ
β Choose Action: β
β β’ Set FS Status β
β β’ Reroll Detection β
β β’ Adjust Modifier β
ββββββββββ¬βββββββββββββ
β
βΌ
βββββββββββββββββββββββ
β Apply Changes & β
β Log Action β
βββββββββββββββββββββββ
π₯οΈ Admin Control Panel (ACP) Features
Current FS ratio visualization
Recent detection activity
Quick stats (total FS, recent conversions)
All configuration options with inline help
Import/Export settings
Reset to defaults button
Searchable/filterable member list
Inline FS status toggle
Bulk selection operations:
Mass reroll
Set all selected to FS/Non-FS
Apply probability modifier
Individual member actions:
View detection history
Adjust personal probability modifier
Force reroll with custom probability
Per-user probability adjustments
Group-based probability bonuses
Time-based events (e.g., "May the 4th" boost)
Achievement/milestone triggers
Complete detection history
Admin action tracking
Export functionality
Retention settings
CREATE TABLE ` {prefix}forcesensitivity_status` (
` id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY ,
` member_id` BIGINT UNSIGNED NOT NULL ,
` is_force_sensitive` TINYINT (1 ) NOT NULL DEFAULT 0 ,
` detection_date` DATETIME NOT NULL ,
` detection_method` ENUM(' registration' , ' admin' , ' reroll' , ' event' ) NOT NULL ,
` probability_used` DECIMAL (5 ,4 ) NOT NULL ,
` admin_modifier` DECIMAL (5 ,4 ) DEFAULT 0 ,
` detected_by` BIGINT UNSIGNED NULL ,
` notes` TEXT NULL ,
INDEX ` idx_member` (` member_id` ),
INDEX ` idx_sensitive` (` is_force_sensitive` ),
INDEX ` idx_date` (` detection_date` )
);
CREATE TABLE ` {prefix}forcesensitivity_log` (
` id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY ,
` member_id` BIGINT UNSIGNED NOT NULL ,
` action` VARCHAR (50 ) NOT NULL ,
` old_value` VARCHAR (255 ) NULL ,
` new_value` VARCHAR (255 ) NULL ,
` performed_by` BIGINT UNSIGNED NULL ,
` ip_address` VARCHAR (45 ) NULL ,
` timestamp` DATETIME NOT NULL ,
` details` JSON NULL ,
INDEX ` idx_member` (` member_id` ),
INDEX ` idx_action` (` action` ),
INDEX ` idx_timestamp` (` timestamp` )
);
forcesensitivity_modifiers
CREATE TABLE ` {prefix}forcesensitivity_modifiers` (
` id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY ,
` type` ENUM(' member' , ' group' , ' global' , ' event' ) NOT NULL ,
` target_id` BIGINT UNSIGNED NULL ,
` modifier` DECIMAL (5 ,4 ) NOT NULL ,
` reason` VARCHAR (255 ) NULL ,
` start_date` DATETIME NULL ,
` end_date` DATETIME NULL ,
` is_active` TINYINT (1 ) NOT NULL DEFAULT 1 ,
` created_by` BIGINT UNSIGNED NOT NULL ,
` created_date` DATETIME NOT NULL ,
INDEX ` idx_type_target` (` type` , ` target_id` ),
INDEX ` idx_active` (` is_active` )
);
Hook
Trigger
Purpose
onMemberRegistration
User completes registration
Auto-detection trigger
onForceSensitivityDetermined
After FS roll completes
Custom actions on result
onForceSensitivityChanged
FS status modified
Notification/sync triggers
onProbabilityCalculated
Before roll
Custom probability modifiers
// Add custom probability modifier
\IPS \forcesensitivity \Detector::addProbabilityModifier (function ($ member , $ baseProbability ) {
// Users with 1000+ posts get a 5% bonus
if ($ member ->posts >= 1000 ) {
return $ baseProbability + 0.05 ;
}
return $ baseProbability ;
});
// React to FS determination
\IPS \Dispatcher::i ()->on ('onForceSensitivityDetermined ' , function ($ member , $ isSensitive ) {
if ($ isSensitive ) {
// Award achievement, send notification, etc.
$ member ->grantAchievement ('force_awakened ' );
}
});
.fs-badge { } /* Base badge styling */
.fs-badge--sensitive { } /* Force Sensitive badge */
.fs-badge--blind { } /* Force Blind badge */
.fs-badge--glow { } /* Glowing effect variant */
.fs-badge--animated { } /* Animated variant */
.fs-indicator { } /* In-post indicator */
.fs-profile-field { } /* Profile field wrapper */
forceSensitivityBadge - Standalone badge
forceSensitivityIndicator - Compact indicator
forceSensitivityProfileField - Full profile field display
Download the extension package
Navigate to ACP β System β Applications & Plugins
Click Install and upload the package
Configure settings in ACP β Community β Force Sensitivity
(Optional) Customize display templates and CSS
Phase 1: Core Foundation β
Phase 2: Admin Interface β
Phase 3: Display & Integration β
Phase 4: Advanced Features β
Phase 5: Polish & Documentation β
This extension is released under the MIT License .
Contributions are welcome! Please read our contributing guidelines before submitting pull requests.
May the Force be with you... or not. It's really up to the probability engine.