diff options
author | Samuel Barney <samjbarney@gmail.com> | 2013-10-14 17:42:43 +0200 |
---|---|---|
committer | Samuel Barney <samjbarney@gmail.com> | 2013-10-14 17:42:43 +0200 |
commit | 5df5176f8d1793b44c7e2353cb46ca0966be1bdd (patch) | |
tree | 95343394cd9902ceaf885f379342c593392e9c16 /source/Mobs/Pig.cpp | |
parent | Mobs no longer spawn up in the air. (diff) | |
parent | APIDump: Documented HOOK_HANDSHAKE. (diff) | |
download | cuberite-5df5176f8d1793b44c7e2353cb46ca0966be1bdd.tar cuberite-5df5176f8d1793b44c7e2353cb46ca0966be1bdd.tar.gz cuberite-5df5176f8d1793b44c7e2353cb46ca0966be1bdd.tar.bz2 cuberite-5df5176f8d1793b44c7e2353cb46ca0966be1bdd.tar.lz cuberite-5df5176f8d1793b44c7e2353cb46ca0966be1bdd.tar.xz cuberite-5df5176f8d1793b44c7e2353cb46ca0966be1bdd.tar.zst cuberite-5df5176f8d1793b44c7e2353cb46ca0966be1bdd.zip |
Diffstat (limited to 'source/Mobs/Pig.cpp')
-rw-r--r-- | source/Mobs/Pig.cpp | 49 |
1 files changed, 48 insertions, 1 deletions
diff --git a/source/Mobs/Pig.cpp b/source/Mobs/Pig.cpp index 9df2c2571..cd18c087f 100644 --- a/source/Mobs/Pig.cpp +++ b/source/Mobs/Pig.cpp @@ -2,13 +2,16 @@ #include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules #include "Pig.h" +#include "../Entities/Player.h" +#include "../World.h" cPig::cPig(void) : - super("Pig", 90, "mob.pig.say", "mob.pig.death", 0.9, 0.9) + super("Pig", 90, "mob.pig.say", "mob.pig.death", 0.9, 0.9), + m_bIsSaddled(false) { } @@ -24,3 +27,47 @@ void cPig::GetDrops(cItems & a_Drops, cEntity * a_Killer) + +void cPig::OnRightClicked(cPlayer & a_Player) +{ + if (m_bIsSaddled) + { + if (m_Attachee != NULL) + { + if (m_Attachee->GetUniqueID() == a_Player.GetUniqueID()) + { + // This player is already sitting in, they want out. + a_Player.Detach(); + return; + } + + if (m_Attachee->IsPlayer()) + { + // Another player is already sitting in here, cannot attach + return; + } + + // Detach whatever is sitting in this pig now: + m_Attachee->Detach(); + } + + // Attach the player to this pig + a_Player.AttachTo(this); + } + else if (a_Player.GetEquippedItem().m_ItemType == E_ITEM_SADDLE) + { + if (!a_Player.IsGameModeCreative()) + { + a_Player.GetInventory().RemoveOneEquippedItem(); + } + + // Set saddle state & broadcast metadata + m_bIsSaddled = true; + m_World->BroadcastEntityMetadata(*this); + } +} + + + + + |