PocketMine-MP 5.43.2 git-c9e7b3ab9bd2149f206392522e8eb7e9d8d68cfa
Loading...
Searching...
No Matches
EnchantOption.php
1<?php
2
3/*
4 * This file is part of BedrockProtocol.
5 * Copyright (C) 2014-2022 PocketMine Team <https://github.com/pmmp/BedrockProtocol>
6 *
7 * BedrockProtocol is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU Lesser General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 */
12
13declare(strict_types=1);
14
15namespace pocketmine\network\mcpe\protocol\types;
16
17use pmmp\encoding\Byte;
18use pmmp\encoding\ByteBufferReader;
19use pmmp\encoding\ByteBufferWriter;
20use pmmp\encoding\LE;
21use pmmp\encoding\VarInt;
23use function count;
24
25final class EnchantOption{
31 public function __construct(
32 private int $cost,
33 private int $slotFlags,
34 private array $equipActivatedEnchantments,
35 private array $heldActivatedEnchantments,
36 private array $selfActivatedEnchantments,
37 private string $name,
38 private int $optionId
39 ){}
40
41 public function getCost() : int{ return $this->cost; }
42
43 public function getSlotFlags() : int{ return $this->slotFlags; }
44
46 public function getEquipActivatedEnchantments() : array{ return $this->equipActivatedEnchantments; }
47
49 public function getHeldActivatedEnchantments() : array{ return $this->heldActivatedEnchantments; }
50
52 public function getSelfActivatedEnchantments() : array{ return $this->selfActivatedEnchantments; }
53
54 public function getName() : string{ return $this->name; }
55
56 public function getOptionId() : int{ return $this->optionId; }
57
61 private static function readEnchantList(ByteBufferReader $in) : array{
62 $result = [];
63 for($i = 0, $len = VarInt::readUnsignedInt($in); $i < $len; ++$i){
64 $result[] = Enchant::read($in);
65 }
66 return $result;
67 }
68
72 private static function writeEnchantList(ByteBufferWriter $out, array $list) : void{
73 VarInt::writeUnsignedInt($out, count($list));
74 foreach($list as $item){
75 $item->write($out);
76 }
77 }
78
79 public static function read(ByteBufferReader $in) : self{
80 $cost = Byte::readUnsigned($in);
81
82 $slotFlags = LE::readUnsignedInt($in);
83 $equipActivatedEnchants = self::readEnchantList($in);
84 $heldActivatedEnchants = self::readEnchantList($in);
85 $selfActivatedEnchants = self::readEnchantList($in);
86
87 $name = CommonTypes::getString($in);
88 $optionId = CommonTypes::readRecipeNetId($in);
89
90 return new self($cost, $slotFlags, $equipActivatedEnchants, $heldActivatedEnchants, $selfActivatedEnchants, $name, $optionId);
91 }
92
93 public function write(ByteBufferWriter $out) : void{
94 Byte::writeUnsigned($out, $this->cost);
95
96 LE::writeUnsignedInt($out, $this->slotFlags);
97 self::writeEnchantList($out, $this->equipActivatedEnchantments);
98 self::writeEnchantList($out, $this->heldActivatedEnchantments);
99 self::writeEnchantList($out, $this->selfActivatedEnchantments);
100
101 CommonTypes::putString($out, $this->name);
102 CommonTypes::writeRecipeNetId($out, $this->optionId);
103 }
104}
__construct(private int $cost, private int $slotFlags, private array $equipActivatedEnchantments, private array $heldActivatedEnchantments, private array $selfActivatedEnchantments, private string $name, private int $optionId)