GenisysPro  for Minecraft PE/Windows 10 v1.1.x
Feature-rich server software for Minecraft PE and Windows 10 Edition
BaseInventory Class Reference

Public Member Functions

 __construct (InventoryHolder $holder, InventoryType $type, array $items=[], $overrideSize=null, $overrideTitle=null)
 
 __destruct ()
 
 getSize ()
 
 getHotbarSize ()
 
 setSize ($size)
 
 getMaxStackSize ()
 
 getName ()
 
 getTitle ()
 
 getItem ($index)
 
 getContents ()
 
 setContents (array $items, $send=true)
 
 setItem ($index, Item $item, $send=true)
 
 contains (Item $item)
 
 slotContains ($slot, Item $item, $matchCount=false)
 
 all (Item $item)
 
 remove (Item $item, $send=true)
 
 first (Item $item)
 
 firstEmpty ()
 
 firstOccupied ()
 
 canAddItem (Item $item)
 
 clear ($index, $send=true)
 
 clearAll ($send=true)
 
 getViewers ()
 
 getHolder ()
 
 setMaxStackSize ($size)
 
 open (Player $who)
 
 close (Player $who)
 
 onOpen (Player $who)
 
 onClose (Player $who)
 
 onSlotChange ($index, $before, $send)
 
 processSlotChange (Transaction $transaction)
 
 sendContents ($target)
 
 sendSlot ($index, $target)
 
 getType ()
 
- Public Member Functions inherited from Inventory
 setItem ($index, Item $item)
 
 addItem (... $slots)
 
 removeItem (... $slots)
 
 setContents (array $items)
 
 remove (Item $item)
 
 clear ($index)
 
 clearAll ()
 

Protected Attributes

 $type
 
 $maxStackSize = Inventory::MAX_STACK
 
 $size
 
 $name
 
 $title
 
 $slots = []
 
 $viewers = []
 
 $holder
 

Additional Inherited Members

- Data Fields inherited from Inventory
const MAX_STACK = 64
 

Constructor & Destructor Documentation

◆ __construct()

__construct ( InventoryHolder  $holder,
InventoryType  $type,
array  $items = [],
  $overrideSize = null,
  $overrideTitle = null 
)
Parameters
InventoryHolder$holder
InventoryType$type
Item[]$items
int$overrideSize
string$overrideTitle
59  {
60  $this->holder = $holder;
61 
62  $this->type = $type;
63  if($overrideSize !== null){
64  $this->size = (int) $overrideSize;
65  }else{
66  $this->size = $this->type->getDefaultSize();
67  }
68 
69  if($overrideTitle !== null){
70  $this->title = $overrideTitle;
71  }else{
72  $this->title = $this->type->getDefaultTitle();
73  }
74 
75  $this->name = $this->type->getDefaultTitle();
76 
77  $this->setContents($items);
78  }

◆ __destruct()

__destruct ( )
80  {
81  $this->holder = null;
82  $this->slots = [];
83  }

Member Function Documentation

◆ all()

all ( Item  $item)
Parameters
Item$item
Returns
array

Implements Inventory.

239  {
240  $slots = [];
241  $checkDamage = !$item->hasAnyDamageValue();
242  $checkTags = $item->hasCompoundTag();
243  foreach($this->getContents() as $index => $i){
244  if($item->equals($i, $checkDamage, $checkTags)){
245  $slots[$index] = $i;
246  }
247  }
248 
249  return $slots;
250  }

◆ canAddItem()

canAddItem ( Item  $item)
Parameters
Item$item
Returns
bool

Implements Inventory.

318  {
319  $item = clone $item;
320  $checkDamage = !$item->hasAnyDamageValue();
321  $checkTags = $item->hasCompoundTag();
322  for($i = 0; $i < $this->getSize(); ++$i){
323  $slot = $this->getItem($i);
324  if($item->equals($slot, $checkDamage, $checkTags)){
325  if(($diff = $slot->getMaxStackSize() - $slot->getCount()) > 0){
326  $item->setCount($item->getCount() - $diff);
327  }
328  }elseif($slot->getId() === Item::AIR){
329  $item->setCount($item->getCount() - $this->getMaxStackSize());
330  }
331 
332  if($item->getCount() <= 0){
333  return true;
334  }
335  }
336 
337  return false;
338  }

◆ clear()

