SG: Reborn Premium - Ultimate SurvivalGames/BattleRoyale Plugin for Networks icon

SG: Reborn Premium - Ultimate SurvivalGames/BattleRoyale Plugin for Networks -----

The reborn of Survival Games. Ultimate Survival Games plugin, the only one you will ever need.



[​IMG]
SG: Reborn is a plugin that challenges each player to survive as long as he can and be the last man standing! Survival Games is a predecessor of the famous Battle Royale genre! This gamemode includes looting chests and gaining advantages on others! You can also find a teammate to have an easier time winning, but remember there's only one winner. So watch your back!
SG: Reborn completely revamps old SG systems and makes them better! Therefore the name SG: Reborn!

We now offer a Lite version for people who want to try the plugin with limited features:
https://www.spigotmc.org/resources/sg-reborn-lite-mcsg.121667/

[​IMG]
  • SG: Reborn currently only supports Bungeecord network. Meaning Multi-Arena DOESN'T work. 1 SERVER = 1 GAME. This plugin is pretty complex with map voting systems and arena pre-loadings. Multi-arena requires ton of work and recoding. If it's heavily requested and the plugin generates certain revenue I will add it. But for now the plugin is purely multi-server!
  • It's is heavily suggested to install Vault, PlaceholderAPI and ProtocolLib on your server as dependencies. Also installing Decent Holograms allows you to have Chest Holograms.
  • You're required to use MongoDB to use stats, leaderboards, achievements, boosters, etc...
  • Plugin requires java 17+.
[​IMG]

SG: Reborn is probably the best and most complete public SG plugin ever made for Minecraft Community since it has Survival Games, Clan War, Tournament and Private Games systems built in it. This is the best plugin to create a SG based gamemode for SG & CW players. SG: Reborn will be compatible with all plugins on your server. You may edit the plugin to your liking. Also all future updates are included in the product and issues will be fixed as soon as possible. If you have encountered an issue please don't leave a negative review, but first either join our discord support server or PM me on SpigotMC or just simply leave your issue under resource discussion!




