Create a Minecraft Paper/Spigot plugin named VisionSMP (Java, API 1.20+). It is fully command-based (no GUI). FACTION SYSTEM (VERY IMPORTANT): There are exactly 3 factions mapped to numbers: 1 = Lumière (GOOD faction) 2 = L’Ordre (NEUTRAL faction) 3 = L’Inferno (EVIL faction) FACTION DETAILS: 1 (Lumière / GOOD): - Role: defensive/tank - Prefix: §b§l⌁ Lumière §7| - Members get: Resistance I (infinite) - Leader name: L'Divine - Leader gets: Resistance II (infinite) 2 (L’Ordre / NEUTRAL): - Role: no powers, pure skill - Prefix: §a§l› L’Ordre §7| - Members get: no potion effects - Leader name: Le Veilleur (no extra power) 3 (L’Inferno / EVIL): - Role: aggressive/damage - Prefix: §c§l✠ L’Inferno §7| - Members get: Strength I (infinite) - Leader name: L'Demon - Leader gets: Strength II (infinite) EFFECT RULES: - Effects must be infinite duration (Integer.MAX_VALUE) - ambient=false, particles=false - Must ALWAYS be active (no disabling anywhere) - Reapply on: - PlayerJoinEvent - PlayerRespawnEvent - PlayerChangedWorldEvent - After milk bucket consumption - Every 200 ticks (configurable) - Always clear ALL existing potion effects before applying correct one COMMANDS: /visionsmp give <player> <1/2/3> Permission: visionsmp.admin Function: - Validate player exists - Validate faction number is exactly 1, 2, or 3 - Remove player from previous faction - Remove leader status if any - Clear all potion effects - Assign new faction - Apply correct effect (or none for 2) - Assign correct prefix using scoreboard team - Save data to config.yml - Send confirmation messages /visionsmp leader <player> <1/3> Permission: visionsmp.admin Function: - Only accepts 1 (Lumière) or 3 (Inferno) - Set player as leader of that faction - Ensure ONLY ONE leader per faction (replace old one) - Apply upgraded effect (Resistance II or Strength II) - Save to config.yml /annc <message> Permission: visionsmp.admin Function: - Send TITLE to all players: Title: §c§lANNOUNCEMENT Subtitle: §f<message> PREFIX SYSTEM: - Use Bukkit scoreboard teams ONLY (no external plugins) - Teams: lumiere → prefix §b§l⌁ Lumière §7| ordre → prefix §a§l› L’Ordre §7| inferno → prefix §c§l✠ L’Inferno §7| - Remove player from ALL teams before assigning new one DATA STORAGE (config.yml): players: <uuid>: name: <last known name> faction: 1/2/3 leader: true/false settings: reapply_ticks: 200 EVENT HANDLING: - On join → load faction, apply prefix + effects - On respawn → reapply effects - On world change → reapply effects - On milk drink → reapply after delay - On plugin enable → load all and apply to online players SAFETY: - All commands require permission visionsmp.admin - Strict validation for inputs - Prevent multiple leaders per faction - Log all admin actions to console and file ERROR HANDLING: - Catch all exceptions - If scoreboard fails, continue plugin without prefix - If config missing/corrupt, regenerate defaults RULES: - No GUI - No cooldowns - No safezones - No dependencies required - Plugin must NEVER break core gameplay (factions + effects always work)