SpeedRun is a race minigame with parkour.

[img] tag
  • Multi-Arena or bungee support.
  • Achievements.
  • Win fireworks & effects.
  • Checkpoint effects.
  • MySQL, Flatfile or SQLite support.
  • Most game messages are configurable.
  • Custom and configurable signs.
  • Save and restore player inventory, levels and more.
  • API with Game events.
  • Visibility system.
  • NoteBlockAPI for .NBS Game sounds! Play with custom different musics per map!
  • 1 Winner, 3 positions, 2 and 3 positions will receive half of win coins.
  • Win & checkpoints rewards.
  • MCJukebox support! Play a real music with MCJukebox.
  • Leaderboards and Map Records!
  • Custom pads.
[img] tag
Bugs
I can't fix problems if I don't find them! If you have any issues, report via discussion or private message. Do not use the rating area to report bugs or request features. Please go to discussion.

Dependencies

To work with Leaderboards you can add Holographic Displays.

NBS Music
You can play custom Note Block Studio songs! You need NoteBlockAPI for this.

[img] tag

Arena setup
    Required permission: sr.admin
    First of all set global spawn using /sr setgspawn

Video tutorial by @mantis64




Step by step tutorial
  • Create your arena - /sr create <name>.
  • Set arena waiting lobby - /sr setlobby <name>
  • Add spawn - /sr setspawn <name>
  • Set min players - /sr setMinPlayers <name> <amount>
  • Set max players - /sr setMaxPlayers <name> <amount>
  • Select the checkpoint area the checkpoint tool - /sr addCheckpoint <name>
    • Use /sr cptool to get the checkpoint tool, it work as the same way as WorldEdit.
  • Put the block on your hand - /sr addblock <name>
  • Finish the arena with - /sr finish <name>
The last checkpoint will be the win point (if player got all of the map checkpoints)

Sign format:
  • [SpeedRun]
  • join
  • ArenaName
[img] tag
Leaderboards
You need HolographicDisplays to work with Leaderboards, just use the placeholder:
  • {sr_wins_number}
    • Example: {sr_wins_1} will return player with most wins.
    • {sr_wins_2} etc
    • The message can be modified at
      Leaderboard.Messages.Wins-Format Use the placeholders %player% for the player %wins% for the win amount and %position% for the position.
  • {sr_checkponts_number}
    • Example: {sr_checkponts_1} will return player with most checkpoints
    • {sr_checkponts_2} etc
    • The message can be modified at
      Leaderboard.Messages.Checkpoints-Format Use the placeholders %player% for the player %checkpoints% for the checkpoint amount and %position% for the position.
  • {sr_records_map_position}
    • {sr_records_sr1_1} will return the player with the best time on the map sr1.
    • {sr_records_sr1_2} etc
    • The message can be modified at
      Leaderboard.Messages.Map-Record-Format. Use the placeholders %time% for time in milliseconds,
      %formatted_time% for mm:ss, %map% for the Map name and %position% for the position.
[img] tag
  database.yml used above (HolographicDisplays)

Time Leaderboard/Map Records
Players can set their own record on each map.
[img] tag
[img] tag

Extra Information about Map Records:
  • It only works with SQLite or MySQL.
  • Can be disabled if you don't want to use.
  • Will create a new database table.
  • Will update and load before (reload) every game.
    • This process should not have any impacts on performance.
This system is in BETA and may have future changes on how it will work on database so keep that in mind. Please report any bugs at discussion.

For now some users have tested and everything is in place and no changes are needed.
  • /sr join <arena> - sr.player
  • /sr leave - no permission.
  • /sr stats - sr.player
Manager commands
  • /sr setgspawn - sr.admin
  • /sr start <arena> - sr.moderator/sr.admin
  • /sr stop <arena> - sr.moderator/sr.admin
  • /sr config set/update <path> <value> - sr.commands.config/sr.admin
Others:
  • /sr coins set/add/remve <player> <amount> - sr.command.coins/sr.admin
  • /sr updatedata <player> - sr.command.update/sr.admin
  • /sr leaderboard update - sr.admin
  More about the commands

[img] tag
Extra permissions
  • sr.joinfull - Allows you to join in full games.
Additional
MCJukebox:[img] tag
[img] tag


Showcase & Setup




Common problems
[SpeedRun] Task #44 for SpeedRun v3.1 generated an exception
java.lang.IllegalArgumentException: No enum constant [SOUND]
at java.lang.Enum.valueOf(Enum.java:238) ~[?:1.8.0_111]
at org.bukkit.Sound.valueOf(Sound.java:1) ~[patched_1.10.2.jar:git-Paper-914]
at com.floodeer.speedrun.game.Game$1.run(Game.java:135) ~[?:?]
How to fix:
If you are using 1.9, 1.10 or 1.11 you have to change the sounds at settings.yml
Sounds:
  Checkpoint: ENTITY_PLAYER_LEVELUP:0.2 #For 1.9, 1.10 and 1.11

Please DO NOT use /reload with SpeedRun.

