Skip to content

Commit

Permalink
Fix #1 and other bug
Browse files Browse the repository at this point in the history
- Fix #1
- Fix error that happened when a rank was eliminated and a player with that rank joined the server.
  • Loading branch information
IvanCraft623 committed Sep 8, 2021
1 parent 716bd7e commit 7bd5d85
Show file tree
Hide file tree
Showing 17 changed files with 132 additions and 69 deletions.
82 changes: 39 additions & 43 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,43 +1,39 @@
[![](https://poggit.pmmp.io/shield.state/RankSystem)](https://poggit.pmmp.io/p/RankSystem)
[![](https://poggit.pmmp.io/shield.api/RankSystem)](https://poggit.pmmp.io/p/RankSystem)
[![](https://poggit.pmmp.io/shield.dl.total/RankSystem)](https://poggit.pmmp.io/p/RankSystem)

<div align="center">
<h1> 👑 RankSystem 🔧</h1>
<p>An amazing Rank and Permissions Manager</p>
</div>

## Description:
An amazing Rank and Permissions Manager. The best ranks manager for PocketMine-MP.

# Commands
Command | Description | Permission
--- | --- | ---
`/ranks create` | Comming soon! | ranksystem.commands
`/ranks delete <rank>` | Delete a Rank. | ranksystem.commands
`/ranks edit <rank>` | Comming soon! | ranksystem.commands
`/ranks list` | Show all ranks list. | ranksystem.commands
`/ranks set <user> <rank> [expTime]` | Set a Rank to a User | ranksystem.commands
`/ranks remove <user> <rank>` | Remove a Rank of a User | ranksystem.commands
`/ranks setperm <user> <permission>` | Set a Permission to a User | ranksystem.commands
`/ranks removeperm <user> <permission>` | Remove a Permission of a User | ranksystem.commands
`/ranks perms <plugin>` | Show a list of all plugin permissions | ranksystem.commands
`/ranks credits` | Show RankSystem Credits | ranksystem.commands

# Features

- Multiple Ranks per user support
- Temp-ranks System
- Easy Rank Creation / Edit System in-game
- SQLite3 Provider Support
- Yaml Provider Support
- Ranks inheritance system to allow you to inherit group permissions
- Permissions per User
- Profile System
- Provides simple and flexible API for plugin developers
- And more...!

# Project information
Version | Pocketmine API | PHP | Status
--- | --- | --- | ---
0.0.1 | [PM4](https://github.com/pmmp/PocketMine-MP/tree/master) & [PM3](https://github.com/pmmp/PocketMine-MP/tree/stable) | 7.3 => 8 | Functional
<div align="center">
<h1> 👑 RankSystem 🔧</h1>
<p>An amazing Rank and Permissions Manager</p>
</div>

## Description:
An amazing Rank and Permissions Manager. The best ranks manager for PocketMine-MP.

# Commands
Command | Description | Permission
--- | --- | ---
`/ranks create` | Comming soon! | ranksystem.commands
`/ranks delete <rank>` | Delete a Rank. | ranksystem.commands
`/ranks edit <rank>` | Comming soon! | ranksystem.commands
`/ranks list` | Show all ranks list. | ranksystem.commands
`/ranks set <user> <rank> [expTime]` | Set a Rank to a User | ranksystem.commands
`/ranks remove <user> <rank>` | Remove a Rank of a User | ranksystem.commands
`/ranks setperm <user> <permission>` | Set a Permission to a User | ranksystem.commands
`/ranks removeperm <user> <permission>` | Remove a Permission of a User | ranksystem.commands
`/ranks perms <plugin>` | Show a list of all plugin permissions | ranksystem.commands
`/ranks credits` | Show RankSystem Credits | ranksystem.commands

# Features

- Multiple Ranks per user support
- Temp-ranks System
- Easy Rank Creation / Edit System in-game
- SQLite3 Provider Support
- Yaml Provider Support
- Ranks inheritance system to allow you to inherit group permissions
- Permissions per User
- Profile System
- Provides simple and flexible API for plugin developers
- And more...!

# Project information
Version | Pocketmine API | PHP | Status
--- | --- | --- | ---
0.0.1 | [PM4](https://github.com/pmmp/PocketMine-MP/tree/master) & [PM3](https://github.com/pmmp/PocketMine-MP/tree/stable) | 7.3 => 8 | Functional
5 changes: 2 additions & 3 deletions plugin.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
---
name: RankSystem
name: Ranks
author: IvanCraft623
website: https://github.com/IvanCraft623/RankSystem
version: 0.0.1
main: IvanCraft623\RankSystem\RankSystem
api: 3.0.0
api: 4.0.0
permissions:
ranksystem.commands:
default: op
Expand Down
2 changes: 1 addition & 1 deletion src/IvanCraft623/RankSystem/EventListener.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public function onChat(PlayerChatEvent $event) : void {
public function onRankExpire(UserRankExpireEvent $event) : void {
$session = $event->getSession();
$rank = $event->getRank();
$player = Ranks::getInstance()->getServer()->getPlayer($session->getName());
$player = Ranks::getInstance()->getServer()->getPlayerByPrefix($session->getName());
if ($player !== null) {
$player->sendMessage("§c» §eYour §b".$rank->getName()."§e rank has expired!");
}
Expand Down
12 changes: 9 additions & 3 deletions src/IvanCraft623/RankSystem/RankSystem.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
use IvanCraft623\RankSystem\{command\RanksCommand, session\SessionManager, rank\RankManager, task\UpdateTask};
use IvanCraft623\RankSystem\provider\{Provider, YAML, SQLite3};

use pocketmine\{plugin\PluginBase, utils\Config, utils\SingletonTrait, permission\DefaultPermissions};
use pocketmine\{plugin\PluginBase, utils\Config, utils\SingletonTrait, permission\PermissionManager, permission\DefaultPermissions};

class RankSystem extends PluginBase {
use SingletonTrait;
Expand Down Expand Up @@ -75,7 +75,7 @@ public function getGlobalPerms() : array {
*/
public function getPmmpPerms() : array {
if (self::$pmDefaultPerms === []) {
foreach ($this->getServer()->getPluginManager()->getPermissions() as $permission) {
foreach (PermissionManager::getInstance()->getPermissions() as $permission) {
if (strpos($permission->getName(), DefaultPermissions::ROOT) !== false) {
self::$pmDefaultPerms[] = $permission;
}
Expand All @@ -85,7 +85,13 @@ public function getPmmpPerms() : array {
}

public function getPluginPerms(PluginBase $plugin) : array {
return $plugin->getDescription()->getPermissions();
$pluginPerms = [];
foreach ($plugin->getDescription()->getPermissions() as $default => $perms) {
foreach ($perms as $perm) {
$pluginPerms[] = $perm;
}
}
return $pluginPerms;
}

public function saveResources() : void {
Expand Down
40 changes: 40 additions & 0 deletions src/IvanCraft623/RankSystem/command/PluginCommand.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?php

declare(strict_types=1);

#Plugin by IvanCraft623 (Twitter: @IvanCraft623)

/*
8888888 .d8888b. .d888 888 .d8888b. .d8888b. .d8888b.
888 d88P Y88b d88P" 888 d88P Y88b d88P Y88b d88P Y88b
888 888 888 888 888 888 888 .d88P
888 888 888 8888b. 88888b. 888 888d888 8888b. 888888 888888 888d888b. .d88P 8888"
888 888 888 "88b 888 "88b 888 888P" "88b 888 888 888P "Y88b .od888P" "Y8b.
888 Y88 88P .d888888 888 888 888 888 888 .d888888 888 888 888 888 d88P" 888 888
888 Y8bd8P 888 888 888 888 Y88b d88P 888 888 888 888 Y88b. Y88b d88P 888" Y88b d88P
8888888 Y88P "Y888888 888 888 "Y8888P" 888 "Y888888 888 "Y888 "Y8888P" 888888888 "Y8888P"
*/

namespace IvanCraft623\RankSystem\command;

use pocketmine\command\Command;
use pocketmine\plugin\Plugin;
use pocketmine\plugin\PluginOwned;

abstract class PluginCommand extends Command implements PluginOwned {

private $owningPlugin;

public function __construct(string $name, $plugin){
parent::__construct($name);
$this->owningPlugin = $plugin;
$this->usageMessage = "";
}

/**
* @return Plugin
*/
public function getOwningPlugin() : Plugin{
return $this->owningPlugin;
}
}
16 changes: 12 additions & 4 deletions src/IvanCraft623/RankSystem/command/RanksCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@

use IvanCraft623\RankSystem\{RankSystem as Ranks, Utils, rank\RankModifier};

use pocketmine\{Server, Player, plugin\PluginBase};
use pocketmine\command\{PluginCommand, CommandSender};
use pocketmine\{Server, player\Player, plugin\PluginBase};
use pocketmine\command\{CommandSender};

class RanksCommand extends PluginCommand {

Expand Down Expand Up @@ -72,7 +72,7 @@ public function execute(CommandSender $sender, string $label, array $args) {
$sender->sendMessage("§cUse: /ranks delete <rank>");
return true;
}
if ($this->plugin->getRankManager()->exists($args[1])) {
if (!$this->plugin->getRankManager()->exists($args[1])) {
$sender->sendMessage("§c".$args[1]." rank does not exist!");
return true;
}
Expand All @@ -81,13 +81,21 @@ public function execute(CommandSender $sender, string $label, array $args) {
return true;
}
$this->plugin->getRankManager()->delete($args[1]);
$sender->sendMessage("§bYou have successfully §cdeleted§b the rank §e".$args[1]);
break;

case 'edit':
if (!$sender->hasPermission("ranksystem.commands")) {
$sender->sendMessage("§cYou do not have permission to use this command!");
return true;
}
if (!$sender instanceof Player) {
$sender->sendMessage(
"§cYou can only use this command in game!"."\n".
"§eTo edit a rank you must go to §bplugin_data/Ranks/ranks.yml §eand edit it manually."
);
return true;
}
if (!isset($args[1])) {
$sender->sendMessage("§cUse: /ranks edit <rank>");
return true;
Expand Down Expand Up @@ -296,4 +304,4 @@ public static function sendUsageMessage(CommandSender $sender) : void {
);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,10 @@

use IvanCraft623\RankSystem\{RankSystem as Ranks, session\Session};

use pocketmine\event\{Cancellable, Event};
use pocketmine\event\{Event, Cancellable, CancellableTrait};

class UserPermissionRemoveEvent extends Event implements Cancellable {
use CancellableTrait;

/** @var null $handlerList */
public static $handlerList = \null;
Expand Down
3 changes: 2 additions & 1 deletion src/IvanCraft623/RankSystem/event/UserPermissionSetEvent.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,10 @@

use IvanCraft623\RankSystem\{RankSystem as Ranks, session\Session};

use pocketmine\event\{Cancellable, Event};
use pocketmine\event\{Event, Cancellable, CancellableTrait};

class UserPermissionSetEvent extends Event implements Cancellable {
use CancellableTrait;

/** @var null $handlerList */
public static $handlerList = \null;
Expand Down
3 changes: 2 additions & 1 deletion src/IvanCraft623/RankSystem/event/UserRankRemoveEvent.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,10 @@

use IvanCraft623\RankSystem\{RankSystem as Ranks, rank\Rank, session\Session};

use pocketmine\event\{Cancellable, Event};
use pocketmine\event\{Event, Cancellable, CancellableTrait};

class UserRankRemoveEvent extends Event implements Cancellable {
use CancellableTrait;

/** @var null $handlerList */
public static $handlerList = \null;
Expand Down
3 changes: 2 additions & 1 deletion src/IvanCraft623/RankSystem/event/UserRankSetEvent.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,10 @@

use IvanCraft623\RankSystem\{RankSystem as Ranks, rank\Rank, session\Session};

use pocketmine\event\{Cancellable, Event};
use pocketmine\event\{Event, Cancellable, CancellableTrait};

class UserRankSetEvent extends Event implements Cancellable {
use CancellableTrait;

/** @var null $handlerList */
public static $handlerList = \null;
Expand Down
2 changes: 1 addition & 1 deletion src/IvanCraft623/RankSystem/form/Form.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
namespace IvanCraft623\RankSystem\form;

use pocketmine\form\Form as IForm;
use pocketmine\Player;
use pocketmine\player\Player;

abstract class Form implements IForm{

Expand Down
4 changes: 3 additions & 1 deletion src/IvanCraft623/RankSystem/provider/SQLite3.php
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,9 @@ public function getRanks(string $user) : array {
if (is_numeric($expTime)) {
$expTime = (int)$expTime;
}
$ranks[$data[0]] = $expTime;
if (Ranks::getInstance()->getRankManager()->exists($data[0])) {
$ranks[$data[0]] = $expTime;
}
}
}
}
Expand Down
5 changes: 5 additions & 0 deletions src/IvanCraft623/RankSystem/provider/YAML.php
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,11 @@ public function getRanks(string $user) : array {
if ($this->isInDb($user)) {
$all = $this->db->getAll();
$ranks = $all[$user]["ranks"];
foreach ($ranks as $rank => $expTime) {
if (!Ranks::getInstance()->getRankManager()->exists($rank)) {
unset($ranks[$rank]);
}
}
}
return $ranks;
}
Expand Down
2 changes: 1 addition & 1 deletion src/IvanCraft623/RankSystem/rank/RankModifier.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
use IvanCraft623\RankSystem\RankSystem as Ranks;
use IvanCraft623\RankSystem\form\{Form, CustomForm, ModalForm, SimpleForm};

use pocketmine\Player;
use pocketmine\player\Player;

/**
* Class RankModifier
Expand Down
13 changes: 8 additions & 5 deletions src/IvanCraft623/RankSystem/session/Session.php
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ private function loadRanks() : void {
$ranks[] = $rank;
}
if ($ranks === []) {
$ranks = [$this->plugin->getRankManager()->getDefault()];
$ranks[0] = $this->plugin->getRankManager()->getDefault();
}
$this->ranks = $manager->getHierarchical($ranks);
}
Expand Down Expand Up @@ -178,7 +178,7 @@ public function setRank(Rank $rank, $expTime = "Never") : bool {

$default = $this->plugin->getRankManager()->getDefault();
if ($rank === $default || $this->hasRank($rank)) {
$ev->setCancelled();
$ev->cancel();
return false;
}
if ($this->ranks[0] === $default) {
Expand Down Expand Up @@ -209,7 +209,7 @@ public function removeRank(Rank $rank) : bool {

$default = $this->plugin->getRankManager()->getDefault();
if ($rank === $default || !$this->hasRank($rank)) {
$ev->setCancelled();
$ev->cancel();
return false;
}
$this->unsetRank($rank);
Expand Down Expand Up @@ -277,15 +277,18 @@ public function removePermission(string $perm) : bool {

public function updateRanks() {
$this->ranks = $this->plugin->getRankManager()->getHierarchical($this->ranks);
$player = Ranks::getInstance()->getServer()->getPlayer($this->name);
if ($this->ranks === []) {
$this->ranks = [$this->plugin->getRankManager()->getDefault()];
}
$player = Ranks::getInstance()->getServer()->getPlayerExact($this->name);
if ($player !== null) {
$this->updatePermissions();
$player->setNameTag($this->getNameTagFormat());
}
}

public function updatePermissions() {
$player = Ranks::getInstance()->getServer()->getPlayer($this->name);
$player = Ranks::getInstance()->getServer()->getPlayerExact($this->name);
if ($player !== null) {
foreach ($this->attachments as $attachment) {
$player->removeAttachment($attachment);
Expand Down
2 changes: 1 addition & 1 deletion src/IvanCraft623/RankSystem/session/SessionManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
namespace IvanCraft623\RankSystem\session;

use pocketmine\utils\SingletonTrait;
use pocketmine\Player;
use pocketmine\player\Player;

final class SessionManager {
use SingletonTrait;
Expand Down
4 changes: 2 additions & 2 deletions src/IvanCraft623/RankSystem/task/UpdateTask.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@

use IvanCraft623\RankSystem\{RankSystem as Ranks, event\UserRankExpireEvent};

use pocketmine\scheduler\Task;
use pocketmine\{player\Player, Server, scheduler\Task};

class UpdateTask extends Task {

public function onRun(int $currentTick) : void {
public function onRun() : void {
#Check Expired Ranks
foreach (Ranks::getInstance()->getSessionManager()->getAll() as $session) {
foreach ($session->getTempRanks() as $rank) {
Expand Down

0 comments on commit 7bd5d85

Please sign in to comment.