Как сделать когда ты открываешь фермера (пример) тебе открывается двойной сундук , чтобы когда ты берешь предмет к себе в инвентарь он возврощался назад
InventoryTransactionEvent отменять
на пример
public function handleInventoryTransaction(InventoryTransactionEvent $event){
/** @noinspection PhpDeprecationInspection */
$transaction = $event->getTransaction();
if(!Auction::getInstance()->isViewingAuction($player = $transaction->getPlayer())){
return;
}
$event->setCancelled(true);
/** @var BaseTransaction $_transaction */
foreach($transaction->getTransactions() as $_transaction){
$inventory = $_transaction->getInventory();
if($inventory instanceof PersonalDoubleInventory){
/** @var Player $player */
if($inventory->getViewerName() !== $player->getName()){
return;
}
$item = $inventory->getItem($_transaction->getSlot());
if(!$item->hasCompoundTag()){
return;
}
$nbt = $item->getNamedTag();
if(!isset($nbt->auctionWindowItem)){
return;
}
if(isset($nbt->page)){
Auction::getInstance()->openPage($player, $inventory, $nbt->page->getValue());
return;
}
if(!isset($nbt->owner) or !isset($nbt->uniqueKey)){
return;
}
$uniqueKey = $nbt->uniqueKey->getValue();
if(Auction::getInstance()->hasItemInvalidated($uniqueKey)){
$player->sendMessage("§a➛ §cЭтот предмет больше не продаётся!");
$player->sendTitle("", "§cПредмет не продаётся!", 20, 20, 20);
return;
}
$ownerName = $nbt->owner->getValue();
$currentTime = time();
if($ownerName === $player->getLowerCaseName()){
if(($this->confirmations[$player->getName()][$uniqueKey] ?? 0) < $currentTime){
$this->confirmations[$player->getName()][$uniqueKey] = $currentTime + 8;
$player->sendPopup("§aНажми на предмет ещё раз!");
return;
}
$inventory->setItem($_transaction->getSlot(), new Item(BlockIds::AIR));
Auction::getInstance()->pullFromTheAuction($player, $uniqueKey);
unset($this->confirmations[$player->getName()][$uniqueKey]);
return;
}
if($nbt->expirationDate->getValue() < Helper::breakTime()){
$player->sendMessage("§a➛ §cЭтот предмет больше не продаётся!");
$player->sendTitle("", "§cВремя вышло", 20, 20, 20);
return;
}
$price = $nbt->price->getValue();
if(($playerMoney = EconomyAPI::getInstance()->myMoney($player)) < $price){
$notEnough = number_format($price - $playerMoney);
$player->sendMessage("§a➛ §cТебе не хватает §b" . $notEnough . EconomyAPI::getInstance()->getMonetaryUnit());
return;
}
if(!$player->getInventory()->canAddItem($item)){
$player->sendMessage("§a➛ §cУ тебя нет места в инвентаре!");
return;
}
if(($this->confirmations[$player->getName()][$uniqueKey] ?? 0) < $currentTime){
$this->confirmations[$player->getName()][$uniqueKey] = $currentTime + 12;
$player->sendPopup("§aНажми ещё раз для покупки!");
return;
}
$inventory->setItem($_transaction->getSlot(), new Item(BlockIds::AIR));
Auction::getInstance()->pullFromTheAuction($player, $uniqueKey, true);
unset($this->confirmations[$player->getName()][$uniqueKey]);
return;
}
}
}
и?
можно код?
Хехе, кусок из кода Меметова.
хз вроде
дай код не в перемешку с ауком
А еще че тебе? Я дал событие которое вызывается при перемещении предмета в инвентаре, дальше думай сам