[​IMG]
  • 3 SG-Based Game Modes – Manage Survival Games, Clan Wars & Tournaments all in one plugin, with customizable brackets, rewards, and automated match flow.
  • Team-Based Formats – Play solo, duo, trio, or quatro matches for dynamic team strategies and balanced matchmaking.
  • Fully Configurable – Customize menus, join items, in-game messages, scoreboards, maps, kits, chests, grace periods, world settings, and more via simple config files.
  • Common Map Folder Structure – Use a single directory path for all maps across servers to streamline map sharing and backups.
  • MongoDB Database Support – Persist stats, achievements, boosters & leaderboards in MongoDB for reliable cross-server data and instant lookups.
  • Ultra Fast & Async Chunk Loading – Preload every chunk asynchronously before teleporting players to ensure instant spawns and eliminate lag spikes.
  • Classic Clan War System – Declare war, track wins/losses, and reward clans for victories with customizable war rules.
  • Tiered Chests – Offer Tier 1 (regular), Tier 2 (ender/trapped) & custom chest tiers with distinct loot tables for progressive gameplay.
  • Coin Drop System – Randomly spawn gold coins across the map; picking them up awards points in “Hypixel The Pit” style.
  • Shrinking Border – Dynamic world border that shrinks over time to intensify late-game fights, inspired by Mineplex SG.
  • Dynamic Leaderboards – Display up-to-date rankings for both regular matches and tournaments in an intuitive GUI.
  • Advanced Stats System – View kills, deaths, K/D, win-rate, MMR, coins & more in chat or via an interactive in-game book.
  • Replace ELO with MMR – Use MMR and configurable Apex-style MMR ranks for competitive progression.
  • Flexible Kits System – Create, sell, or lock kits behind permissions or in-game currency; offer private donor kits & custom purchase GUIs.
  • PlaceholderAPI Support – Integrate placeholders into scoreboards, chat, holograms & GUIs for maximum server personalization.
  • Tournament Management – Host SG or CW tournaments MCMonday-style with auto-bracket generation, scheduling & prize distribution.
  • 30+ Scoreboard Placeholders – Use placeholders for kills, wins, deaths, streaks, MMR, rank, bounty & more to craft custom sidebars.
  • Built-In World Manager – Save, load, unload & teleport between worlds without external plugins; full map command suite included.
  • Donator Perks – Reward MVP donors with vote multipliers (×2/×3/×4/×5), private kits, full-server join slots & custom setup menus.
  • Custom Join Items – Add unique items or icons to your join menu to guide players into matches with flair.
  • Advanced Match Setup – Configure map pool size, skip recently played maps, grace period, flint & steel, hunger/health rules, time of day & chest types per game.
  • Command Toggles – Enable/disable bounty, confirmbounty, stats, vote, sponsor, leaderboard & other commands with a flip in the config.
  • Nametag Control – Toggle team or player nametags server-wide for custom visibility or tournament anonymity.
  • Interactive Vote System – Let players vote for their favorite map pre-game, with vote power bonuses for donors.
  • End-Game Damage Chart – Auto-generate damage breakdowns, MVP & least-damage stats at match end in a clear GUI.
  • Bounty Mechanics – Configure min/max bounty values, starting bounties for new players & confirm/send bounty commands.
  • Deathmatch Variants – Choose from Arena or Standard deathmatches post-refill for diverse end-game challenges.
  • Refill & Grace Scheduling – Automate chest refills & initial grace periods with fully adjustable timings.
  • Loot & Coin Percentages – Emulate MCSG-style kill coin rewards and customize loot distributions to fit your economy.
  • Chest Holograms – Visualize chest locations with Decent Holograms integration for instant player guidance.
  • Leveling & MMR Rank Systems – Track player progression via XP levels and configurable Apex-style MMR ranks.
  • Playtime Awards – Grant rewards based on cumulative playtime milestones.
  • Discord Webhooks – Broadcast game start/end events, stats & winners directly to your Discord channels.
  • Custom Chest Items – Add care packages, golden heads, selection chests & any CI-prefixed item to your loot tables.
  • Corpses & Combat Logger – When a player dies he will leave a corpse on the ground that has his skin & and spawn NPC “combat loggers” when players disconnect, which must be killed to prevent loot loss.
  • Boss Spawns – Trigger special boss fights during chest refills for extra excitement and team coordination.
  • Air Drop Events – Deploy interactive air drops with sound, particle effects & GUI interaction.
  • Practice Lobby – Provide a warm-up area with looting, crafting benches & PvP training before matches.
  • Win Celebration – Display custom victory images or animations to winners at the end of each match.
  • Badge Ranking System – Implement a Badlion-style rank system with colored badges, titles & progression paths.
  • Boosters & Achievements – Offer global & personal XP/coin boosters that stack, plus extendable achievements shown in an interactive book.
  • Challenges System - Challenge yourself and get rewarded if you finish the challenge (like No Armor challenge). Can be accessed with /challenges
  • Music System – Play .nbs music files on in-game events (start, refill, final battle, victory).
  • Lunar Client Support – Full integration via Apollo API for team overlays, custom border visuals & more.
  • Glowing Blocks & Entities – Highlight key map features or targets with dynamic glow effects.
  • Ultra-Configurable API – Expose extensive methods & events for developers to modify every aspect of gameplay.
  • Season System – Run competitive seasons with separate leaderboards, detailed stats tracking & end-of-season rewards for top players, all fully configurable.
  • Performance Optimized – Built with async operations, minimal main-thread work & low-memory footprint for large networks.
  • Mach History System - Check your previously played games in a nice GUI. Track how you perform.
  • Coming Soon – Quests, Gulag system (CoD style), custom Scenarios & extra mutators to keep gameplay fresh.
  • And Much More! – Explore upcoming features, API hooks, custom extensions & community-driven additions.
[​IMG]
Commands:
Kill Command - sg.command.kill
Manage Command - sg.command.manage
Map Command - sg.command.map
Setup Command - sg.command.setup

Features:
Join Full Servers - sg.fulljoin
Only Donators Spec - sg.donatorspec
See Spectator Chat - sg.seespectatorchat
See Hidden LB - sg.seehiddenleaderboard
Leave Tournament Team - sg.leaveteam
6X Vote - sg.sextavotes
5X Vote - sg.pentavotes
4X Vote - sg.quadravotes
3X Vote - sg.triplevotes
2X Vote - sg.doublevotes
[ATTACH type="full" alt="cooltext472807477112376.png"]865555[/ATTACH]
[​IMG]