ParticleEffects
  ParticleEffects (1.9 or above)
  ParticleEffects 1.8

Sounds List
https://www.spigotmc.org/wiki/cc-sounds-list/

Potion Effect Types
https://hub.spigotmc.org/javadocs/spigot/org/bukkit/potion/PotionEffectType.html

Material list
https://hub.spigotmc.org/javadocs/spigot/org/bukkit/Material.html

Pads
1: #The pad ID
 Material: REDSTONE_BLOCK #The block type
 Data: 0 #The block data (e.g red wool you will set Material to WOOL and data to 14)
 Boost-Options:
  Enabled: true #If enabled this will be a boost block.
  Multiply-Forward: 3.5
  Multiply-Y: 0.8
 Trap-Options:
  Enabled: false  #If enabled this will be a trap block.
  Effects: #PotionEffects from the block.
  Type: NONE #If "NONE" this will disable the block from giving any effect.
  Duration: 0 #duration in ticks (20 = 1 sec)
  Amplifier: 0 #potion effect amplifier
  Custom-Action: "NONE" 
  • Custom actions: BACK_TO_SPAWN and BACK_TO_CHECKPOINT
    • BACK_TO_SPAWN will send the player to the arena spawn. This will not reset the checkpoints so you can back to your last checkpoint.
    • BACK_TO_CHECKPOINT will force player to fail, sending back to last checkpoint.

API

import java.util.UUID;

import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;

import com.floodeer.speedrun.SpeedRun;
import com.floodeer.speedrun.game.Game;
import com.floodeer.speedrun.game.GameCheckPoint;
import com.floodeer.speedrun.game.GamePlayer;

public class SpeedRunAPI {

  /**
    * Get player data from player.
    *
    * @param bukkitPlayer - The player.
    * @return GamePlayer - The player data.
    *
    */
    public GamePlayer getPlayerData(Player bukkitPlayer);

    /**
    * Get player data from name.
    *
    * @param name - The Player name.
    * @return GamePlayer - The player data.
    *
    */
    public GamePlayer getPlayerData(UUID uuid);

    /**
    * Get player data from UUID.
    *
    * @param uuid - The UUID.
    * @return GamePlayer - The player data.
    *
    */
    public GamePlayer getPlayerData(String name);

    /**
    * Get player a game from name.
    *
    * @param name - The map name.
    * @return Game - The game.
    *
    */
    public Game getGame(String name);

    /**
    * Get player a game from a player.
    *
    * @param GamePlayer - The game player.
    * @return Game - The game.
    *
    */
    public Game getGame(GamePlayer fromPlayer);

    /**
    * Send a updated data to Database (MySQL, SQLite or YAML)
    *
    * @param players - Players to save
    *
    */
    public void saveData(Player... players);

    /**
    * Get the music from the game.
    *
    * @return Music - the GameMusic class
    *
    */
    public Music getGameMusic(Game fromGame);

    /**
    * Send a plugin message to a channel via BungeeCord's channel and SpeedRun's subchannels.
    *
    * @param player - The player sending the message -- Player must be online.
    * @param server - The target server.
    * @param key - Your key to listen the message.
    *
    */
    public boolean forwardData(Player player, String server, String key);

    /**
    * Get the wins leaderboard;
    *
    * @return The list of avaliable data.
    */
    public List<Entry<String, Integer>> getWinsLeaderboard();

    /**
    * Get checkpoints leaderboard;
    *
    * @return The list of avaliable data.
    */
    public List<Entry<String, Integer>> getCheckpointsLeaderboard();

    /**
    * Get offline player data.
    *
    * @param name - The player name
    * @return Offline player data
    */
    public OfflineGamePlayer getOfflineGamePlayer(String name);

    @EventHandler
    public void onGameStart(GameStartEvent event) {
        event.getGame().sendGameMessage("Game started!");
    }

    @EventHandler
    public void onGameEnd(GameEndEvent event) {
        GamePlayer p = event.getPlayerFromPosition(1);
        event.getPlayerFromPosition(2).getP().sendMessage(p.getName() + " is better than you!");
    }

    @EventHandler
    public void onAchievement(PlayerAchievementEvent event) {
        event.getPlayer().sendMessage("New achievement: " + event.getType().toString());
    }

    @EventHandler
    public void onCheckpoint(PlayerCheckPointEvent event) {
        GameCheckPoint checkpoint = event.getCheckpoint();
        event.getPlayer().teleport(checkpoint.getSafeLocation());
    }
}

File and Screenshots
  Screenshots

  {arena}.yml

  Player data file

  achievements.yml

  settings.yml

  pads.yml

Reviews:
[img] tag
... and more.

By buying SpeedRun you agree to
    • You are not allowed to distribute this plugin.
    • You are not allowed to decompile this plugin.
    • Use only for your network/server.
    • NO refunds.
    • All support given is on Spigot and Polymart only. You will not have Discord, Skype or any of those type of contact to ask for support. I'll probably reply in a few minutes! Otherwise, wait at least 12 hours or check my profile to see any updates.
    • Accept future terms.