1
0
cuberite-2a/src/Items/ItemChorusFruit.h
KingCol13 1d1fa91401
Chorus fruit teleport (#5259)
* Outline function for teleporting.

* Created new handler for chorus fruit.

* Fixed AttemptTeleport failing.

* Better names, working sound effect.

* Corrected naming.

* Remove stray LOGD.

* Offset teleport to middle of block.

* Style Fixes

Co-authored-by: x12xx12x <44411062+12xx12@users.noreply.github.com>

* Style Fixes 2

Co-authored-by: x12xx12x <44411062+12xx12@users.noreply.github.com>

* Move FindTeleportDestination to static cPawn method.

* cBoundingBox interface.

* Cleanup includes.

* Maybe exported to API?

* Change a_World to reference, add to APIDesc.

Co-authored-by: x12xx12x <44411062+12xx12@users.noreply.github.com>
2021-07-10 20:05:00 +00:00

45 lines
951 B
C++

#pragma once
#include "ItemFood.h"
#include "../Entities/Pawn.h"
class cItemChorusFruitHandler:
public cItemFoodHandler
{
using Super = cItemFoodHandler;
public:
cItemChorusFruitHandler():
Super(E_ITEM_CHORUS_FRUIT, FoodInfo(4, 2.4))
{
}
virtual bool EatItem(cPlayer * a_Player, cItem * a_Item) override
{
cItemHandler::EatItem(a_Player, a_Item);
if (!a_Player->IsGameModeCreative())
{
a_Player->GetInventory().RemoveOneEquippedItem();
}
// Attempt to find a teleport destination
Vector3d Destination;
cWorld * World = a_Player->GetWorld();
if (cPawn::FindTeleportDestination(*World, 2, 16, Destination, a_Player->GetPosition(), 8))
{
// Broadcast sound effect to _pre-teleport_ location, then teleport player.
World->BroadcastSoundEffect("item.chorus_fruit.teleport", a_Player->GetPosition(), 1, 1);
a_Player->TeleportToCoords(Destination.x, Destination.y, Destination.z);
}
return true;
}
};