By continuing to use this site, you agree to the Terms of Service of this website, including usage of cookies.
OK, Don't show this again
A comprehensive PocketMine-MP plugin that provides a flexible API for tracking player streaks across multiple instances. Perfect for gamemodes like KitPvP, SkyWars, or any plugin that needs to track consecutive achievements.
# Storage configuration
use-database: false
# Database settings (only used if use-database is true)
database:
host: "localhost"
port: 3306
username: "root"
password: ""
database: "streakapi"
# Default instance settings
default-settings:
milestone-message: "&6{player} &ereached &c{streak} &e{instance}!"
reset-on-death: false
If you prefer database storage over JSON files:
use-database: true
in config.yml
Command | Permission | Description |
---|---|---|
/streak [instance] [player] |
None | View streak information |
/topstreaks [instance] |
None | View top streaks leaderboard |
Command | Permission | Description |
---|---|---|
/createstreak <name> [display_name] |
streakapi.admin | Create a new streak instance |
/deletestreak <name> |
streakapi.admin | Delete a streak instance |
/liststreaks |
None | List all streak instances |
/resetstreak <instance> <player> |
streakapi.reset | Reset a player's streak |
permissions:
streakapi.admin:
description: "Access to administrative commands"
default: op
streakapi.reset:
description: "Reset player streaks"
default: op
$streakAPI = $this->getServer()->getPluginManager()->getPlugin("StreakAPI")->getStreakAPI();
$streakAPI->createInstance("kills", "Kill Streak");
$config = [
"display_name" => "Win Streak",
"milestones" => [5, 10, 25, 50, 100],
"milestone_message" => "&6{player} &eachieved a &c{streak} &e{instance}!",
"milestone_commands" => [
"give {player} diamond 1",
"broadcast {player} is on fire with {streak} wins!"
],
"reset_on_death" => false
];
$streakAPI->createInstance("wins", "Win Streak", $config);
$streakAPI->addStreak("kills", "PlayerName", 1);
$streakAPI->setStreak("kills", "PlayerName", 10);
$streakAPI->resetStreak("kills", "PlayerName");
$currentStreak = $streakAPI->getStreak("kills", "PlayerName");
$highestStreak = $streakAPI->getHighestStreak("kills", "PlayerName");
$totalCount = $streakAPI->getTotalCount("kills", "PlayerName");
$playerData = $streakAPI->getPlayerData("kills", "PlayerName");
$allStreaks = $streakAPI->getAllStreaks("kills");
$instances = $streakAPI->getInstances();
if ($streakAPI->instanceExists("kills")) {
// Instance exists
}
$config = $streakAPI->getInstanceConfig("kills");
$newConfig = [
"display_name" => "Updated Kill Streak",
"milestones" => [3, 7, 15, 30]
];
$streakAPI->updateInstanceConfig("kills", $newConfig);
$streakAPI->deleteInstance("kills");
use pocketmine\event\Listener;
use pocketmine\event\entity\EntityDamageByEntityEvent;
use pocketmine\event\player\PlayerDeathEvent;
use pocketmine\player\Player;
class KillStreakHandler implements Listener {
private $streakAPI;
public function __construct($plugin) {
$this->streakAPI = $plugin->getServer()->getPluginManager()->getPlugin("StreakAPI")->getStreakAPI();
if (!$this->streakAPI->instanceExists("kills")) {
$config = [
"display_name" => "Kill Streak",
"milestones" => [5, 10, 15, 20, 25],
"milestone_message" => "&6{player} &eis on a &c{streak} &ekill streak!",
"milestone_commands" => ["give {player} golden_apple 1"],
"reset_on_death" => true
];
$this->streakAPI->createInstance("kills", "Kill Streak", $config);
}
}
public function onPlayerDeath(PlayerDeathEvent $event) {
$player = $event->getPlayer();
$cause = $player->getLastDamageCause();
if ($cause instanceof EntityDamageByEntityEvent) {
$killer = $cause->getDamager();
if ($killer instanceof Player) {
$this->streakAPI->addStreak("kills", $killer->getName());
$this->streakAPI->resetStreak("kills", $player->getName());
}
}
}
}
class GameWinHandler {
private $streakAPI;
public function __construct($plugin) {
$this->streakAPI = $plugin->getServer()->getPluginManager()->getPlugin("StreakAPI")->getStreakAPI();
$this->streakAPI->createInstance("wins", "Win Streak", [
"milestones" => [3, 5, 10, 15, 25],
"milestone_message" => "&6{player} &ewon &c{streak} &egames in a row!",
"reset_on_death" => false
]);
}
public function onGameWin(Player $winner) {
$this->streakAPI->addStreak("wins", $winner->getName());
$streak = $this->streakAPI->getStreak("wins", $winner->getName());
$winner->sendMessage("§aYou won! Current win streak: §c$streak");
}
public function onGameLose(Player $loser) {
$streak = $this->streakAPI->getStreak("wins", $loser->getName());
if ($streak > 0) {
$this->streakAPI->resetStreak("wins", $loser->getName());
$loser->sendMessage("§cYou lost your win streak of $streak!");
}
}
}
The milestone system allows you to configure automatic rewards and announcements when players reach certain streak values.
$config = [
"display_name" => "Kill Streak",
"milestones" => [5, 10, 25, 50, 100],
"milestone_message" => "&6{player} &eachieved a &c{streak} &e{instance}!",
"milestone_commands" => [
"give {player} diamond_sword 1",
"give {player} golden_apple 3",
"eco give {player} 1000"
]
];
{player}
- Player's name{streak}
- Current streak value{instance}
- Instance display nameplugins/StreakAPI/streaks.json
and instances.json
// TODO: Custom events in future updates
// - StreakIncrementEvent
// - StreakResetEvent
// - StreakMilestoneEvent
Database Connection Failed
config.yml
Permission Denied
Instance Not Found
/liststreaks
to see available instances/createstreak
or the APIThis plugin is released under the MIT License. See LICENSE file for details.
You can leave one review per plugin release, and delete or update your review at any time