Вот код: <?php
namespace MWS;
use pocketmine\player\Player;
use pocketmine\Server;
use pocketmine\plugin\PluginBase;
use pocketmine\event\Listener;
use pocketmine\entity\Effect;
use pocketmine\entity\EffectInstance;
use pocketmine\network\mcpe\protocol\AddActorPacket;
use pocketmine\network\mcpe\protocol\PlaySoundPacket;
use pocketmine\event\player\PlayerInteractEvent;
use pocketmine\block\Block;
use pocketmine\item\ItemFactory;
use pocketmine\item\ItemIds;
use pocketmine\item\enchantment\Enchantment;
use pocketmine\math\Vector3;
use pocketmine\world\particle\BlockBreakParticle;
use pocketmine\world\World;
use pocketmine\world\Position;
use MWS\sound\Thunder;
class Loader extends PluginBase implements Listener {
private $money = [];
private $item = [];
private $effect = [];
public function onEnable(): void {
$this->getServer()->getPluginManager()->registerEvents($this, $this);
$this->eco = $this->getServer()->getPluginManager()->getPlugin("EconomyAPI");
$this->getLogger()->info("Plugin enabled");
}
public function onInteract(PlayerInteractEvent $event) {
$player = $event->getPlayer();
$name = $player->getName();
$block = $event->getBlock();
$pos = $block->getPosition();
if ($pos->getX() == -8422 && $pos->getY() == 70 && $pos->getZ() == -6616) {
// Бонус монет
$this->giveBonus($player, $name);
}
elseif ($pos->getX() == -8409 && $pos->getY() == 69 && $pos->getZ() == -6629) {
// Рандом вещи
$this->giveRandomItem($player, $name);
}
elseif ($pos->getX() == -8407 && $pos->getY() == 69 && $pos->getZ() == -6630) {
// ПвП кейс
$this->openPvPCase($player, $name);
}
elseif ($pos->getX() == -8405 && $pos->getY() == 69 && $pos->getZ() == -6628) {
// Эффекты
$this->giveEffects($player, $name);
}
}
private function giveBonus(Player $player, string $name) {
if (empty($this->money[$name]) || $this->money[$name] <= time()) {
$this->money[$name] = time() + 3600;
$amount = mt_rand(1000, 5000);
$this->spawnThunder($player);
$this->eco->addMoney($player, $amount);
$player->sendTitle("§bБОНУС", "§6Ты успешно получил §bбонус");
$player->sendMessage("§a+$amount §fмонет!");
}
else {
$player->sendMessage("§cТы уже получал бонус!");
}
}
private function giveRandomItem(Player $player, string $name) {
if (empty($this->item[$name]) || $this->item[$name] <= time()) {
$this->item[$name] = time() + 3600;
$items = [
ItemTypeIds::WHEAT => mt_rand(0, 1),
ItemTypeIds::IRON_CHESTPLATE => mt_rand(0, 1),
ItemTypeIds::IRON_LEGGINGS => mt_rand(0, 1),
ItemTypeIds::IRON_BOOTS => mt_rand(0, 1),
ItemTypeIds::IRON_SWORD => mt_rand(0, 1),
ItemTypeIds::GOLDEN_APPLE => mt_rand(0, 16)
];
$this->spawnThunder($player);
foreach ($items as $item => $amount) {
$player->getInventory()->addItem(ItemFactory::get($item, $amount));
}
$player->sendTitle("§bБОНУС", "§6Ты успешно получил §bнабор");
}
else {
$player->sendMessage("§cТы уже получал бонус!");
}
}
private function openPvPCase(Player $player, string $name) {
if ($this->eco->reduceMoney($player, 1500)) {
$lightning = AddActorPacket::create(Entity::nextRuntimeId(), 1, “minecraft:lightning_bolt”, $player->getPosition()->asVector3(), null, $player->getLocation()->getYaw(), $player->getLocation()->getPitch(), 0.0, 0.0, [], [], []);
$blockParticle = new BlockBreakParticle($player->getWorld()->getBlock($player->getPosition()->floor()->down()));
$player->getWorld()->addParticle($player->getPosition(), $blockParticle, $player->getWorld()->getPlayers());
$thunderSound = PlaySoundPacket::create(“ambient.weather.thunder”, $player->getX(), $player->getY(), $player->getZ(), 1, 1);
Server::getInstance()->broadcastPackets($player->getWorld()->getPlayers(), [$lightning, $thunderSound]);
$item1 = ItemFactory::get(mt_rand(298, 317), 0, 1);
$item2 = ItemFactory::get(mt_rand(298, 317), 0, 1);
$this->spawnThunder($player);
$item1->addEnchantment(Enchantment::getEnchantment(0)->setLevel(mt_rand(2,4)));
$item1->addEnchantment(Enchantment::getEnchantment(0)->setLevel(mt_rand(1,4)));
$player->getInventory()->addItem($item1);
$player->getInventory()->addItem($item2);
$player->sendMessage("§aУспешно открыл PvP-Case!");
}
else {
$player->sendMessage("§cНедостаточно денег!");
}
}
private function giveEffects(Player $player, string $name) {
if (empty($this->effect[$name]) || $this->effect[$name] <= time()) {
$this->effect[$name] = time() + 3600;
$this->spawnThunder($player);
$player->addEffect(new EffectInstance(Effect::SPEED, 20 * 90, 0));
$player->addEffect(new EffectInstance(Effect::STRENGTH, 20 * 120, 0));
$player->addEffect(new EffectInstance(Effect::RESISTANCE, 20 * 120, 0));
$player->sendTitle("§bБОНУС", "§6Получил эффекты");
}
else {
$player->sendMessage("§cТы уже получал эффекты!");
}
}
private function spawnThunder(Player $player) {
$pos = $player->getPosition();
$world = $player->getWorld();
/** @var \pocketmine\Player $player */
$packet = new \pocketmine\network\protocol\AddActorPacket();
$pos = $player->getPosition();
$light2 = AddActorPacket::create(Entity::nextRuntimeId(), 1, “minecraft:lightning_bolt”, $player->getPosition()->asVector3(), null, $player->getLocation()->getYaw(), $player->getLocation()->getPitch(), 0.0, 0.0, [], [], []);
$block = $player->getWorld()->getBlock($player->getPosition()->floor()->down());
$particle = new BlockBreakParticle($block);
$player->getWorld()->addParticle($pos, $particle, $player->getWorld()->getPlayers());
$sound2 = PlaySoundPacket::create(“ambient.weather.thunder”, $pos->getX(), $pos->getY(), $pos->getZ(), 1, 1);
Server::getInstance()->broadcastPackets($player->getWorld()->getPlayers(), [$light2, $sound2]);
Thunder::sendSound($player, ‘ambient.weather.thunder’, true);
}
}