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

Public Member Functions

 __construct (Position $pos)
 
 getHolder ()
 
 getResultSlotIndex ()
 
 onRename (Player $player, Item $resultItem)
 
 process (Player $player, Item $target, Item $sacrifice)
 
 processSlotChange (Transaction $transaction)
 
 onSlotChange ($index, $before, $send)
 
 onClose (Player $who)
 
- Public Member Functions inherited from TemporaryInventory
 getResultSlotIndex ()
 
 onClose (Player $who)
 
- Public Member Functions inherited from ContainerInventory
 onOpen (Player $who)
 
 onClose (Player $who)
 
- Public Member Functions inherited from BaseInventory
 __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 ()
 

Data Fields

const TARGET = 0
 
const SACRIFICE = 1
 
const RESULT = 2
 
- Data Fields inherited from Inventory
const MAX_STACK = 64
 

Additional Inherited Members

- Protected Attributes inherited from BaseInventory
 $type
 
 $maxStackSize = Inventory::MAX_STACK
 
 $size
 
 $name
 
 $title
 
 $slots = []
 
 $viewers = []
 
 $holder
 

Constructor & Destructor Documentation

◆ __construct()

__construct ( Position  $pos)

AnvilInventory constructor.

Parameters
Position$pos
43  {
44  parent::__construct(new FakeBlockMenu($this, $pos), InventoryType::get(InventoryType::ANVIL));
45  }

Member Function Documentation

◆ getHolder()

getHolder ( )
Returns
FakeBlockMenu|InventoryHolder

Implements Inventory.

50  {
51  return $this->holder;
52  }

◆ getResultSlotIndex()

getResultSlotIndex ( )
Returns
int
57  {
58  return self::RESULT;
59  }

◆ onClose()

onClose ( Player  $who)
Parameters
Player$who

Implements Inventory.

146  {
147  parent::onClose($who);
148 
149  $this->getHolder()->getLevel()->dropItem($this->getHolder()->add(0.5, 0.5, 0.5), $this->getItem(0));
150  $this->getHolder()->getLevel()->dropItem($this->getHolder()->add(0.5, 0.5, 0.5), $this->getItem(1));
151  $this->clear(0);
152  $this->clear(1);
153  $this->clear(2);
154  }

◆ onRename()

onRename ( Player  $player,
Item  $resultItem 
)
Parameters
Player$player
Item$resultItem
Returns
bool
67  : bool{
68  if(!$resultItem->equals($this->getItem(self::TARGET), true, false, true)){
69  //Item does not match target item. Everything must match except the tags.
70  return false;
71  }
72 
73  if($player->getXpLevel() < $resultItem->getRepairCost()){ //Not enough exp
74  return false;
75  }
76  $player->takeXpLevel($resultItem->getRepairCost());
77 
78  $this->clearAll();
79  if(!$player->getServer()->allowInventoryCheats and !$player->isCreative()){
80  if(!$player->getFloatingInventory()->canAddItem($resultItem)){
81  return false;
82  }
83  $player->getFloatingInventory()->addItem($resultItem);
84  }
85  return true;
86  }

◆ onSlotChange()

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

Implements Inventory.

139  {
140  //Do not send anvil slot updates to anyone. This will cause a client crash.
141  }

◆ process()

process ( Player  $player,
Item  $target,
Item  $sacrifice 
)
Parameters
Player$player
Item$target
Item$sacrifice
Returns
bool
95  {
96  $resultItem = clone $target;
97  Server::getInstance()->getPluginManager()->callEvent($ev = new AnvilProcessEvent($this));
98  if($ev->isCancelled()){
99  $this->clearAll();
100  return false;
101  }
102  if($sacrifice instanceof EnchantedBook && $sacrifice->hasEnchantments()){ //Enchanted Books!
103  foreach($sacrifice->getEnchantments() as $enchant){
104  $resultItem->addEnchantment($enchant);
105  }
106 
107  if($player->getXpLevel() < $resultItem->getRepairCost()){ //Not enough exp
108  return false;
109  }
110  $player->takeXpLevel($resultItem->getRepairCost());
111 
112  $this->clearAll();
113  if(!$player->getServer()->allowInventoryCheats and !$player->isCreative()){
114  if(!$player->getFloatingInventory()->canAddItem($resultItem)){
115  return false;
116  }
117  $player->getFloatingInventory()->addItem($resultItem);
118  }
119  }
120  }

◆ processSlotChange()

processSlotChange ( Transaction  $transaction)
Parameters
Transaction$transaction
Returns
bool
127  : bool{
128  if($transaction->getSlot() === $this->getResultSlotIndex()){
129  return false;
130  }
131  return true;
132  }

Field Documentation

◆ RESULT

const RESULT = 2

◆ SACRIFICE

const SACRIFICE = 1

◆ TARGET

const TARGET = 0

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