summaryrefslogtreecommitdiffstats
path: root/source/Plugin_NewLua.h
blob: fc3565bbc8ba8277c10f8ff9757772027637d9bd (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130

#pragma once

#include "Plugin.h"
#include "WebPlugin.h"

// Names for the global variables through which the plugin is identified in its LuaState
#define LUA_PLUGIN_NAME_VAR_NAME     "_MCServerInternal_PluginName"
#define LUA_PLUGIN_INSTANCE_VAR_NAME "_MCServerInternal_PluginInstance"




// fwd: Lua
typedef struct lua_State lua_State;

// fwd: UI/Window.h
class cWindow;





// tolua_begin
class cPlugin_NewLua :
	public cPlugin,
	public cWebPlugin
{
public:
	// tolua_end
	
	cPlugin_NewLua( const AString & a_PluginDirectory );
	~cPlugin_NewLua();

	virtual void OnDisable(void) override;
	virtual bool Initialize(void) override;

	virtual void Tick(float a_Dt) override;

	virtual bool OnBlockToPickups     (cWorld * a_World, cEntity * a_Digger, int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta, cItems & a_Pickups) override;
	virtual bool OnChat               (cPlayer * a_Player, const AString & a_Message) override;
	virtual bool OnChunkAvailable     (cWorld * a_World, int a_ChunkX, int a_ChunkZ) override;
	virtual bool OnChunkGenerated     (cWorld * a_World, int a_ChunkX, int a_ChunkZ, cChunkDesc * a_ChunkDesc) override;
	virtual bool OnChunkGenerating    (cWorld * a_World, int a_ChunkX, int a_ChunkZ, cChunkDesc * a_ChunkDesc) override;
	virtual bool OnChunkUnloaded      (cWorld * a_World, int a_ChunkX, int a_ChunkZ) override;
	virtual bool OnChunkUnloading     (cWorld * a_World, int a_ChunkX, int a_ChunkZ) override;
	virtual bool OnCollectingPickup   (cPlayer * a_Player, cPickup * a_Pickup) override;
	virtual bool OnCraftingNoRecipe   (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe) override;
	virtual bool OnDisconnect         (cPlayer * a_Player, const AString & a_Reason) override;
	virtual bool OnExecuteCommand     (cPlayer * a_Player, const AStringVector & a_Split) override;
	virtual bool OnHandshake          (cClientHandle * a_Client, const AString & a_Username) override;
	virtual bool OnKilling            (cPawn & a_Victim, cEntity * a_Killer) override;
	virtual bool OnLogin              (cClientHandle * a_Client, int a_ProtocolVersion, const AString & a_Username) override;
	virtual bool OnPlayerBreakingBlock(cPlayer & a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, char a_BlockFace, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta) override;
	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 OnPlayerEating       (cPlayer & a_Player) override;
	virtual bool OnPlayerJoined       (cPlayer & a_Player) override;
	virtual bool OnPlayerMoved        (cPlayer & a_Player) override;
	virtual bool OnPlayerLeftClick    (cPlayer & a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, char a_BlockFace, char a_Status) override;
	virtual bool OnPlayerPlacedBlock  (cPlayer & a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, char a_BlockFace, int a_CursorX, int a_CursorY, int a_CursorZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta) override;
	virtual bool OnPlayerPlacingBlock (cPlayer & a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, char a_BlockFace, int a_CursorX, int a_CursorY, int a_CursorZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta) override;
	virtual bool OnPlayerRightClick   (cPlayer & a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, char a_BlockFace, int a_CursorX, int a_CursorY, int a_CursorZ) override;
	virtual bool OnPlayerShooting     (cPlayer & a_Player) override;
	virtual bool OnPlayerSpawned      (cPlayer & a_Player) override;
	virtual bool OnPlayerTossingItem  (cPlayer & a_Player) override;
	virtual bool OnPlayerUsedBlock    (cPlayer & a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, char a_BlockFace, int a_CursorX, int a_CursorY, int a_CursorZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta) override;
	virtual bool OnPlayerUsedItem     (cPlayer & a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, char a_BlockFace, int a_CursorX, int a_CursorY, int a_CursorZ) override;
	virtual bool OnPlayerUsingBlock   (cPlayer & a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, char a_BlockFace, int a_CursorX, int a_CursorY, int a_CursorZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta) override;
	virtual bool OnPlayerUsingItem    (cPlayer & a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, char a_BlockFace, int a_CursorX, int a_CursorY, int a_CursorZ) override;
	virtual bool OnPostCrafting       (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe) override;
	virtual bool OnPreCrafting        (const cPlayer * a_Player, const cCraftingGrid * a_Grid, cCraftingRecipe * a_Recipe) override;
	virtual bool OnTakeDamage         (cPawn & a_Receiver, TakeDamageInfo & a_TakeDamageInfo) override;
	virtual bool OnUpdatedSign        (cWorld * a_World, int a_BlockX, int a_BlockY, int a_BlockZ, const AString & a_Line1, const AString & a_Line2, const AString & a_Line3, const AString & a_Line4, cPlayer * a_Player) override;
	virtual bool OnUpdatingSign       (cWorld * a_World, int a_BlockX, int a_BlockY, int a_BlockZ,       AString & a_Line1,       AString & a_Line2,       AString & a_Line3,       AString & a_Line4, cPlayer * a_Player) override;
	virtual bool OnWeatherChanged     (cWorld & a_World) override;
	virtual bool OnWeatherChanging    (cWorld & a_World, eWeather & a_NewWeather) override;
	
	virtual bool HandleCommand(const AStringVector & a_Split, cPlayer * a_Player) override;
	
	virtual bool HandleConsoleCommand(const AStringVector & a_Split) override;

	virtual void ClearCommands(void) override;
	
	virtual void ClearConsoleCommands(void) override;

	virtual bool CanAddHook(cPluginManager::PluginHook a_Hook) override;
	
	// cWebPlugin override
	virtual const AString & GetWebTitle(void) const {return GetName(); }

	// cWebPlugin and WebAdmin stuff
	virtual AString HandleWebRequest( HTTPRequest * a_Request ) override;
	bool AddWebTab(const AString & a_Title, lua_State * a_LuaState, int a_FunctionReference);	// >> EXPORTED IN MANUALBINDINGS <<
	
	/// Binds the command to call the function specified by a Lua function reference. Simply adds to CommandMap.
	void BindCommand(const AString & a_Command, int a_FnRef);

	/// Binds the console command to call the function specified by a Lua function reference. Simply adds to CommandMap.
	void BindConsoleCommand(const AString & a_Command, int a_FnRef);

	lua_State * GetLuaState(void) { return m_LuaState; }

	cCriticalSection & GetCriticalSection(void) { return m_CriticalSection; }
	
	/// Removes a previously referenced object (luaL_unref())
	void Unreference(int a_LuaRef);
	
	/// Calls the plugin-specified "cLuaWindow closing" callback. Returns true only if the callback returned true
	bool CallbackWindowClosing(int a_FnRef, cWindow & a_Window, cPlayer & a_Player);
	
protected:
	cCriticalSection m_CriticalSection;
	lua_State * m_LuaState;
	
	/// Maps command name into Lua function reference
	typedef std::map<AString, int> CommandMap;
	
	CommandMap m_Commands;
	CommandMap m_ConsoleCommands;

	bool PushFunction(const char * a_FunctionName, bool a_bLogError = true);
	bool CallFunction(int a_NumArgs, int a_NumResults, const char * a_FunctionName );  // a_FunctionName is only used for error messages, nothing else
	
	/// Returns the name of Lua function that should handle the specified hook
	const char * GetHookFnName(cPluginManager::PluginHook a_Hook);
} ;  // tolua_export