clear (   $index,
  $send = true 
)
Parameters
int$index
bool$send
Returns
bool
455  {
456  if(isset($this->slots[$index])){
457  $item = Item::get(Item::AIR, 0, 0);
458  $old = $this->slots[$index];
459  $holder = $this->getHolder();
460  if($holder instanceof Entity){
461  Server::getInstance()->getPluginManager()->callEvent($ev = new EntityInventoryChangeEvent($holder, $old, $item, $index));
462  if($ev->isCancelled()){
463  $this->sendSlot($index, $this->getViewers());
464  return false;
465  }
466  $item = $ev->getNewItem();
467  }
468  if($item->getId() !== Item::AIR){
469  $this->slots[$index] = clone $item;
470  }else{
471  unset($this->slots[$index]);
472  }
473  $this->onSlotChange($index, $old, $send);
474  }
475 
476  return true;
477  }

◆ clearAll()

clearAll (   $send = true)
Parameters
bool$send
482  {
483  foreach($this->getContents() as $index => $i){
484  $this->clear($index, $send);
485  }
486  }

◆ close()

close ( Player  $who)
Parameters
Player$who
Returns
mixed|void

Implements Inventory.

529  {
530  $this->onClose($who);
531  }

◆ contains()

contains ( Item  $item)
Parameters
Item$item
Returns
bool

Implements Inventory.

203  {
204  $count = max(1, $item->getCount());
205  $checkDamage = !$item->hasAnyDamageValue();
206  $checkTags = $item->hasCompoundTag();
207  foreach($this->getContents() as $i){
208  if($item->equals($i, $checkDamage, $checkTags)){
209  $count -= $i->getCount();
210  if($count <= 0){
211  return true;
212  }
213  }
214  }
215 
216  return false;
217  }

◆ first()

first ( Item  $item)
Parameters
Item$item
Returns
int|string

Implements Inventory.

274  {
275  $count = max(1, $item->getCount());
276  $checkDamage = !$item->hasAnyDamageValue();
277  $checkTags = $item->hasCompoundTag();
278 
279  foreach($this->getContents() as $index => $i){
280  if($item->equals($i, $checkDamage, $checkTags) and $i->getCount() >= $count){
281  return $index;
282  }
283  }
284 
285  return -1;
286  }

◆ firstEmpty()

firstEmpty ( )
Returns
int

Implements Inventory.

291  {
292  for($i = 0; $i < $this->size; ++$i){
293  if($this->getItem($i)->getId() === Item::AIR){
294  return $i;
295  }
296  }
297 
298  return -1;
299  }

◆ firstOccupied()

firstOccupied ( )
Returns
int
304  {
305  for($i = 0; $i < $this->size; $i++){
306  if(($item = $this->getItem($i))->getId() !== Item::AIR and $item->getCount() > 0){
307  return $i;
308  }
309  }
310  return -1;
311  }

◆ getContents()

getContents ( )
Returns
Item[]

Implements Inventory.

139  {
140  return $this->slots;
141  }

◆ getHolder()

getHolder ( )
Returns
InventoryHolder

Implements Inventory.

498  {
499  return $this->holder;
500  }

◆ getHotbarSize()

getHotbarSize ( )
Returns
int
95  {
96  return 0;
97  }

◆ getItem()

getItem (   $index)
Parameters
int$index
Returns
Item

Implements Inventory.

132  {
133  return isset($this->slots[$index]) ? clone $this->slots[$index] : Item::get(Item::AIR, 0, 0);
134  }

◆ getMaxStackSize()

getMaxStackSize ( )
Returns
int

Implements Inventory.

109  {
110  return $this->maxStackSize;
111  }

◆ getName()

getName ( )
Returns
string

Implements Inventory.

116  : string{
117  return $this->name;
118  }

◆ getSize()

getSize ( )
Returns
int

Implements Inventory.

88  {
89  return $this->size;
90  }

◆ getTitle()

getTitle ( )
Returns
string

Implements Inventory.

123  {
124  return $this->title;
125  }

◆ getType()

getType ( )
Returns
InventoryType

Implements Inventory.

619  {
620  return $this->type;
621  }

◆ getViewers()

getViewers ( )
Returns
Player[]

Implements Inventory.

491  {
492  return $this->viewers;
493  }

◆ onClose()

onClose ( Player  $who)
Parameters
Player$who

Implements Inventory.

543  {
544  unset($this->viewers[spl_object_hash($who)]);
545  }

◆ onOpen()

onOpen ( Player  $who)
Parameters
Player$who

Implements Inventory.

536  {
537  $this->viewers[spl_object_hash($who)] = $who;
538  }

◆ onSlotChange()

onSlotChange (   $index,
  $before,
  $send 
)
Parameters
int$index
Item$before
bool$send

Implements Inventory.

552  {
553  if($send){
554  $this->sendSlot($index, $this->getViewers());
555  }
556  }

◆ open()

open ( Player  $who)
Parameters
Player$who
Returns
bool

Implements Inventory.

514  {
515  $who->getServer()->getPluginManager()->callEvent($ev = new InventoryOpenEvent($this, $who));
516  if($ev->isCancelled()){
517  return false;
518  }
519  $this->onOpen($who);
520 
521  return true;
522  }

