本文整理汇总了PHP中pocketmine\inventory\SimpleTransactionGroup::addTransaction方法的典型用法代码示例。如果您正苦于以下问题:PHP SimpleTransactionGroup::addTransaction方法的具体用法?PHP SimpleTransactionGroup::addTransaction怎么用?PHP SimpleTransactionGroup::addTransaction使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类pocketmine\inventory\SimpleTransactionGroup
的用法示例。
在下文中一共展示了SimpleTransactionGroup::addTransaction方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: addTransaction
public function addTransaction(Transaction $transaction)
{
parent::addTransaction($transaction);
$this->input = [];
$this->output = [];
$this->matchItems($this->output, $this->input);
}
示例2: handleDataPacket
//.........这里部分代码省略.........
}
if ($packet->windowid === 0) {
//Our inventory
if ($packet->slot >= $this->inventory->getSize()) {
break;
}
if ($this->isCreative()) {
if (Item::getCreativeItemIndex($packet->item) !== -1) {
$this->inventory->setItem($packet->slot, $packet->item);
$this->inventory->setHotbarSlotIndex($packet->slot, $packet->slot);
//links $hotbar[$packet->slot] to $slots[$packet->slot]
}
}
$transaction = new BaseTransaction($this->inventory, $packet->slot, $this->inventory->getItem($packet->slot), $packet->item);
} elseif ($packet->windowid === ContainerSetContentPacket::SPECIAL_ARMOR) {
//Our armor
if ($packet->slot >= 4) {
break;
}
$transaction = new BaseTransaction($this->inventory, $packet->slot + $this->inventory->getSize(), $this->inventory->getArmorItem($packet->slot), $packet->item);
} elseif (isset($this->windowIndex[$packet->windowid])) {
$this->craftingType = 0;
$inv = $this->windowIndex[$packet->windowid];
$transaction = new BaseTransaction($inv, $packet->slot, $inv->getItem($packet->slot), $packet->item);
} else {
break;
}
if ($transaction->getSourceItem() === $transaction->getTargetItem() and $transaction->getTargetItem()->getCount() === $transaction->getSourceItem()->getCount()) {
//No changes!
//No changes, just a local inventory update sent by the server
break;
}
if ($this->currentTransaction === null or $this->currentTransaction->getCreationTime() < microtime(true) - 8) {
if ($this->currentTransaction !== null) {
foreach ($this->currentTransaction->getInventories() as $inventory) {
if ($inventory instanceof PlayerInventory) {
$inventory->sendArmorContents($this);
}
$inventory->sendContents($this);
}
}
$this->currentTransaction = new SimpleTransactionGroup($this);
}
$this->currentTransaction->addTransaction($transaction);
if ($this->currentTransaction->canExecute()) {
$achievements = [];
foreach ($this->currentTransaction->getTransactions() as $ts) {
$inv = $ts->getInventory();
if ($inv instanceof FurnaceInventory) {
if ($ts->getSlot() === 2) {
switch ($inv->getResult()->getId()) {
case Item::IRON_INGOT:
$achievements[] = "acquireIron";
break;
}
}
}
}
if ($this->currentTransaction->execute()) {
foreach ($achievements as $a) {
$this->awardAchievement($a);
}
}
$this->currentTransaction = null;
}
break;
case ProtocolInfo::TILE_ENTITY_DATA_PACKET:
if ($this->spawned === false or $this->blocked === true or $this->dead === true) {
break;
}
$this->craftingType = 0;
$pos = new Vector3($packet->x, $packet->y, $packet->z);
if ($pos->distanceSquared($this) > 10000) {
break;
}
$t = $this->level->getTile($pos);
if ($t instanceof Sign) {
$nbt = new NBT(NBT::LITTLE_ENDIAN);
$nbt->read($packet->namedtag);
$nbt = $nbt->getData();
if ($nbt["id"] !== Tile::SIGN) {
$t->spawnTo($this);
} else {
$ev = new SignChangeEvent($t->getBlock(), $this, [TextFormat::clean($nbt["Text1"], $this->removeFormat), TextFormat::clean($nbt["Text2"], $this->removeFormat), TextFormat::clean($nbt["Text3"], $this->removeFormat), TextFormat::clean($nbt["Text4"], $this->removeFormat)]);
if (!isset($t->namedtag->Creator) or $t->namedtag["Creator"] !== $this->username) {
$ev->setCancelled(true);
}
$this->server->getPluginManager()->callEvent($ev);
if (!$ev->isCancelled()) {
$t->setText($ev->getLine(0), $ev->getLine(1), $ev->getLine(2), $ev->getLine(3));
} else {
$t->spawnTo($this);
}
}
}
break;
default:
break;
}
}
示例3: handleDataPacket
//.........这里部分代码省略.........
//links $hotbar[$packet->slot] to $slots[$packet->slot]
}
}
$transaction = new BaseTransaction($this->inventory, $packet->slot, $this->inventory->getItem($packet->slot), $packet->item);
} elseif ($packet->windowid === 0x78) {
//Our armor
if ($packet->slot >= 4) {
break;
}
$transaction = new BaseTransaction($this->inventory, $packet->slot + $this->inventory->getSize(), $this->inventory->getArmorItem($packet->slot), $packet->item);
} elseif (isset($this->windowIndex[$packet->windowid])) {
$this->craftingType = 0;
$inv = $this->windowIndex[$packet->windowid];
$transaction = new BaseTransaction($inv, $packet->slot, $inv->getItem($packet->slot), $packet->item);
} else {
break;
}
if ($transaction->getSourceItem()->equals($transaction->getTargetItem(), true) and $transaction->getTargetItem()->getCount() === $transaction->getSourceItem()->getCount()) {
//No changes!
//No changes, just a local inventory update sent by the server
break;
}
if ($this->currentTransaction === null or $this->currentTransaction->getCreationTime() < microtime(true) - 0.5) {
if ($this->currentTransaction instanceof SimpleTransactionGroup) {
foreach ($this->currentTransaction->getInventories() as $inventory) {
if ($inventory instanceof PlayerInventory) {
$inventory->sendArmorContents($this);
}
$inventory->sendContents($this);
}
}
$this->currentTransaction = new SimpleTransactionGroup($this);
}
$this->currentTransaction->addTransaction($transaction);
if ($this->currentTransaction->canExecute()) {
if (!$this->currentTransaction->execute()) {
$this->currentTransaction = null;
break;
}
foreach ($this->currentTransaction->getTransactions() as $ts) {
$inv = $ts->getInventory();
if ($inv instanceof FurnaceInventory) {
if ($ts->getSlot() === 2) {
switch ($inv->getResult()->getId()) {
case Item::IRON_INGOT:
$this->awardAchievement("acquireIron");
break;
}
}
}
}
$this->currentTransaction = null;
} elseif ($packet->windowid == 0) {
//Try crafting
$craftingGroup = new CraftingTransactionGroup($this->currentTransaction);
if ($craftingGroup->canExecute()) {
//We can craft!
$recipe = $craftingGroup->getMatchingRecipe();
if ($recipe instanceof BigShapelessRecipe and $this->craftingType !== 1) {
break;
} elseif ($recipe instanceof StonecutterShapelessRecipe and $this->craftingType !== 2) {
break;
}
if ($craftingGroup->execute()) {
switch ($craftingGroup->getResult()->getId()) {
case Item::WORKBENCH:
示例4: handleDataPacket
//.........这里部分代码省略.........
//links $hotbar[$packet->slot] to $slots[$packet->slot]
}
}
$transaction = new BaseTransaction($this->inventory, $packet->slot, $this->inventory->getItem($packet->slot), $packet->item);
} elseif ($packet->windowid === ContainerSetContentPacket::SPECIAL_ARMOR) {
//Our armor
if ($packet->slot >= 4) {
break;
}
$transaction = new BaseTransaction($this->inventory, $packet->slot + $this->inventory->getSize(), $this->inventory->getArmorItem($packet->slot), $packet->item);
} elseif (isset($this->windowIndex[$packet->windowid])) {
$this->craftingType = 0;
$inv = $this->windowIndex[$packet->windowid];
$transaction = new BaseTransaction($inv, $packet->slot, $inv->getItem($packet->slot), $packet->item);
} else {
break;
}
if ($transaction->getSourceItem()->equals($transaction->getTargetItem(), true) and $transaction->getTargetItem()->getCount() === $transaction->getSourceItem()->getCount()) {
//No changes!
//No changes, just a local inventory update sent by the server
break;
}
if ($this->currentTransaction === null or $this->currentTransaction->getCreationTime() < microtime(true) - 8) {
if ($this->currentTransaction instanceof SimpleTransactionGroup) {
foreach ($this->currentTransaction->getInventories() as $inventory) {
if ($inventory instanceof PlayerInventory) {
$inventory->sendArmorContents($this);
}
$inventory->sendContents($this);
}
}
$this->currentTransaction = new SimpleTransactionGroup($this);
}
$this->currentTransaction->addTransaction($transaction);
if ($this->currentTransaction->canExecute()) {
if ($this->currentTransaction->execute()) {
foreach ($this->currentTransaction->getTransactions() as $ts) {
$inv = $ts->getInventory();
if ($inv instanceof FurnaceInventory) {
if ($ts->getSlot() === 2) {
switch ($inv->getResult()->getId()) {
case Item::IRON_INGOT:
$this->awardAchievement("acquireIron");
break;
}
}
}
}
}
$this->currentTransaction = null;
} elseif ($packet->windowid == 0) {
//Try crafting
$craftingGroup = new CraftingTransactionGroup($this->currentTransaction);
if ($craftingGroup->canExecute()) {
//We can craft!
$recipe = $craftingGroup->getMatchingRecipe();
if ($recipe instanceof BigShapelessRecipe and $this->craftingType !== 1) {
break;
} elseif ($recipe instanceof StonecutterShapelessRecipe and $this->craftingType !== 2) {
break;
}
if ($craftingGroup->execute()) {
switch ($craftingGroup->getResult()->getId()) {
case Item::WORKBENCH:
$this->awardAchievement("buildWorkBench");
break;
示例5: handleDataPacket
//.........这里部分代码省略.........
}
$transaction = new BaseTransaction($this->inventory, $packet->slot + $this->inventory->getSize(), $this->inventory->getArmorItem($packet->slot), $packet->item);
} elseif (isset($this->windowIndex[$packet->windowid])) {
$this->craftingType = 0;
$inv = $this->windowIndex[$packet->windowid];
/** @var $packet \pocketmine\network\protocol\ContainerSetSlotPacket */
if ($inv instanceof EnchantInventory and $packet->item->hasEnchantments()) {
$inv->onEnchant($this, $inv->getItem($packet->slot), $packet->item);
}
if ($inv instanceof AnvilInventory) {
if ($packet->slot == 2) {
if ($packet->item->getId() != Item::AIR) {
$this->anvilItem = $packet->item;
} elseif ($this->anvilItem != null) {
if (!$inv->onRename($this->anvilItem, $this)) {
break;
//maybe cheating!
}
$this->anvilItem = null;
}
}
}
$transaction = new BaseTransaction($inv, $packet->slot, $inv->getItem($packet->slot), $packet->item);
} else {
break;
}
if ($transaction->getSourceItem()->deepEquals($transaction->getTargetItem()) and $transaction->getTargetItem()->getCount() === $transaction->getSourceItem()->getCount()) {
//No changes!
//No changes, just a local inventory update sent by the server
break;
}
if ($this->currentTransaction === null or $this->currentTransaction->getCreationTime() < microtime(true) - 8) {
if ($this->currentTransaction !== null) {
foreach ($this->currentTransaction->getInventories() as $inventory) {
if ($inventory instanceof PlayerInventory) {
$inventory->sendArmorContents($this);
}
$inventory->sendContents($this);
}
}
$this->currentTransaction = new SimpleTransactionGroup($this);
}
$this->currentTransaction->addTransaction($transaction);
if ($this->currentTransaction->canExecute()) {
$achievements = [];
foreach ($this->currentTransaction->getTransactions() as $ts) {
$inv = $ts->getInventory();
if ($inv instanceof FurnaceInventory) {
if ($ts->getSlot() === 2) {
switch ($inv->getResult()->getId()) {
case Item::IRON_INGOT:
$achievements[] = "acquireIron";
break;
}
}
}
}
if ($this->currentTransaction->execute()) {
foreach ($achievements as $a) {
$this->awardAchievement($a);
}
}
$this->currentTransaction = null;
}
break;
case ProtocolInfo::BLOCK_ENTITY_DATA_PACKET:
if ($this->spawned === false or $this->blocked === true or !$this->isAlive()) {
break;
}
$this->craftingType = 0;
$pos = new Vector3($packet->x, $packet->y, $packet->z);
if ($pos->distanceSquared($this) > 10000) {
break;
}
$t = $this->level->getTile($pos);
if ($t instanceof Sign) {
$nbt = new NBT(NBT::LITTLE_ENDIAN);
$nbt->read($packet->namedtag);
$nbt = $nbt->getData();
if ($nbt["id"] !== Tile::SIGN) {
$t->spawnTo($this);
} else {
$ev = new SignChangeEvent($t->getBlock(), $this, [TextFormat::clean($nbt["Text1"], $this->removeFormat), TextFormat::clean($nbt["Text2"], $this->removeFormat), TextFormat::clean($nbt["Text3"], $this->removeFormat), TextFormat::clean($nbt["Text4"], $this->removeFormat)]);
if (!isset($t->namedtag->Creator) or $t->namedtag["Creator"] !== $this->getRawUniqueId()) {
$ev->setCancelled();
}
$this->server->getPluginManager()->callEvent($ev);
if (!$ev->isCancelled()) {
$t->setText($ev->getLine(0), $ev->getLine(1), $ev->getLine(2), $ev->getLine(3));
} else {
$t->spawnTo($this);
}
}
}
break;
default:
break;
}
$timings->stopTiming();
}
示例6: handleDataPacket
//.........这里部分代码省略.........
if (Item::getCreativeItemIndex($packet->item) !== -1) {
$this->inventory->setItem($packet->slot, $packet->item);
$this->inventory->setHotbarSlotIndex($packet->slot, $packet->slot);
//links $hotbar[$packet->slot] to $slots[$packet->slot]
}
}
$transaction = new BaseTransaction($this->inventory, $packet->slot, $this->inventory->getItem($packet->slot), $packet->item);
} elseif ($packet->windowid === ContainerSetContentPacket::SPECIAL_ARMOR) {
//Our armor
if ($packet->slot >= 4) {
break;
}
$transaction = new BaseTransaction($this->inventory, $packet->slot + $this->inventory->getSize(), $this->inventory->getArmorItem($packet->slot), $packet->item);
} elseif (isset($this->windowIndex[$packet->windowid])) {
$this->craftingType = 0;
$inv = $this->windowIndex[$packet->windowid];
$transaction = new BaseTransaction($inv, $packet->slot, $inv->getItem($packet->slot), $packet->item);
} else {
break;
}
if ($transaction->getSourceItem()->deepEquals($transaction->getTargetItem()) and $transaction->getTargetItem()->getCount() === $transaction->getSourceItem()->getCount()) {
//No changes!
//No changes, just a local inventory update sent by the server
break;
}
if ($this->currentTransaction === null or $this->currentTransaction->getCreationTime() < microtime(true) - 8) {
if ($this->currentTransaction !== null) {
foreach ($this->currentTransaction->getInventories() as $inventory) {
if ($inventory instanceof PlayerInventory) {
$inventory->sendArmorContents($this);
}
$inventory->sendContents($this);
}
}
$this->currentTransaction = new SimpleTransactionGroup($this);
}
$this->currentTransaction->addTransaction($transaction);
if ($this->currentTransaction->canExecute()) {
$achievements = [];
foreach ($this->currentTransaction->getTransactions() as $ts) {
$inv = $ts->getInventory();
if ($inv instanceof FurnaceInventory) {
if ($ts->getSlot() === 2) {
switch ($inv->getResult()->getId()) {
case Item::IRON_INGOT:
$achievements[] = "acquireIron";
break;
}
}
}
}
if ($this->currentTransaction->execute()) {
foreach ($achievements as $a) {
$this->awardAchievement($a);
}
}
$this->currentTransaction = null;
}
break;
case ProtocolInfo::BLOCK_ENTITY_DATA_PACKET:
if ($this->spawned === false or $this->blocked === true or !$this->isAlive()) {
break;
}
$this->craftingType = 0;
$pos = new Vector3($packet->x, $packet->y, $packet->z);
if ($pos->distanceSquared($this) > 10000) {
break;
}
$t = $this->level->getTile($pos);
if ($t instanceof Sign) {
$nbt = new NBT(NBT::LITTLE_ENDIAN);
$nbt->read($packet->namedtag);
$nbt = $nbt->getData();
if ($nbt["id"] !== Tile::SIGN) {
$t->spawnTo($this);
} else {
$ev = new SignChangeEvent($t->getBlock(), $this, [TextFormat::clean($nbt["Text1"], $this->removeFormat), TextFormat::clean($nbt["Text2"], $this->removeFormat), TextFormat::clean($nbt["Text3"], $this->removeFormat), TextFormat::clean($nbt["Text4"], $this->removeFormat)]);
if (!isset($t->namedtag->Creator) or $t->namedtag["Creator"] !== $this->getRawUniqueId()) {
$ev->setCancelled();
} else {
foreach ($ev->getLines() as $line) {
if (mb_strlen($line, "UTF-8") > 16) {
$ev->setCancelled();
}
}
}
$this->server->getPluginManager()->callEvent($ev);
if (!$ev->isCancelled()) {
$t->setText($ev->getLine(0), $ev->getLine(1), $ev->getLine(2), $ev->getLine(3));
} else {
$t->spawnTo($this);
}
}
}
break;
default:
break;
}
$timings->stopTiming();
}