Fan made, made for 1.9.0 (kinda outdated).
Thx to @5KYF <3


[​IMG]
You can request your server to be added here!
----------------------------------------------------------------------------------------------
astralnetwork.com | Astral Network
play.kyodo.network | Kyodo Network [Modified SRC]
seiky.net | Seiky Network

[​IMG]

[​IMG]
Code (Java):
public class SGRebornAPI {

    /**
     * Gets the name of the current segment
     */

    public static String getSegment ( ) {
        MatchManager manager = MatchManager. getInstance ( ) ;
        if (manager == null || manager. getSegment ( ) == null ) {
            return "Segment not available" ;
        }
        return manager. getSegment ( ). getName ( ) ;
    }

    /**
     * Gets the name of the current map
     */

    public static String getMapName ( ) {
        MatchManager manager = MatchManager. getInstance ( ) ;
        if (manager == null || manager. getMap ( ) == null ) {
            return "Not chosen yet" ;
        }
        return manager. getMap ( ). getName ( ) ;
    }

    /**
     * Gets the formatted name of the current map
     */

    public static String getMapFormattedName ( ) {
        MatchManager manager = MatchManager. getInstance ( ) ;
        if (manager == null || manager. getMap ( ) == null ) {
            return "Not chosen yet" ;
        }
        return manager. getMap ( ). getFormattedName ( ) ;
    }

    /**
     * Gets match duration (seconds)
     */

    public static int getDuration ( ) {
        MatchManager manager = MatchManager. getInstance ( ) ;
        if (manager == null ) {
            return 0 ; // default value if MatchManager is unavailable
        }
        return manager. getSeconds ( ) ;
    }

    /**
     * Gets formatted match duration (minutes and seconds)
     */

    public static String getFormattedDuration ( ) {
        MatchManager manager = MatchManager. getInstance ( ) ;
        if (manager == null ) {
            return "00:00" ;
        }
        return manager. getFormattedDuration ( ) ;
    }

    public static List <UUID > getAlivePlayers ( ) {
        MatchManager manager = MatchManager. getInstance ( ) ;
        if (manager == null ) {
            return new ArrayList <> ( ) ;
        }
        return manager. getAlives ( ) ;
    }

    /**
     * Gets the number of alive players
     */

    public static int getAlivePlayerCount ( ) {
        MatchManager manager = MatchManager. getInstance ( ) ;
        if (manager == null || manager. getAlives ( ) == null ) {
            return 0 ;
        }
        return manager. getAlives ( ). size ( ) ;
    }

    /**
     * Gets the list of spectators
     */

    public static List <UUID > getSpectators ( ) {
        MatchManager manager = MatchManager. getInstance ( ) ;
        if (manager == null ) {
            return new ArrayList <> ( ) ;
        }
        return manager. getSpectators ( ) ;
    }

    /**
     * Gets the number of spectators
     */

    public static int getSpectatorCount ( ) {
        MatchManager manager = MatchManager. getInstance ( ) ;
        if (manager == null || manager. getSpectators ( ) == null ) {
            return 0 ;
        }
        return manager. getSpectators ( ). size ( ) ;
    }

    /**
     * Gets the list of players who have played
     */

    public static List <UUID > getPlayersPlayed ( ) {
        MatchManager manager = MatchManager. getInstance ( ) ;
        if (manager == null ) {
            return new ArrayList <> ( ) ;
        }
        return manager. getPlayersPlayed ( ) ;
    }

    /**
     * Gets the match winner (team)
     */

    public static Team getWinner ( ) {
        MatchManager manager = MatchManager. getInstance ( ) ;
        if (manager == null ) {
            return null ;
        }
        return manager. getWinner ( ) ;
    }

    /**
     * Gets the MVP player (UUID)
     */

    public static UUID getMVP ( ) {
        MatchManager manager = MatchManager. getInstance ( ) ;
        if (manager == null ) {
            return null ;
        }
        return manager. getMvp ( ) ;
    }

    /**
     * Gets the damage dealt by the MVP
     */

    public static double getMVPDamage ( ) {
        MatchManager manager = MatchManager. getInstance ( ) ;
        if (manager == null ) {
            return 0 ;
        }
        return manager. getMvpDamage ( ) ;
    }

    /**
     * Gets the player who performed the worst (UUID)
     */

