aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/BoatItem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Minecraft.World/BoatItem.cpp')
-rw-r--r--Minecraft.World/BoatItem.cpp32
1 files changed, 19 insertions, 13 deletions
diff --git a/Minecraft.World/BoatItem.cpp b/Minecraft.World/BoatItem.cpp
index 3499bc02..d5628f09 100644
--- a/Minecraft.World/BoatItem.cpp
+++ b/Minecraft.World/BoatItem.cpp
@@ -9,10 +9,10 @@
BoatItem::BoatItem(int id) : Item( id )
{
- this->maxStackSize = 1;
+ maxStackSize = 1;
}
-bool BoatItem::TestUse(Level *level, shared_ptr<Player> player)
+bool BoatItem::TestUse(shared_ptr<ItemInstance> itemInstance, Level *level, shared_ptr<Player> player)
{
// 4J-PB - added for tooltips to test use
// 4J TODO really we should have the crosshair hitresult telling us if it hit water, and at what distance, so we don't need to do this again
@@ -105,22 +105,28 @@ shared_ptr<ItemInstance> BoatItem::use(shared_ptr<ItemInstance> itemInstance, Le
int yt = hr->y;
int zt = hr->z;
- if (!level->isClientSide)
+ if (level->getTile(xt, yt, zt) == Tile::topSnow_Id) yt--;
+ if( level->countInstanceOf(eTYPE_BOAT, true) < Level::MAX_XBOX_BOATS ) // 4J - added limit
{
- if (level->getTile(xt, yt, zt) == Tile::topSnow_Id) yt--;
- if( level->countInstanceOf(eTYPE_BOAT, true) < Level::MAX_XBOX_BOATS ) // 4J - added limit
+ shared_ptr<Boat> boat = shared_ptr<Boat>( new Boat(level, xt + 0.5f, yt + 1.0f, zt + 0.5f) );
+ boat->yRot = ((Mth::floor(player->yRot * 4.0F / 360.0F + 0.5) & 0x3) - 1) * 90;
+ if (!level->getCubes(boat, boat->bb->grow(-.1, -.1, -.1))->empty())
{
- level->addEntity( shared_ptr<Boat>( new Boat(level, xt + 0.5f, yt + 1.0f, zt + 0.5f) ) );
- if (!player->abilities.instabuild)
- {
- itemInstance->count--;
- }
+ return itemInstance;
}
- else
+ if (!level->isClientSide)
{
- // display a message to say max boats has been hit
- player->displayClientMessage(IDS_MAX_BOATS );
+ level->addEntity(boat);
}
+ if (!player->abilities.instabuild)
+ {
+ itemInstance->count--;
+ }
+ }
+ else
+ {
+ // display a message to say max boats has been hit
+ player->displayClientMessage(IDS_MAX_BOATS );
}
}
delete hr;