From 47e914b98063b03f14099d8b6a0f867c1d6b18f1 Mon Sep 17 00:00:00 2001 From: Lukas Pioch Date: Fri, 4 Aug 2017 12:07:10 +0200 Subject: [PATCH] Added a new param to OnPlayerEditingBook and changed the names --- Server/Plugins/APIDump/Hooks/OnPlayerEditedBook.lua | 2 +- Server/Plugins/APIDump/Hooks/OnPlayerEditingBook.lua | 3 ++- src/Bindings/LuaState.cpp | 11 +++++++++++ src/Bindings/LuaState.h | 1 + src/Bindings/Plugin.h | 4 ++-- src/Bindings/PluginLua.cpp | 8 ++++---- src/Bindings/PluginLua.h | 4 ++-- src/Bindings/PluginManager.cpp | 8 ++++---- src/Bindings/PluginManager.h | 4 ++-- src/Protocol/Protocol_1_9.cpp | 3 ++- 10 files changed, 31 insertions(+), 17 deletions(-) diff --git a/Server/Plugins/APIDump/Hooks/OnPlayerEditedBook.lua b/Server/Plugins/APIDump/Hooks/OnPlayerEditedBook.lua index 9a6c0bc8c1..a34f93a084 100644 --- a/Server/Plugins/APIDump/Hooks/OnPlayerEditedBook.lua +++ b/Server/Plugins/APIDump/Hooks/OnPlayerEditedBook.lua @@ -12,7 +12,7 @@ return Params = { { Name = "Player", Type = "cPlayer", Notes = "The player that edited the book" }, - { Name = "BookContent", Type = "cBookContent", Notes = "The class that contains the current info of the book" }, + { Name = "NewContent", Type = "cBookContent", Notes = "Contains the new content of the book" }, { Name = "IsSigned", Type = "boolean", Notes = "Player has signed the book" }, }, Returns = [[ diff --git a/Server/Plugins/APIDump/Hooks/OnPlayerEditingBook.lua b/Server/Plugins/APIDump/Hooks/OnPlayerEditingBook.lua index 455bf4f69f..082c6a4a29 100644 --- a/Server/Plugins/APIDump/Hooks/OnPlayerEditingBook.lua +++ b/Server/Plugins/APIDump/Hooks/OnPlayerEditingBook.lua @@ -12,7 +12,8 @@ return Params = { { Name = "Player", Type = "cPlayer", Notes = "The player that is editing the book" }, - { Name = "BookContent", Type = "cBookContent", Notes = "The class that contains the current info of the book" }, + { Name = "OriginalContent", Type = "cBookContent", Notes = "Contains the original content of the book" }, + { Name = "NewContent", Type = "cBookContent", Notes = "Contains the new content of the book" }, { Name = "IsSigned", Type = "boolean", Notes = "Player is signing the book" }, }, Returns = [[ diff --git a/src/Bindings/LuaState.cpp b/src/Bindings/LuaState.cpp index e30d0ed5f3..013579016e 100644 --- a/src/Bindings/LuaState.cpp +++ b/src/Bindings/LuaState.cpp @@ -864,6 +864,17 @@ void cLuaState::Push(const AStringVector & a_Vector) +void cLuaState::Push(const cBookContent & a_Content) +{ + ASSERT(IsValid()); + auto c = new cBookContent(a_Content); + tolua_pushusertype_and_takeownership(m_LuaState, c, "cBookContent"); +} + + + + + void cLuaState::Push(const char * a_Value) { ASSERT(IsValid()); diff --git a/src/Bindings/LuaState.h b/src/Bindings/LuaState.h index d91a72a74e..57d24ef724 100644 --- a/src/Bindings/LuaState.h +++ b/src/Bindings/LuaState.h @@ -610,6 +610,7 @@ class cLuaState void Push(const AString & a_String); void Push(const AStringMap & a_Dictionary); void Push(const AStringVector & a_Vector); + void Push(const cBookContent & a_Content); void Push(const char * a_Value); void Push(const cNil & a_Nil); void Push(const cRef & a_Ref); diff --git a/src/Bindings/Plugin.h b/src/Bindings/Plugin.h index cda202933a..ca4e799740 100644 --- a/src/Bindings/Plugin.h +++ b/src/Bindings/Plugin.h @@ -74,8 +74,8 @@ class cPlugin virtual bool OnPlayerBrokenBlock (cPlayer & a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, char a_BlockFace, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta) = 0; virtual bool OnPlayerDestroyed (cPlayer & a_Player) = 0; virtual bool OnPlayerEating (cPlayer & a_Player) = 0; - virtual bool OnPlayerEditedBook (cPlayer & a_Player, cBookContent & a_BookContent, bool a_IsSigned) = 0; - virtual bool OnPlayerEditingBook (cPlayer & a_Player, cBookContent & a_BookContent, bool a_IsSigned) = 0; + virtual bool OnPlayerEditedBook (cPlayer & a_Player, const cBookContent & a_NewContent, bool a_IsSigned) = 0; + virtual bool OnPlayerEditingBook (cPlayer & a_Player, const cBookContent & a_OriginalContent, cBookContent & a_NewContent, bool a_IsSigned) = 0; virtual bool OnPlayerFished (cPlayer & a_Player, const cItems & a_Reward) = 0; virtual bool OnPlayerFishing (cPlayer & a_Player, cItems & a_Reward) = 0; virtual bool OnPlayerFoodLevelChange (cPlayer & a_Player, int a_NewFoodLevel) = 0; diff --git a/src/Bindings/PluginLua.cpp b/src/Bindings/PluginLua.cpp index b8636e5411..5597124a33 100644 --- a/src/Bindings/PluginLua.cpp +++ b/src/Bindings/PluginLua.cpp @@ -595,18 +595,18 @@ bool cPluginLua::OnPlayerEating(cPlayer & a_Player) -bool cPluginLua::OnPlayerEditedBook(cPlayer & a_Player, cBookContent & a_BookContent, bool a_IsSigned) +bool cPluginLua::OnPlayerEditedBook(cPlayer & a_Player, const cBookContent & a_NewContent, bool a_IsSigned) { - return CallSimpleHooks(cPluginManager::HOOK_PLAYER_EDITED_BOOK, &a_Player, &a_BookContent, a_IsSigned); + return CallSimpleHooks(cPluginManager::HOOK_PLAYER_EDITED_BOOK, &a_Player, a_NewContent, a_IsSigned); } -bool cPluginLua::OnPlayerEditingBook(cPlayer & a_Player, cBookContent & a_BookContent, bool a_IsSigned) +bool cPluginLua::OnPlayerEditingBook(cPlayer & a_Player, const cBookContent & a_OriginalContent, cBookContent & a_NewContent, bool a_IsSigned) { - return CallSimpleHooks(cPluginManager::HOOK_PLAYER_EDITING_BOOK, &a_Player, &a_BookContent, a_IsSigned); + return CallSimpleHooks(cPluginManager::HOOK_PLAYER_EDITING_BOOK, &a_Player, a_OriginalContent, &a_NewContent, a_IsSigned); } diff --git a/src/Bindings/PluginLua.h b/src/Bindings/PluginLua.h index 41f5c27688..8f069f21b3 100644 --- a/src/Bindings/PluginLua.h +++ b/src/Bindings/PluginLua.h @@ -95,8 +95,8 @@ class cPluginLua : virtual bool OnPlayerBrokenBlock (cPlayer & a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, char a_BlockFace, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta) override; virtual bool OnPlayerDestroyed (cPlayer & a_Player) override; virtual bool OnPlayerEating (cPlayer & a_Player) override; - virtual bool OnPlayerEditedBook (cPlayer & a_Player, cBookContent & a_BookContent, bool a_IsSigned) override; - virtual bool OnPlayerEditingBook (cPlayer & a_Player, cBookContent & a_BookContent, bool a_IsSigned) override; + virtual bool OnPlayerEditedBook (cPlayer & a_Player, const cBookContent & a_NewContent, bool a_IsSigned) override; + virtual bool OnPlayerEditingBook (cPlayer & a_Player, const cBookContent & a_OriginalContent, cBookContent & a_NewContent, bool a_IsSigned) override; virtual bool OnPlayerFished (cPlayer & a_Player, const cItems & a_Reward) override; virtual bool OnPlayerFishing (cPlayer & a_Player, cItems & a_Reward) override; virtual bool OnPlayerFoodLevelChange (cPlayer & a_Player, int a_NewFoodLevel) override; diff --git a/src/Bindings/PluginManager.cpp b/src/Bindings/PluginManager.cpp index 29403278e3..fc9d5fa05e 100644 --- a/src/Bindings/PluginManager.cpp +++ b/src/Bindings/PluginManager.cpp @@ -885,14 +885,14 @@ bool cPluginManager::CallHookPlayerEating(cPlayer & a_Player) -bool cPluginManager::CallHookPlayerEditedBook(cPlayer & a_Player, cBookContent & a_BookContent, bool a_IsSigned) +bool cPluginManager::CallHookPlayerEditedBook(cPlayer & a_Player, const cBookContent & a_NewContent, bool a_IsSigned) { FIND_HOOK(HOOK_PLAYER_EDITED_BOOK); VERIFY_HOOK; for (PluginList::iterator itr = Plugins->second.begin(); itr != Plugins->second.end(); ++itr) { - if ((*itr)->OnPlayerEditedBook(a_Player, a_BookContent, a_IsSigned)) + if ((*itr)->OnPlayerEditedBook(a_Player, a_NewContent, a_IsSigned)) { return true; } @@ -904,14 +904,14 @@ bool cPluginManager::CallHookPlayerEditedBook(cPlayer & a_Player, cBookContent & -bool cPluginManager::CallHookPlayerEditingBook(cPlayer & a_Player, cBookContent & a_BookContent, bool a_IsSigned) +bool cPluginManager::CallHookPlayerEditingBook(cPlayer & a_Player, const cBookContent & a_OriginalContent, cBookContent & a_NewContent, bool a_IsSigned) { FIND_HOOK(HOOK_PLAYER_EDITING_BOOK); VERIFY_HOOK; for (PluginList::iterator itr = Plugins->second.begin(); itr != Plugins->second.end(); ++itr) { - if ((*itr)->OnPlayerEditingBook(a_Player, a_BookContent, a_IsSigned)) + if ((*itr)->OnPlayerEditingBook(a_Player, a_OriginalContent, a_NewContent, a_IsSigned)) { return true; } diff --git a/src/Bindings/PluginManager.h b/src/Bindings/PluginManager.h index 3d8ce7c966..8e9d057c5f 100644 --- a/src/Bindings/PluginManager.h +++ b/src/Bindings/PluginManager.h @@ -254,8 +254,8 @@ class cPluginManager bool CallHookPlayerBrokenBlock (cPlayer & a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, char a_BlockFace, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta); bool CallHookPlayerDestroyed (cPlayer & a_Player); bool CallHookPlayerEating (cPlayer & a_Player); - bool CallHookPlayerEditedBook (cPlayer & a_Player, cBookContent & a_BookContent, bool a_IsSigned); - bool CallHookPlayerEditingBook (cPlayer & a_Player, cBookContent & a_BookContent, bool a_IsSigned); + bool CallHookPlayerEditedBook (cPlayer & a_Player, const cBookContent & a_NewContent, bool a_IsSigned); + bool CallHookPlayerEditingBook (cPlayer & a_Player, const cBookContent & a_OrigialContent, cBookContent & a_NewContent, bool a_IsSigned); bool CallHookPlayerFished (cPlayer & a_Player, const cItems & a_Reward); bool CallHookPlayerFishing (cPlayer & a_Player, cItems a_Reward); bool CallHookPlayerFoodLevelChange (cPlayer & a_Player, int a_NewFoodLevel); diff --git a/src/Protocol/Protocol_1_9.cpp b/src/Protocol/Protocol_1_9.cpp index c2c3acdf56..7d51de0136 100644 --- a/src/Protocol/Protocol_1_9.cpp +++ b/src/Protocol/Protocol_1_9.cpp @@ -2938,7 +2938,8 @@ void cProtocol_1_9_0::HandleVanillaPluginMessage(cByteBuffer & a_ByteBuffer, con cBookContent::ParseFromNBT(0, BookItem.m_BookContent, NBT); } - if (cRoot::Get()->GetPluginManager()->CallHookPlayerEditingBook(Player, BookItem.m_BookContent, IsSigned)) + // The equipped item contains the old book content + if (cRoot::Get()->GetPluginManager()->CallHookPlayerEditingBook(Player, Player.GetEquippedItem().m_BookContent, BookItem.m_BookContent, IsSigned)) { // Plugin denied the editing of the book return;