    public static UUID getWorstPlayer ( ) {
        MatchManager manager = MatchManager. getInstance ( ) ;
        if (manager == null ) {
            return null ;
        }
        return manager. getWorst ( ) ;
    }

    /**
     * Gets the damage dealt by the worst player
     */

    public static double getWorstPlayerDamage ( ) {
        MatchManager manager = MatchManager. getInstance ( ) ;
        if (manager == null ) {
            return 0 ;
        }
        return manager. getWorstDamage ( ) ;
    }

    /**
     * Gets the number of teams
     */

    public static int getTeamCount ( ) {
        MatchManager manager = MatchManager. getInstance ( ) ;
        if (manager == null || manager. getTeams ( ) == null ) {
            return 0 ;
        }
        return manager. getTeams ( ). size ( ) ;
    }

    /**
     * Gets the list of teams
     */

    public static List <Team > getTeams ( ) {
        MatchManager manager = MatchManager. getInstance ( ) ;
        if (manager == null ) {
            return new ArrayList <> ( ) ;
        }
        return manager. getTeams ( ) ;
    }

    /**
     * Gets the list of deathmatch spawn locations
     */

    public static List <Location > getDeathmatchSpawns ( ) {
        MatchManager manager = MatchManager. getInstance ( ) ;
        if (manager == null ) {
            return new ArrayList <> ( ) ;
        }
        return manager. getDeathmatchSpawns ( ) ;
    }

    /**
     * Gets the list of common deathmatch spawns
     */

    public static List <String > getCommonDeathmatchSpawns ( ) {
        MatchManager manager = MatchManager. getInstance ( ) ;
        if (manager == null ) {
            return new ArrayList <> ( ) ;
        }
        return manager. getDeathmatchArena ( ). getSpawns ( ) ;
    }

    /**
     * Gets the common deathmatch center
     */

    public static String getCommonDeathmatchCenter ( ) {
        MatchManager manager = MatchManager. getInstance ( ) ;
        if (manager == null ) {
            return "" ;
        }
        return manager. getDeathmatchArena ( ). getCenter ( ) ;
    }

    /**
     * Gets the common deathmatch radius
     */

    public static int getCommonDeathmatchRadius ( ) {
        MatchManager manager = MatchManager. getInstance ( ) ;
        if (manager == null ) {
            return 0 ;
        }
        return manager. getDeathmatchArena ( ). getRadius ( ) ;
    }

    /**
     * Gets the current grace period duration
     */

    public static int getGraceDuration ( ) {
        MatchManager manager = MatchManager. getInstance ( ) ;
        if (manager == null ) {
            return - 1 ;
        }
        return manager. getGrace ( ) ;
    }

    /**
     * Gets the current time left in the match
     */

    public static int getTimeLeft ( ) {
        MatchManager manager = MatchManager. getInstance ( ) ;
        if (manager == null ) {
            return - 1 ;
        }
        return manager. getTime ( ) ;
    }

    /**
     * Gets the current chest refill status
     */

    public static int getChestRefillStatus ( ) {
        MatchManager manager = MatchManager. getInstance ( ) ;
        if (manager == null ) {
            return 0 ;
        }
        return manager. getChest ( ) ;
    }

    /**
     * Gets the current health status of the match (player health)
     */

    public static int getHealthStatus ( ) {
        MatchManager manager = MatchManager. getInstance ( ) ;
        if (manager == null ) {
            return 20 ;
        }
        return manager. getHealth ( ) ;
    }

    /**
     * Checks if Flint and Steel (fns) is enabled
     */

    public static boolean isFnsEnabled ( ) {
        MatchManager manager = MatchManager. getInstance ( ) ;
        if (manager == null ) {
            return false ;
        }
        return manager. getFns ( ) ;
    }

    /**
     * Checks if hunger is enabled
     */

    public static boolean isHungerEnabled ( ) {
        MatchManager manager = MatchManager. getInstance ( ) ;
        if (manager == null ) {
            return false ;
        }
        return manager. getHunger ( ) ;
    }

    // AIR DROP SYSTEM

    /**
     * Checks if the air drop system is active
     */

    public static boolean isAirDropActive ( ) {
        AirDropManager airDropManager = AirDropManager. getInstance ( ) ;
        return airDropManager != null && Config. getBoolean (Config. AIRDROP_SYSTEM ) ;
    }

