SG Reborn Lite (MCSG/Battle Royale) icon

SG Reborn Lite (MCSG/Battle Royale) -----

the lite version of the 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!

SG Reborn Version Comparison:
[​IMG]


[​IMG]
  • SG: Reborn currently only supports Bungeecord network. Meaning multi-arena DOESN'T work. 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, boosters, achievements, etc...​

[​IMG]
  • Ability to Manage 3 SG Based Game Modes (Survival Games, Clan Wars and Tournaments for SG or CW)​
  • Fully Configurable (Menus, Join Items, Messages, Scoreboard, Maps, Kits and Chests)​
  • Common Path for Map Folders​
  • Database Support (MongoDB). Stats, achievements, boosters and leaderboards require MongoDB!​
  • Chunk Loading System (Loads all chunks before teleporting players to a map)​
  • Clan War System (Classic style)​
  • Tiered chests! (Tier 1 = Regular chest, Tier 2 = Enderchest or trapped chest)​
  • Leaderboards system (For tournaments and regular games)​
  • Stats system (That shows all the required information for a player either in chat or in an interactive book)​
  • Kits system! (Create your own kits! Let your players purchase them with coins or lock them behind a permission!)​
  • PlaceholderAPI support!​
  • Tournament System (MCMonday style, ability to host SG or CW tournaments)​
  • 30+ Scoreboard Placeholders​
  • Ability to Add Custom/Private Kits (Can be purchased with points or permission)​
  • Detailed Map Command (Saving, loading/unloading maps, no need to use other world managing plugins)​
  • Exclusive Perks for Donators (Penta/Quadra/Triple/Double Votes, Full Server Join, Private Kits and Custom Setup Menu)​
  • Ability to Add Custom Join Items​
  • Advanced Custom Setup (Map, Grace Period, Flint and Steel, Hunger, Health, Time of the day and Chest Types)​
  • Ability to Toggle Commands (Bounty, ConfirmBounty, Stats, Vote, Sponsor and Leaderboard)​
  • Ability to Toggle Team/Player Nametags​
  • Vote system that resembles MCGamer Network! (Vote to play on your favorite map!)​
  • Built-in World Manager to configure your own maps and worlds!​
  • End Damage Chart (Shows damages of winner and losers, MVP and Worst when the game ends)​
  • Ability to Choose Map Pool Size​
  • Max/Min Bounty To Send / Bounty Amounts / Start Bounty For Stats (50 to 500)​
  • Multiple Deathmatch styles! (Arena, Common Deathmatch!)​
  • Refills, Grace, Custom Servers, Vote Power, Bounty System.​
  • Kill coins precentages like MCSG!​
  • Chest Holograms (require Decent Holograms)​
  • Leveling system​
  • Elo system​
  • Discord Webhooks (on Game Start and Game End)​
  • Custom Items that can be used in chests.
    Care package (can be used by adding ci-carepackage to chests.yml)
    Golden Head (can be used by adding ci-goldenhead to chests.yml)
    Selection Chest (can be used by adding ci-selectionchest to chests.yml)​
  • Graves system​
  • Boss system (Happens on chest refill)​
  • Air Drop system with interactive user experience!​
  • Waiting Lobby Practice (Looting, crafting, PvP)​
  • Custom image display to winner when game finishes!​
  • Rank system (badlion style)​
  • Achievements system (Showcases nicely in the interactive book, can be extended with an API)​
  • Fast and optimized Leaderboards GUI System based on MMR, EXP & Wins.​
  • And much more!​

[​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

[​IMG]

Showcase video:

Coming soon.


Map setup video:




[​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 ) ;

        }

    }

}
Code (Text):
/** 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:


Code (Javascript):
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: 85
First Release: Jan 2, 2025
Last Update: Jan 2, 2025
Category: ---------------
All-Time Rating:
2 ratings
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings