Skip to content
This repository was archived by the owner on Apr 1, 2024. It is now read-only.

Commit 7cba4a7

Browse files
Merge pull request #10 from ArkaniaStudios/dev
Fix
2 parents ab743bd + a3ed3f5 commit 7cba4a7

23 files changed

+249
-711
lines changed

.php-cs-fixer.php

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use PhpCsFixer\Finder;
99

1010
$finder = Finder::create()
11+
->exclude('src/utils/promise/')
1112
->in('src/');
1213

1314
return (new Config())

plugin.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: Arkania-Ange
2-
version: 0.2.1-beta
2+
version: 1.0.0
33
main: arkania\Engine
44
src-namespace-prefix: arkania
55
api: 5.0.0

resources/data/en_US.lang

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ player.not.found=§cLe joueur {%0} n'a pas été trouvé.
1717
form.cant.use.button=§cVous ne pouvez pas utiliser ce bouton.
1818
form.cant.open=§cVous ne pouvez pas ouvrir ce formulaire.
1919

20+
command.argument.invalid=§cArgument invalide. Utilisation: {%0}
2021
command.language.description=Changer votre langage.
2122
command.language.changed=§aVotre langage a été changé en §e{%0}§a.
2223
command.maintenance.description=Activer ou désactiver la maintenance.

resources/data/fr_FR.lang

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ player.not.found=§cLe joueur {%0} n'a pas été trouvé.
1717
form.cant.use.button=§cVous ne pouvez pas utiliser ce bouton.
1818
form.cant.open=§cVous ne pouvez pas ouvrir ce formulaire.
1919

20+
command.argument.invalid=§cArgument invalide. Utilisation: {%0}
2021
command.language.description=Changer votre langage.
2122
command.language.changed=§aVotre langage a été changé en §e{%0}§a.
2223
command.maintenance.description=Activer ou désactiver la maintenance.

src/Engine.php

+3-9
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@
5050
use arkania\player\permissions\PermissionsBase;
5151
use arkania\player\permissions\PermissionsManager;
5252
use arkania\plugins\ServerLoader;
53-
use arkania\rank\RankManager;
5453
use arkania\utils\AlreadyInstantiatedException;
5554
use arkania\utils\BadExtensionException;
5655
use arkania\utils\Loader;
@@ -62,7 +61,9 @@
6261
use pocketmine\utils\SingletonTrait;
6362
use ReflectionException;
6463
use Symfony\Component\Filesystem\Path;
64+
6565
use function count;
66+
6667
use const PHP_VERSION;
6768

6869
require_once __DIR__ . '/CoreConstants.php';
@@ -86,7 +87,6 @@ class Engine extends PluginBase {
8687
private CommandCache $commandCache;
8788
private ItemManager $itemManager;
8889
private ResourcePackManager $resourcePackManager;
89-
private RankManager $rankManager;
9090

9191
/**
9292
* @throws BadExtensionException
@@ -109,7 +109,6 @@ protected function onLoad() : void {
109109
$this->commandCache = new CommandCache($this);
110110
$this->itemManager = new ItemManager();
111111
$this->resourcePackManager = new ResourcePackManager($this);
112-
$this->rankManager = new RankManager($this);
113112
new Loader();
114113

115114
$this->getServerManager()->addServer(
@@ -145,7 +144,7 @@ protected function onEnable() : void {
145144
new PluginCommand(),
146145
new ReplyCommand(),
147146
new TellCommand(),
148-
new VersionCommand(),
147+
new VersionCommand()
149148
);
150149

151150
$this->getListenerManager()->registerListeners(
@@ -261,9 +260,4 @@ public function getItemManager() : ItemManager {
261260
public function getResourcePackManager() : ResourcePackManager {
262261
return $this->resourcePackManager;
263262
}
264-
265-
public function getRankManager() : RankManager {
266-
return $this->rankManager;
267-
}
268-
269263
}

src/VersionInfo.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131

3232
final class VersionInfo {
3333
public const NAME = "ArkaniaStudios-Ange";
34-
public const BASE_VERSION = "0.0.1-beta";
34+
public const BASE_VERSION = "1.0.0";
3535
public const IS_DEVELOPMENT_BUILD = true;
3636
public const BUILD_CHANNEL = "stable";
3737

src/commands/CommandBase.php

+82-72
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
use arkania\commands\parameters\Parameter;
2626
use arkania\commands\parameters\TextParameter;
27+
use arkania\lang\KnownTranslationsFactory;
2728
use InvalidArgumentException;
2829
use pocketmine\command\Command;
2930
use pocketmine\command\CommandSender;
@@ -63,31 +64,37 @@ public function __construct(
6364
abstract public function onRun(CommandSender $sender, array $parameters) : void;
6465
abstract public function getCommandParameter() : array;
6566

66-
final public function execute(CommandSender $sender, string $commandLabel, array $args) : void {
67-
$passArgs = [];
68-
if (count($args) > 0) {
69-
if (isset($this->subCommands[($label = $args[0])])) {
70-
$cmd = $this->subCommands[$label];
71-
if (!$cmd->testPermissionSilent($sender)) {
72-
$sender->sendMessage(KnownTranslationFactory::commands_generic_permission());
73-
return;
74-
}
75-
$cmd->execute($sender, $commandLabel, array_slice($args, 1));
76-
return;
77-
}
78-
$passArgs = $this->parseArguments($args, $sender);
79-
} elseif (!empty($this->parameters)) {
80-
$sender->sendMessage(KnownTranslationFactory::commands_generic_usage($this->usageMessage ?? '/' . $this->getName()));
81-
return;
82-
}
83-
if ($passArgs !== null) {
84-
try {
85-
$this->onRun($sender, $passArgs);
86-
} catch (InvalidCommandSyntaxException) {
87-
$sender->sendMessage(KnownTranslationFactory::commands_generic_usage($this->usageMessage ?? '/' . $this->getName()));
88-
}
89-
}
90-
}
67+
final public function execute(CommandSender $sender, string $commandLabel, array $args) : void {
68+
$passArgs = [];
69+
if (count($args) > 0) {
70+
if (isset($this->subCommands[($label = $args[0])])) {
71+
$cmd = $this->subCommands[$label];
72+
if (!$cmd->testPermissionSilent($sender)) {
73+
$sender->sendMessage(KnownTranslationFactory::commands_generic_permission());
74+
return;
75+
}
76+
$cmd->execute($sender, $commandLabel, array_slice($args, 1));
77+
return;
78+
}
79+
$passArgs = $this->parseArguments($args, $sender);
80+
} elseif (!empty($this->parameters)) {
81+
foreach ($this->parameters as $parameter) {
82+
if (!$parameter[0]->isOptional()) {
83+
$sender->sendMessage(KnownTranslationFactory::commands_generic_usage($this->usageMessage ?? '/' . $this->getName()));
84+
return;
85+
}
86+
}
87+
}
88+
if ($passArgs !== null) {
89+
try {
90+
$this->onRun($sender, $passArgs);
91+
} catch (InvalidCommandSyntaxException $e) {
92+
if (!$e->getParameter()->isOptional()) {
93+
$sender->sendMessage(KnownTranslationFactory::commands_generic_usage($this->usageMessage ?? '/' . $this->getName()));
94+
}
95+
}
96+
}
97+
}
9198

9299
public function addParameter(int $position, Parameter $parameter) : void {
93100
if($position < 0) {
@@ -107,54 +114,57 @@ public function addParameter(int $position, Parameter $parameter) : void {
107114
$this->parameters[$position][] = $parameter;
108115
}
109116

110-
private function parseArguments(array $rawArgs, CommandSender $sender) : array {
111-
$return = [];
112-
if(!!empty($this->parameters) && count($rawArgs) > 0) {
113-
return $return;
114-
}
115-
$offset = 0;
116-
if(count($rawArgs) > 0) {
117-
foreach ($this->parameters as $position => $parameter) {
118-
usort($parameter, function (Parameter $a, Parameter $b) : int {
119-
if ($a->getSpanLength() === PHP_INT_MAX) {
120-
return 1;
121-
}
117+
private function parseArguments(array $rawArgs, CommandSender $sender) : ?array {
118+
$return = [];
119+
if(!!empty($this->parameters) && count($rawArgs) > 0) {
120+
return $return;
121+
}
122+
$offset = 0;
123+
if(count($rawArgs) > 0) {
124+
foreach ($this->parameters as $position => $parameter) {
125+
usort($parameter, function (Parameter $a, Parameter $b) : int {
126+
if ($a->getSpanLength() === PHP_INT_MAX) {
127+
return 1;
128+
}
122129

123-
return -1;
124-
});
125-
$parsed = false;
126-
$optional = true;
127-
foreach ($parameter as $param) {
128-
$p = trim(implode(" ", array_slice($rawArgs, $offset, ($len = $param->getSpanLength()))));
129-
if (!$param->isOptional()) {
130-
$optional = false;
131-
}
132-
if ($p !== "" && $param->canParse($p, $sender)) {
133-
$k = $param->getName();
134-
$result = (clone $param)->parse($p, $sender);
135-
if (isset($return[$k]) && !is_array($return[$k])) {
136-
$old = $return[$k];
137-
unset($return[$k]);
138-
$return[$k] = [$old];
139-
$return[$k][] = $result;
140-
} else {
141-
$return[$k] = $result;
142-
}
143-
$offset += $len;
144-
$parsed = true;
145-
break;
146-
}
147-
if ($offset > count($rawArgs)) {
148-
break;
149-
}
150-
}
151-
if (!$parsed && !($optional && empty($arg))) {
152-
return $return;
153-
}
154-
}
155-
}
156-
return $return;
157-
}
130+
return -1;
131+
});
132+
$parsed = false;
133+
$optional = false;
134+
foreach ($parameter as $param) {
135+
$p = trim(implode(" ", array_slice($rawArgs, $offset, ($len = $param->getSpanLength()))));
136+
if ($param->isOptional()) {
137+
$optional = true;
138+
}
139+
if ($p !== "" && $param->canParse($p, $sender)) {
140+
$k = $param->getName();
141+
$result = (clone $param)->parse($p, $sender);
142+
if (isset($return[$k]) && !is_array($return[$k])) {
143+
$old = $return[$k];
144+
unset($return[$k]);
145+
$return[$k] = [$old];
146+
$return[$k][] = $result;
147+
} else {
148+
$return[$k] = $result;
149+
}
150+
$offset += $len;
151+
$parsed = true;
152+
break;
153+
} else if ($param->isOptional()) {
154+
$parsed = true;
155+
break;
156+
} else {
157+
$sender->sendMessage(KnownTranslationsFactory::command_argument_invalid($param->getName()));
158+
return null;
159+
}
160+
}
161+
if (!$parsed && !$optional) {
162+
return $return;
163+
}
164+
}
165+
}
166+
return $return;
167+
}
158168

159169
public function getParameters() : array {
160170
return $this->parameters;

src/commands/InvalidCommandSyntax.php

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
declare(strict_types=1);
3+
4+
namespace arkania\commands;
5+
6+
use arkania\commands\parameters\Parameter;
7+
use MongoDB\Driver\Exception\CommandException;
8+
use Throwable;
9+
10+
class InvalidCommandSyntax extends CommandException {
11+
12+
private Parameter $parameter;
13+
14+
public function __construct(
15+
Parameter $parameter,
16+
string $message = "",
17+
int $code = 0,
18+
?Throwable $previous = null
19+
) {
20+
$this->parameter = $parameter;
21+
parent::__construct($message, $code, $previous);
22+
}
23+
24+
public function getParameter() : Parameter{
25+
return $this->parameter;
26+
}
27+
28+
}

src/item/ItemManager.php

+10-3
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
use pocketmine\world\format\io\GlobalItemDataHandlers;
4242
use ReflectionClass;
4343
use ReflectionException;
44+
4445
use function array_keys;
4546
use function array_map;
4647
use function count;
@@ -52,9 +53,12 @@
5253
use function range;
5354

5455
class ItemManager {
55-
public function __construct(
56+
public static function get() : self {
57+
return new self();
58+
}
59+
60+
public function __construct() {
5661

57-
) {
5862
$this->registerItem(
5963
ItemTypesNames::ITEM_TEST,
6064
ExtraItems::ITEM_TEST(),
@@ -70,6 +74,10 @@ public function __construct(
7074
/** @var ItemTypeEntry[] */
7175
private array $itemsEntries = [];
7276

77+
/**
78+
* @throws ReflectionException
79+
* @throws Exception
80+
*/
7381
public function registerItem(string $id, BaseItem $item, array $stringToItemParserNames) : void {
7482
GlobalItemDataHandlers::getDeserializer()->map($id, fn () => clone $item);
7583
GlobalItemDataHandlers::getSerializer()->map($item, fn () => new SavedItemData($id));
@@ -142,5 +150,4 @@ private static function getArrayTag(array $array) : Tag {
142150
}
143151
return $tag;
144152
}
145-
146153
}

src/item/listener/DataPacketSendListener.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public function onDataPacketSend(DataPacketSendEvent $event) : void {
4646
);
4747
}
4848
} elseif($packet instanceof StartGamePacket) {
49-
$packet->itemTable = array_merge($packet->itemTable, $itemManager->getItemsEntries());
49+
$packet->itemTable = array_merge($packet->itemTable, $itemManager->getItemsEntries());
5050
} elseif($packet instanceof ResourcePackStackPacket) {
5151
$packet->experiments = new Experiments([
5252
"data_driven_items" => true

0 commit comments

Comments
 (0)