    /**
     * Gets the location of the most recent air drop
     */

    public static Location getRecentAirDropLocation ( ) {
        AirDropManager airDropManager = AirDropManager. getInstance ( ) ;
        if (airDropManager != null && !airDropManager. getAirdrops ( ). isEmpty ( ) ) {
            // Retrieve the most recent airdrop location
            return airDropManager. getAirdrops ( ). keySet ( ). stream ( ). findFirst ( ). orElse ( null ) ;
        }
        return null ;
    }

    /**
     * Checks if the air drop has fallen at the given location
     */

    public static boolean hasAirDropFallen (Location location ) {
        AirDropManager airDropManager = AirDropManager. getInstance ( ) ;
        if (airDropManager != null ) {
            return airDropManager. getAirDropFallen ( ). getOrDefault (location, false ) ;
        }
        return false ;
    }

    /**
     * Gets the progress of the air drop opening at the given location
     */

    public static int getAirDropProgress (Location location ) {
        AirDropManager airDropManager = AirDropManager. getInstance ( ) ;
        if (airDropManager != null ) {
            return airDropManager. getAirDropProgress ( ). getOrDefault (location, 0 ) ;
        }
        return 0 ;
    }

    /**
     * Gets the remaining time until the next air drop
     */

    public static int getTimeUntilNextAirDrop ( ) {
        AirDropManager airDropManager = AirDropManager. getInstance ( ) ;
        if (airDropManager != null ) {
            return AirDropManager. AIR_DROP_INTERVAL ; // Time in seconds
        }
        return - 1 ; // -1 indicates that the airdrop system is not active
    }

    /**
     * Gets the remaining time until the next air drop
     */

    public static int getAirDropClickThreshold ( ) {
        AirDropManager airDropManager = AirDropManager. getInstance ( ) ;
        if (airDropManager != null ) {
            return AirDropManager. CLICK_THRESHOLD ; // Time in seconds
        }
        return - 1 ;
    }



    // API for Profiles

    public static Profile getProfile (Player player ) {
        Profile profile = ProfileManager. getProfile (player. getUniqueId ( ) ) ;
        if (profile == null ) {
            Bukkit. getLogger ( ). log (Level. SEVERE, "SGReborn API - Profile not loaded." ) ;
            return null ;
        }
        return profile ;
    }


}

public class SGAchievementAPI {

    public static void registerAchievement (Achievement achievement ) {
        AchievementsManager. getAchievements ( ). add (achievement ) ;
        achievement. registerEvents (SGReborn. getInstance ( ) ) ;
    }

    public static void completeAchievement (Player player, Achievement achievement ) {
        AchievementsManager. completeAchievement (player, achievement ) ;
    }

    public static Achievement getAchievementByID ( String ID ) {
        return AchievementsManager. getAchievements ( ). stream ( )
                . filter (achievement -> achievement. getID ( ). equalsIgnoreCase (ID ) )
                . findFirst ( )
                . orElse ( null ) ;
    }
}

public class CustomAchievementsExample {


    // INITIALIZE IN YOUR MAIN CLASS
    public CustomAchievementsExample (SGReborn sgReborn ) {
        SGAchievementAPI. registerAchievement ( new CustomAchievementExample ( ) ) ;
    }


    private static class CustomAchievementExample extends AbstractAchievement {


        public CustomAchievementExample ( ) {
            super (
                    "Custom Achievement",             // Name
                    "CUSTOM",                         // ID
                    Arrays. asList ( "Complete a special task." ), // Description
                    "complete_special_task",         // Objective
                    100,                             // EXP reward
                    50                               // Points reward
            ) ;
        }

        //CUSTOM LISTENER EXAMPLE
        @EventHandler
        public void onPlayerCompleteSpecialTask (PlayerJumpEvent event ) {
            SGAchievementAPI. completeAchievement (event. getPlayer ( ), this ) ;
        }
    }
}
/** Triggered when the game segment changes to deathmatch */ GameDeathmatchEvent

/** Triggered when a player or team wins the game */ GameWinEvent

/** Triggered when a player eliminates another player */ GameEliminationEvent

/** Triggered when the game starts */ GameStartEvent


/** Triggered when a player levels up */ PlayerLevelUpEvent

/** Triggered when a player completes a challenge */ ChallengeCompletionEvent

/** Triggered when a player starts a challenge */ ChallengeStartEvent