◆ processSlotChange()

processSlotChange ( Transaction  $transaction)
Parameters
Transaction$transaction
Returns
bool
563  : bool{
564  return true;
565  }

◆ remove()

remove ( Item  $item,
  $send = true 
)
Parameters
Item$item
bool$send
256  {
257  $checkDamage = !$item->hasAnyDamageValue();
258  $checkTags = $item->hasCompoundTag();
259  $checkCount = $item->getCount() === null ? false : true;
260 
261  foreach($this->getContents() as $index => $i){
262  if($item->equals($i, $checkDamage, $checkTags, $checkCount)){
263  $this->clear($index, $send);
264  break;
265  }
266  }
267  }

◆ sendContents()

sendContents (   $target)
Parameters
Player|Player[]$target

Implements Inventory.

571  {
572  if($target instanceof Player){
573  $target = [$target];
574  }
575 
576  $pk = new ContainerSetContentPacket();
577  $pk->slots = [];
578  for($i = 0; $i < $this->getSize(); ++$i){
579  $pk->slots[$i] = $this->getItem($i);
580  }
581 
582  foreach($target as $player){
583  if(($id = $player->getWindowId($this)) === -1 or $player->spawned !== true){
584  $this->close($player);
585  continue;
586  }
587  $pk->windowid = $id;
588  $pk->targetEid = $player->getId();
589  $player->dataPacket($pk);
590  }
591  }

◆ sendSlot()

sendSlot (   $index,
  $target 
)
Parameters
int$index
Player|Player[]$target

Implements Inventory.

597  {
598  if($target instanceof Player){
599  $target = [$target];
600  }
601 
602  $pk = new ContainerSetSlotPacket();
603  $pk->slot = $index;
604  $pk->item = clone $this->getItem($index);
605 
606  foreach($target as $player){
607  if(($id = $player->getWindowId($this)) === -1){
608  $this->close($player);
609  continue;
610  }
611  $pk->windowid = $id;
612  $player->dataPacket($pk);
613  }
614  }

◆ setContents()

setContents ( array  $items,
  $send = true 
)
Parameters
Item[]$items
bool$send
147  {
148  if(count($items) > $this->size){
149  $items = array_slice($items, 0, $this->size, true);
150  }
151 
152  for($i = 0; $i < $this->size; ++$i){
153  if(!isset($items[$i])){
154  if(isset($this->slots[$i])){
155  $this->clear($i, $send);
156  }
157  }else{
158  if(!$this->setItem($i, $items[$i], $send)){
159  $this->clear($i, $send);
160  }
161  }
162  }
163  }

◆ setItem()

setItem (   $index,
Item  $item,
  $send = true 
)
Parameters
int$index
Item$item
bool$send
Returns
bool
172  {
173  $item = clone $item;
174  if($index < 0 or $index >= $this->size){
175  return false;
176  }elseif($item->getId() === 0 or $item->getCount() <= 0){
177  return $this->clear($index, $send);
178  }
179 
180  $holder = $this->getHolder();
181  if($holder instanceof Entity){
182  Server::getInstance()->getPluginManager()->callEvent($ev = new EntityInventoryChangeEvent($holder, $this->getItem($index), $item, $index));
183  if($ev->isCancelled()){
184  $this->sendSlot($index, $this->getViewers());
185  return false;
186  }
187  $item = $ev->getNewItem();
188  }
189 
190  $old = $this->getItem($index);
191  $this->slots[$index] = clone $item;
192  $this->onSlotChange($index, $old, $send);
193 
194 
195  return true;
196  }

◆ setMaxStackSize()

setMaxStackSize (   $size)
Parameters
int$size

Implements Inventory.

505  {
506  $this->maxStackSize = (int) $size;
507  }

◆ setSize()

setSize (   $size)
Parameters
$size
102  {
103  $this->size = (int) $size;
104  }

◆ slotContains()

slotContains (   $slot,
Item  $item,
  $matchCount = false 
)
Parameters
$slot
Item$item
bool$matchCount
Returns
bool
226  {
227  if($matchCount){
228  return $this->getItem($slot)->equals($item, true, true, true);
229  }else{
230  return $this->getItem($slot)->equals($item) and $this->getItem($slot)->getCount() >= $item->getCount();
231  }
232  }

Field Documentation

◆ $holder

$holder
protected

◆ $maxStackSize

$maxStackSize = Inventory::MAX_STACK
protected

◆ $name

$name
protected

◆ $size

$size
protected

◆ $slots

$slots = []
protected

◆ $title

$title
protected

◆ $type

$type
protected

◆ $viewers

$viewers = []
protected

The documentation for this class was generated from the following file: