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

Commit 5c5c511

Browse files
authored
Merge pull request #12 from Xenophilicy/PM4
API 4.0.0 support merging to master.
2 parents 6d5b05c + 3a337de commit 5c5c511

File tree

3 files changed

+31
-36
lines changed

3 files changed

+31
-36
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ MaxEnchants is a simple plugin to allow servers to take full advantage of the en
1717
***
1818

1919
## MaxEnchants Details
20-
* **API:** 3.0.0+
20+
* **API:** 4.0.0+
2121
* **Version:** 1.2.0
2222
* **Basic Description:** Enchant items up to level 32k!
2323
* *Simple code for editing and debugging*

plugin.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: MaxEnchants
22
author: Xenophilicy
33
version: 1.2.1
44
main: Xenophilicy\MaxEnchants\MaxEnchants
5-
api: 3.0.0
5+
api: 4.0.0
66
description: Enable enchants up to level 32k!
77
commands:
88
maxenchants:

src/Xenophilicy/MaxEnchants/MaxEnchants.php

Lines changed: 29 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -16,39 +16,38 @@
1616
namespace Xenophilicy\MaxEnchants;
1717

1818
use pocketmine\command\{Command, CommandSender, PluginCommand};
19+
use pocketmine\data\bedrock\EnchantmentIdMap;
1920
use pocketmine\event\Listener;
20-
use pocketmine\item\enchantment\{Enchantment, EnchantmentInstance};
21-
use pocketmine\Player;
21+
use pocketmine\item\enchantment\{Enchantment, EnchantmentInstance, StringToEnchantmentParser};
22+
use pocketmine\player\Player;
2223
use pocketmine\plugin\PluginBase;
2324
use pocketmine\utils\{Config, TextFormat as TF};
25+
use ReflectionClass;
2426

2527
/**
2628
* Class MaxEnchants
2729
* @package Xenophilicy\MaxEnchants
2830
*/
2931
class MaxEnchants extends PluginBase implements Listener {
3032

31-
/**
32-
* @var string
33-
*/
34-
private $pluginVersion;
35-
private $customMaxLevels;
36-
/**
37-
* @var mixed|string|string[]|null
38-
*/
39-
private $cmdName;
40-
/**
41-
* @var bool|int|mixed
42-
*/
43-
private $maxLevel;
44-
private $vanillaEnchants;
33+
/** @var string*/
34+
private string $pluginVersion;
35+
/** @var array*/
36+
private array $customMaxLevels;
37+
/** @var mixed|null*/
38+
private mixed $cmdName;
39+
/** @var Config*/
40+
private Config $config;
41+
/** @var mixed*/
42+
private mixed $maxLevel;
43+
/** @var array*/
44+
private array $vanillaEnchants;
4545

46-
public function onEnable(){
46+
public function onEnable(): void{
4747
$pluginManager = $this->getServer()->getPluginManager();
4848
$pluginManager->registerEvents($this, $this);
4949
$this->saveDefaultConfig();
5050
$this->config = new Config($this->getDataFolder() . "config.yml", Config::YAML);
51-
$this->config->getAll();
5251
$version = $this->config->get("VERSION");
5352
$this->pluginVersion = $this->getDescription()->getVersion();
5453
if($version < "1.2.0"){
@@ -70,7 +69,7 @@ public function onEnable(){
7069
$this->buildVanillaEnchantArray();
7170
$maxLevels = $this->config->get("Custom-Max-Levels");
7271
if($maxLevels !== false){
73-
if(is_null($maxLevels) || $maxLevels == "" || !is_array($maxLevels)){
72+
if($maxLevels == "" || !is_array($maxLevels)){
7473
$this->getLogger()->critical("Invalid custom max levels array found, disabling plugin...");
7574
$pluginManager->disablePlugin($this);
7675
return;
@@ -79,18 +78,17 @@ public function onEnable(){
7978
if(!is_int($id) || !is_int($level) || !$this->isValidEnchant($id)){
8079
$this->getLogger()->warning("Invalid max level found at $id, it will not be included!");
8180
}else{
82-
$enchantment = Enchantment::getEnchantment($id);
81+
$enchantment = EnchantmentIdMap::getInstance()->fromId($id);
8382
$this->customMaxLevels[$enchantment->getName()] = $level;
8483
}
8584
}
8685
}
8786
}
8887
$this->maxLevel = $this->config->get("Max-Level") >= 32767 ? 32767 : $this->config->get("Max-Level");
8988
$this->cmdName = str_replace("/", "", $this->config->getNested("Command.Name"));
90-
if(is_null($this->cmdName) || $this->cmdName == ""){
89+
if($this->cmdName == ""){
9190
$this->getLogger()->critical("Invalid enchant command string found, disabling plugin...");
9291
$pluginManager->disablePlugin($this);
93-
return;
9492
}else{
9593
if(($cmdInstance = $this->getServer()->getCommandMap()->getCommand($this->cmdName)) instanceof Command){
9694
if($this->config->getNested("Command.Override")){
@@ -102,7 +100,7 @@ public function onEnable(){
102100
return;
103101
}
104102
}
105-
$cmd = new PluginCommand($this->cmdName, $this);
103+
$cmd = new PluginCommand($this->cmdName, $this, $this);
106104
$cmd->setDescription($this->config->getNested("Command.Description"));
107105
if($this->config->getNested("Command.Permission.Enabled")){
108106
$cmd->setPermission($this->config->getNested("Command.Permission.Node"));
@@ -113,19 +111,18 @@ public function onEnable(){
113111

114112
private function buildVanillaEnchantArray(): void{
115113
$this->vanillaEnchants = [];
116-
$reflection = new \ReflectionClass(Enchantment::class);
114+
$reflection = new ReflectionClass(Enchantment::class);
117115
$lastId = -1;
118116
foreach($reflection->getConstants() as $name => $id){
119117
$lastId++;
120118
if($id !== $lastId){
121119
break;
122120
}
123-
$enchantment = Enchantment::getEnchantment($id);
121+
$enchantment = EnchantmentIdMap::getInstance()->fromId($id);
124122
if($enchantment instanceof Enchantment){
125123
$this->vanillaEnchants[$enchantment->getName()] = [ucwords(strtolower(str_replace("_", " ", $name))), $lastId];
126124
}
127125
}
128-
return;
129126
}
130127

131128
/**
@@ -160,7 +157,7 @@ private function enchantItem(CommandSender $sender, array $args): void{
160157
$sender->sendMessage(TF::RED . "Usage: /" . $this->cmdName . " <player> <enchantment ID> [level]");
161158
return;
162159
}
163-
if(($player = $sender->getServer()->getPlayer($args[0])) === null){
160+
if(($player = $sender->getServer()->getPlayerByPrefix($args[0])) === null){
164161
$sender->sendMessage(TF::RED . "Player not found");
165162
return;
166163
}
@@ -169,9 +166,9 @@ private function enchantItem(CommandSender $sender, array $args): void{
169166
return;
170167
}
171168
if(is_numeric($args[1])){
172-
$enchantment = Enchantment::getEnchantment((int)$args[1]);
169+
$enchantment = EnchantmentIdMap::getInstance()->fromId((int)$args[1]);
173170
}else{
174-
$enchantment = Enchantment::getEnchantmentByName($args[1]);
171+
$enchantment = StringToEnchantmentParser::getInstance()->parse($args[1]);
175172
}
176173
if(!($enchantment instanceof Enchantment)){
177174
$sender->sendMessage(TF::RED . "There is no such enchantment with ID " . TF::YELLOW . $args[1]);
@@ -203,7 +200,6 @@ private function enchantItem(CommandSender $sender, array $args): void{
203200
$player->getInventory()->setItemInHand($item);
204201
$enchantmentName = $this->vanillaEnchants[$enchantment->getName()][0] ?? $enchantment->getName();
205202
$this->broadcast($enchantmentName, $level, $player, $sender);
206-
return;
207203
}
208204

209205
/**
@@ -226,16 +222,15 @@ private function broadcast(string $name, string $level, Player $target, $sender)
226222
$msgString = str_replace("&", "§", $msgString);
227223
if($include !== "" && !is_null($include) && $include !== []){
228224
$include = strtolower(implode(",", $include));
229-
if(strpos($include, "console") !== false){
225+
if(str_contains($include, "console")){
230226
$this->getLogger()->info(TF::clean($msgString));
231227
}
232-
if(strpos($include, "target") !== false){
228+
if(str_contains($include, "target")){
233229
$target->sendMessage($msgString);
234230
}
235-
if(strpos($include, "sender") !== false && $sender instanceof Player){
231+
if(str_contains($include, "sender") && $sender instanceof Player){
236232
$sender->sendMessage($msgString);
237233
}
238234
}
239-
return;
240235
}
241236
}

0 commit comments

Comments
 (0)