/** Triggered when a player gains experience points */ PlayerGainExpEvent

/** Triggered when a player opens a chest */ ChestLootEvent

/** Triggered when a player completes a quest */ QuestCompletionEvent

/** Triggered when the game's global state changes */ GameStateChangeEvent

More things will be added to the API!

PAPI PLACEHOLDERS:

Game Placeholders
%sgreborn_game_state% - Current game state.
%sgreborn_game_matchid% - Current match ID.
%sgreborn_game_duration_raw% - Raw game duration in seconds.
%sgreborn_game_duration_formatted% - Formatted game duration.
%sgreborn_game_map% - Name of the current map (or "Lobby").
%sgreborn_game_alive_players_int% - Number of alive players.
%sgreborn_game_spectator_players_int% - Number of spectators.
%sgreborn_game_spectator_players_list% - List of spectator names.
Leaderboard Placeholders
%sgreborn_leaderboard_<stat>_<rank>%
Example:
%sgreborn_leaderboard_kills_1% - Top player in kills.
%sgreborn_leaderboard_points_5% - 5th-ranked player in points.
Booster Placeholders
%sgreborn_boosters_total_active% - Total number of active boosters.
%sgreborn_boosters_points_total_boost% - Total points boost multiplier.
%sgreborn_boosters_exp_total_boost% - Total experience boost multiplier.
%sgreborn_boosters_players_list% - List of players with active boosters.
%sgreborn_boosters_expire_time_<index>% - Remaining time for a specific booster.
%sgreborn_boosters_active_summary% - Summary of all active boosters (e.g., type and amount).
Player Placeholders
General
%sgreborn_player_level% - Player's current level.
%sgreborn_player_level_display% - Displayed player level.
%sgreborn_player_level_display_nice% - Player level with formatted color.
Stats
%sgreborn_player_stat_<stat>% - Player’s stat value.
Examples:

%sgreborn_player_stat_sg_wins% - SG wins.
%sgreborn_player_stat_deaths% - Total deaths.
%sgreborn_player_stat_experience% - Experience earned.
%sgreborn_player_tempstat_<tempstat>% - Player’s temporary stat value.
Examples:

%sgreborn_player_tempstat_kills% - Temporary kills stat.
%sgreborn_player_tempstat_chests% - Temporary chests stat.
Settings
%sgreborn_player_setting_<setting>% - Status of a specific player setting (Enabled/Disabled).
Examples:
%sgreborn_player_setting_scoreboard% - Scoreboard visibility setting.
%sgreborn_player_setting_spectator_speed% - Spectator speed setting.
Other Player-Specific Stats
%sgreborn_player_mmr_rank% - Player’s MMR rank.
%sgreborn_player_total_kdr% - Player’s Kill/Death ratio.
%sgreborn_player_current_kit% - Player’s currently selected kit.
%sgreborn_player_real_displayname% - Player’s real display name.
%sgreborn_player_damage_amount% - Total damage dealt by the player.
%sgreborn_player_winrate% - Player’s win rate as a percentage.
%sgreborn_player_chests% - Number of chests opened.
%sgreborn_player_team% - Name of the player’s team.
%sgreborn_player_team_color% - Player’s team color.
%sgreborn_player_team_fakecolor% - Player’s team fake color.
Personal Booster Placeholders
%sgreborn_player_credit_booster_amount% - Player's active credit booster multiplier.
%sgreborn_player_exp_booster_amount% - Player's active experience booster multiplier.
%sgreborn_player_credit_booster_time% - Remaining time for the player's credit booster.
%sgreborn_player_exp_booster_time% - Remaining time for the player's experience booster.

[​IMG]
  • Redistribution of this plugin to other individuals, networks, or websites is strictly prohibited.
  • This plugin is licensed for use exclusively on your server or network.
  • Please refrain from leaving unconstructive reviews, such as complaints about missing features or updates not meeting your requests. The plugin's features are clearly listed on the main page, so you are fully informed before purchasing.
  • Refunds are not available.
  • While I strive to provide updates, they will be released as my schedule permits. Please understand that I have other commitments outside of this project.
Resource Information
Author:
----------
Total Downloads: 24
First Release: Sep 28, 2022
Last Update: Jun 10, 2025
Category: ---------------
All-Time Rating:
10 ratings
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings