Merge branch 'master' into BlockTracing
This commit is contained in:
commit
c0066e7260
@ -1852,6 +1852,10 @@
|
|||||||
RelativePath="..\source\blocks\BlockCactus.h"
|
RelativePath="..\source\blocks\BlockCactus.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\source\Blocks\BlockCarpet.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\source\Blocks\BlockCauldron.h"
|
RelativePath="..\source\Blocks\BlockCauldron.h"
|
||||||
>
|
>
|
||||||
|
89
VC2008/MCServer.vcproj.user
Normal file
89
VC2008/MCServer.vcproj.user
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<VisualStudioUserFile
|
||||||
|
ProjectType="Visual C++"
|
||||||
|
Version="9,00"
|
||||||
|
ShowAllFiles="false"
|
||||||
|
>
|
||||||
|
<Configurations>
|
||||||
|
<Configuration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
>
|
||||||
|
<DebugSettings
|
||||||
|
Command="$(TargetPath)"
|
||||||
|
WorkingDirectory="..\MCServer"
|
||||||
|
CommandArguments=""
|
||||||
|
Attach="false"
|
||||||
|
DebuggerType="3"
|
||||||
|
RemoteCommand=""
|
||||||
|
HttpUrl=""
|
||||||
|
PDBPath=""
|
||||||
|
SQLDebugging=""
|
||||||
|
Environment=""
|
||||||
|
EnvironmentMerge="true"
|
||||||
|
DebuggerFlavor="0"
|
||||||
|
MPIRunCommand=""
|
||||||
|
MPIRunArguments=""
|
||||||
|
MPIRunWorkingDirectory=""
|
||||||
|
ApplicationCommand=""
|
||||||
|
ApplicationArguments=""
|
||||||
|
ShimCommand=""
|
||||||
|
MPIAcceptMode=""
|
||||||
|
MPIAcceptFilter=""
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release|Win32"
|
||||||
|
>
|
||||||
|
<DebugSettings
|
||||||
|
Command="$(TargetPath)"
|
||||||
|
WorkingDirectory="..\MCServer"
|
||||||
|
CommandArguments=""
|
||||||
|
Attach="false"
|
||||||
|
DebuggerType="3"
|
||||||
|
RemoteCommand=""
|
||||||
|
HttpUrl=""
|
||||||
|
PDBPath=""
|
||||||
|
SQLDebugging=""
|
||||||
|
Environment=""
|
||||||
|
EnvironmentMerge="true"
|
||||||
|
DebuggerFlavor="0"
|
||||||
|
MPIRunCommand=""
|
||||||
|
MPIRunArguments=""
|
||||||
|
MPIRunWorkingDirectory=""
|
||||||
|
ApplicationCommand=""
|
||||||
|
ApplicationArguments=""
|
||||||
|
ShimCommand=""
|
||||||
|
MPIAcceptMode=""
|
||||||
|
MPIAcceptFilter=""
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
<Configuration
|
||||||
|
Name="Release profiled|Win32"
|
||||||
|
>
|
||||||
|
<DebugSettings
|
||||||
|
Command="$(TargetPath)"
|
||||||
|
WorkingDirectory="..\MCServer"
|
||||||
|
CommandArguments=""
|
||||||
|
Attach="false"
|
||||||
|
DebuggerType="3"
|
||||||
|
Remote="1"
|
||||||
|
RemoteMachine="ASAGA"
|
||||||
|
RemoteCommand=""
|
||||||
|
HttpUrl=""
|
||||||
|
PDBPath=""
|
||||||
|
SQLDebugging=""
|
||||||
|
Environment=""
|
||||||
|
EnvironmentMerge="true"
|
||||||
|
DebuggerFlavor="0"
|
||||||
|
MPIRunCommand=""
|
||||||
|
MPIRunArguments=""
|
||||||
|
MPIRunWorkingDirectory=""
|
||||||
|
ApplicationCommand=""
|
||||||
|
ApplicationArguments=""
|
||||||
|
ShimCommand=""
|
||||||
|
MPIAcceptMode=""
|
||||||
|
MPIAcceptFilter=""
|
||||||
|
/>
|
||||||
|
</Configuration>
|
||||||
|
</Configurations>
|
||||||
|
</VisualStudioUserFile>
|
File diff suppressed because it is too large
Load Diff
@ -30,135 +30,155 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
class cIniFile // tolua_export
|
// tolua_begin
|
||||||
{ // tolua_export
|
|
||||||
|
class cIniFile
|
||||||
|
{
|
||||||
private:
|
private:
|
||||||
bool caseInsensitive;
|
bool m_IsCaseInsensitive;
|
||||||
std::string path;
|
std::string m_Path;
|
||||||
struct key {
|
|
||||||
|
struct key
|
||||||
|
{
|
||||||
std::vector<std::string> names;
|
std::vector<std::string> names;
|
||||||
std::vector<std::string> values;
|
std::vector<std::string> values;
|
||||||
std::vector<std::string> comments;
|
std::vector<std::string> comments;
|
||||||
};
|
} ;
|
||||||
std::vector<key> keys;
|
|
||||||
std::vector<std::string> names;
|
std::vector<key> keys;
|
||||||
|
std::vector<std::string> names;
|
||||||
std::vector<std::string> comments;
|
std::vector<std::string> comments;
|
||||||
std::string CheckCase( std::string s) const;
|
|
||||||
|
/// If the object is case-insensitive, returns s as lowercase; otherwise returns s as-is
|
||||||
|
std::string CheckCase(const std::string & s) const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
enum errors{ noID = -1}; // tolua_export
|
enum errors
|
||||||
cIniFile( const std::string iniPath = ""); // tolua_export
|
{
|
||||||
virtual ~cIniFile() {}
|
noID = -1,
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Creates a new instance; sets m_Path to a_Path, but doesn't read the file
|
||||||
|
cIniFile(const std::string & a_Path = "");
|
||||||
|
|
||||||
// Sets whether or not keynames and valuenames should be case sensitive.
|
// Sets whether or not keynames and valuenames should be case sensitive.
|
||||||
// The default is case insensitive.
|
// The default is case insensitive.
|
||||||
void CaseSensitive() {caseInsensitive = false;} // tolua_export
|
void CaseSensitive (void) { m_IsCaseInsensitive = false; }
|
||||||
void CaseInsensitive() {caseInsensitive = true;} // tolua_export
|
void CaseInsensitive(void) { m_IsCaseInsensitive = true; }
|
||||||
|
|
||||||
// Sets path of ini file to read and write from.
|
// Sets path of ini file to read and write from.
|
||||||
void Path(const std::string & newPath) {path = newPath;} // tolua_export
|
void Path(const std::string & newPath) {m_Path = newPath;}
|
||||||
std::string Path() const {return path;} // tolua_export
|
const std::string & Path(void) const {return m_Path;}
|
||||||
void SetPath(const std::string & newPath) {Path( newPath);} // tolua_export
|
void SetPath(const std::string & newPath) {Path(newPath);}
|
||||||
|
|
||||||
// Reads ini file specified using path.
|
/** Reads the ini file specified in m_Path
|
||||||
// Returns true if successful, false otherwise.
|
If the file doesn't exist and a_AllowExampleRedirect is true, tries to read <basename>.example.ini, and
|
||||||
bool ReadFile(); // tolua_export
|
writes its contents as <basename>.ini, if successful.
|
||||||
|
Returns true if successful, false otherwise.
|
||||||
|
*/
|
||||||
|
bool ReadFile(bool a_AllowExampleRedirect = true);
|
||||||
|
|
||||||
// Writes data stored in class to ini file.
|
/// Writes data stored in class to ini file specified in m_Path
|
||||||
bool WriteFile(); // tolua_export
|
bool WriteFile(void) const;
|
||||||
|
|
||||||
// Deletes all stored ini data.
|
/// Deletes all stored ini data (but doesn't touch the file)
|
||||||
void Erase(); // tolua_export
|
void Clear(void);
|
||||||
void Clear() {Erase();} // tolua_export
|
void Reset(void) { Clear(); }
|
||||||
void Reset() {Erase();} // tolua_export
|
void Erase(void) { Clear(); } // OBSOLETE, this name is misguiding and will be removed from the interface
|
||||||
|
|
||||||
// Returns index of specified key, or noID if not found.
|
/// Returns index of specified key, or noID if not found
|
||||||
long FindKey( const std::string & keyname) const; // tolua_export
|
long FindKey(const std::string & keyname) const;
|
||||||
|
|
||||||
// Returns index of specified value, in the specified key, or noID if not found.
|
/// Returns index of specified value, in the specified key, or noID if not found
|
||||||
long FindValue( const unsigned keyID, const std::string & valuename) const; // tolua_export
|
long FindValue(const unsigned keyID, const std::string & valuename) const;
|
||||||
|
|
||||||
// Returns number of keys currently in the ini.
|
/// Returns number of keys currently in the ini
|
||||||
unsigned NumKeys() const {return names.size();} // tolua_export
|
unsigned NumKeys (void) const {return names.size();}
|
||||||
unsigned GetNumKeys() const {return NumKeys();} // tolua_export
|
unsigned GetNumKeys(void) const {return NumKeys();}
|
||||||
|
|
||||||
// Add a key name.
|
/// Add a key name
|
||||||
unsigned AddKeyName( const std::string & keyname); // tolua_export
|
unsigned AddKeyName(const std::string & keyname);
|
||||||
|
|
||||||
// Returns key names by index.
|
// Returns key names by index.
|
||||||
std::string KeyName( const unsigned keyID) const; // tolua_export
|
std::string KeyName(const unsigned keyID) const;
|
||||||
std::string GetKeyName( const unsigned keyID) const {return KeyName(keyID);} // tolua_export
|
std::string GetKeyName(const unsigned keyID) const {return KeyName(keyID);}
|
||||||
|
|
||||||
// Returns number of values stored for specified key.
|
// Returns number of values stored for specified key.
|
||||||
unsigned NumValues( const std::string & keyname); // tolua_export
|
unsigned NumValues (const std::string & keyname);
|
||||||
unsigned GetNumValues( const std::string & keyname) {return NumValues( keyname);} // tolua_export
|
unsigned GetNumValues(const std::string & keyname) {return NumValues(keyname);}
|
||||||
unsigned NumValues( const unsigned keyID); // tolua_export
|
unsigned NumValues (const unsigned keyID);
|
||||||
unsigned GetNumValues( const unsigned keyID) {return NumValues( keyID);} // tolua_export
|
unsigned GetNumValues(const unsigned keyID) {return NumValues(keyID);}
|
||||||
|
|
||||||
// Returns value name by index for a given keyname or keyID.
|
// Returns value name by index for a given keyname or keyID.
|
||||||
std::string ValueName( const std::string & keyname, const unsigned valueID) const; // tolua_export
|
std::string ValueName( const std::string & keyname, const unsigned valueID) const;
|
||||||
std::string GetValueName( const std::string & keyname, const unsigned valueID) const { // tolua_export
|
std::string GetValueName( const std::string & keyname, const unsigned valueID) const
|
||||||
return ValueName( keyname, valueID);
|
{
|
||||||
} // tolua_export
|
return ValueName(keyname, valueID);
|
||||||
std::string ValueName( const unsigned keyID, const unsigned valueID) const; // tolua_export
|
}
|
||||||
std::string GetValueName( const unsigned keyID, const unsigned valueID) const { // tolua_export
|
std::string ValueName (const unsigned keyID, const unsigned valueID) const;
|
||||||
return ValueName( keyID, valueID);
|
std::string GetValueName(const unsigned keyID, const unsigned valueID) const
|
||||||
} // tolua_export
|
{
|
||||||
|
return ValueName(keyID, valueID);
|
||||||
|
}
|
||||||
|
|
||||||
// Gets value of [keyname] valuename =.
|
// Gets value of [keyname] valuename =.
|
||||||
// Overloaded to return string, int, and double.
|
// Overloaded to return string, int, and double.
|
||||||
// Returns defValue if key/value not found.
|
// Returns defValue if key/value not found.
|
||||||
AString GetValue (const AString & keyname, const AString & valuename, const AString & defValue = "") const; // tolua_export
|
AString GetValue (const AString & keyname, const AString & valuename, const AString & defValue = "") const;
|
||||||
AString GetValue (const unsigned keyID, const unsigned valueID, const AString & defValue = "") const; // tolua_export
|
AString GetValue (const unsigned keyID, const unsigned valueID, const AString & defValue = "") const;
|
||||||
double GetValueF(const AString & keyname, const AString & valuename, const double defValue = 0) const; // tolua_export
|
double GetValueF(const AString & keyname, const AString & valuename, const double defValue = 0) const;
|
||||||
int GetValueI(const AString & keyname, const AString & valuename, const int defValue = 0) const; // tolua_export
|
int GetValueI(const AString & keyname, const AString & valuename, const int defValue = 0) const;
|
||||||
bool GetValueB(const AString & keyname, const AString & valuename, const bool defValue = false) const { // tolua_export
|
bool GetValueB(const AString & keyname, const AString & valuename, const bool defValue = false) const
|
||||||
return ( GetValueI( keyname, valuename, int( defValue)) > 0);
|
{
|
||||||
} // tolua_export
|
return (GetValueI(keyname, valuename, int(defValue)) > 0);
|
||||||
|
}
|
||||||
|
|
||||||
// Gets the value; if not found, write the default to the INI file
|
// Gets the value; if not found, write the default to the INI file
|
||||||
AString GetValueSet (const AString & keyname, const AString & valuename, const AString & defValue = ""); // tolua_export
|
AString GetValueSet (const AString & keyname, const AString & valuename, const AString & defValue = "");
|
||||||
double GetValueSetF(const AString & keyname, const AString & valuename, const double defValue = 0.0); // tolua_export
|
double GetValueSetF(const AString & keyname, const AString & valuename, const double defValue = 0.0);
|
||||||
int GetValueSetI(const AString & keyname, const AString & valuename, const int defValue = 0); // tolua_export
|
int GetValueSetI(const AString & keyname, const AString & valuename, const int defValue = 0);
|
||||||
bool GetValueSetB(const AString & keyname, const AString & valuename, const bool defValue = false) { // tolua_export
|
bool GetValueSetB(const AString & keyname, const AString & valuename, const bool defValue = false)
|
||||||
|
{
|
||||||
return (GetValueSetI(keyname, valuename, defValue ? 1 : 0) > 0);
|
return (GetValueSetI(keyname, valuename, defValue ? 1 : 0) > 0);
|
||||||
} // tolua_export
|
}
|
||||||
|
|
||||||
// Sets value of [keyname] valuename =.
|
// Sets value of [keyname] valuename =.
|
||||||
// Specify the optional paramter as false (0) if you do not want it to create
|
// Specify the optional paramter as false (0) if you do not want it to create
|
||||||
// the key if it doesn't exist. Returns true if data entered, false otherwise.
|
// the key if it doesn't exist. Returns true if data entered, false otherwise.
|
||||||
// Overloaded to accept string, int, and double.
|
// Overloaded to accept string, int, and double.
|
||||||
bool SetValue( const unsigned keyID, const unsigned valueID, const std::string & value); // tolua_export
|
bool SetValue( const unsigned keyID, const unsigned valueID, const std::string & value);
|
||||||
bool SetValue( const std::string & keyname, const std::string & valuename, const std::string & value, const bool create = true); // tolua_export
|
bool SetValue( const std::string & keyname, const std::string & valuename, const std::string & value, const bool create = true);
|
||||||
bool SetValueI( const std::string & keyname, const std::string & valuename, const int value, const bool create = true); // tolua_export
|
bool SetValueI( const std::string & keyname, const std::string & valuename, const int value, const bool create = true);
|
||||||
bool SetValueB( const std::string & keyname, const std::string & valuename, const bool value, const bool create = true) { // tolua_export
|
bool SetValueB( const std::string & keyname, const std::string & valuename, const bool value, const bool create = true)
|
||||||
|
{
|
||||||
return SetValueI( keyname, valuename, int(value), create);
|
return SetValueI( keyname, valuename, int(value), create);
|
||||||
} // tolua_export
|
}
|
||||||
bool SetValueF( const std::string & keyname, const std::string & valuename, const double value, const bool create = true); // tolua_export
|
bool SetValueF( const std::string & keyname, const std::string & valuename, const double value, const bool create = true);
|
||||||
bool SetValueV( const std::string & keyname, const std::string & valuename, char *format, ...);
|
bool SetValueV( const std::string & keyname, const std::string & valuename, char *format, ...);
|
||||||
|
|
||||||
// Deletes specified value.
|
// Deletes specified value.
|
||||||
// Returns true if value existed and deleted, false otherwise.
|
// Returns true if value existed and deleted, false otherwise.
|
||||||
bool DeleteValueByID( const unsigned keyID, const unsigned valueID ); // tolua_export
|
bool DeleteValueByID( const unsigned keyID, const unsigned valueID );
|
||||||
bool DeleteValue( const std::string & keyname, const std::string & valuename); // tolua_export
|
bool DeleteValue( const std::string & keyname, const std::string & valuename);
|
||||||
|
|
||||||
// Deletes specified key and all values contained within.
|
// Deletes specified key and all values contained within.
|
||||||
// Returns true if key existed and deleted, false otherwise.
|
// Returns true if key existed and deleted, false otherwise.
|
||||||
bool DeleteKey(const std::string & keyname); // tolua_export
|
bool DeleteKey(const std::string & keyname);
|
||||||
|
|
||||||
// Header comment functions.
|
// Header comment functions.
|
||||||
// Header comments are those comments before the first key.
|
// Header comments are those comments before the first key.
|
||||||
//
|
//
|
||||||
// Number of header comments.
|
// Number of header comments.
|
||||||
unsigned NumHeaderComments() {return comments.size();} // tolua_export
|
unsigned NumHeaderComments(void) {return comments.size();}
|
||||||
// Add a header comment.
|
// Add a header comment.
|
||||||
void HeaderComment( const std::string & comment); // tolua_export
|
void HeaderComment(const std::string & comment);
|
||||||
// Return a header comment.
|
// Return a header comment.
|
||||||
std::string HeaderComment( const unsigned commentID) const; // tolua_export
|
std::string HeaderComment(const unsigned commentID) const;
|
||||||
// Delete a header comment.
|
// Delete a header comment.
|
||||||
bool DeleteHeaderComment( unsigned commentID); // tolua_export
|
bool DeleteHeaderComment(unsigned commentID);
|
||||||
// Delete all header comments.
|
// Delete all header comments.
|
||||||
void DeleteHeaderComments() {comments.clear();} // tolua_export
|
void DeleteHeaderComments(void) {comments.clear();}
|
||||||
|
|
||||||
|
|
||||||
// Key comment functions.
|
// Key comment functions.
|
||||||
// Key comments are those comments within a key. Any comments
|
// Key comments are those comments within a key. Any comments
|
||||||
@ -167,20 +187,26 @@ public:
|
|||||||
// the CIniFile::WriteFile() is called.
|
// the CIniFile::WriteFile() is called.
|
||||||
//
|
//
|
||||||
// Number of key comments.
|
// Number of key comments.
|
||||||
unsigned NumKeyComments( const unsigned keyID) const; // tolua_export
|
unsigned NumKeyComments( const unsigned keyID) const;
|
||||||
unsigned NumKeyComments( const std::string & keyname) const; // tolua_export
|
unsigned NumKeyComments( const std::string & keyname) const;
|
||||||
|
|
||||||
// Add a key comment.
|
// Add a key comment.
|
||||||
bool KeyComment( const unsigned keyID, const std::string & comment); // tolua_export
|
bool KeyComment(const unsigned keyID, const std::string & comment);
|
||||||
bool KeyComment( const std::string & keyname, const std::string & comment); // tolua_export
|
bool KeyComment(const std::string & keyname, const std::string & comment);
|
||||||
|
|
||||||
// Return a key comment.
|
// Return a key comment.
|
||||||
std::string KeyComment( const unsigned keyID, const unsigned commentID) const; // tolua_export
|
std::string KeyComment(const unsigned keyID, const unsigned commentID) const;
|
||||||
std::string KeyComment( const std::string & keyname, const unsigned commentID) const; // tolua_export
|
std::string KeyComment(const std::string & keyname, const unsigned commentID) const;
|
||||||
|
|
||||||
// Delete a key comment.
|
// Delete a key comment.
|
||||||
bool DeleteKeyComment( const unsigned keyID, const unsigned commentID); // tolua_export
|
bool DeleteKeyComment(const unsigned keyID, const unsigned commentID);
|
||||||
bool DeleteKeyComment( const std::string & keyname, const unsigned commentID); // tolua_export
|
bool DeleteKeyComment(const std::string & keyname, const unsigned commentID);
|
||||||
|
|
||||||
// Delete all comments for a key.
|
// Delete all comments for a key.
|
||||||
bool DeleteKeyComments( const unsigned keyID); // tolua_export
|
bool DeleteKeyComments(const unsigned keyID);
|
||||||
bool DeleteKeyComments( const std::string & keyname); // tolua_export
|
bool DeleteKeyComments(const std::string & keyname);
|
||||||
}; // tolua_export
|
};
|
||||||
|
|
||||||
|
// tolua_end
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -169,6 +169,8 @@ enum ENUM_BLOCK_ID
|
|||||||
|
|
||||||
E_BLOCK_DROPPER = 158,
|
E_BLOCK_DROPPER = 158,
|
||||||
|
|
||||||
|
E_BLOCK_CARPET = 171,
|
||||||
|
|
||||||
// Keep these two as the last values, without a number - they will get their correct number assigned automagically by C++
|
// Keep these two as the last values, without a number - they will get their correct number assigned automagically by C++
|
||||||
// IsValidBlock() depends on this
|
// IsValidBlock() depends on this
|
||||||
E_BLOCK_NUMBER_OF_TYPES, ///< Number of individual (different) blocktypes
|
E_BLOCK_NUMBER_OF_TYPES, ///< Number of individual (different) blocktypes
|
||||||
|
54
source/Blocks/BlockCarpet.h
Normal file
54
source/Blocks/BlockCarpet.h
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
|
||||||
|
// BlockCarpet.h
|
||||||
|
|
||||||
|
// Declares the cBlockCarpetHandler class representing the handler for the carpet block
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class cBlockCarpetHandler :
|
||||||
|
public cBlockHandler
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
cBlockCarpetHandler(BLOCKTYPE a_BlockType);
|
||||||
|
|
||||||
|
virtual const char * GetStepSound(void) override
|
||||||
|
{
|
||||||
|
return "step.cloth";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
virtual bool GetPlacementBlockTypeMeta(
|
||||||
|
cWorld * a_World, 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
|
||||||
|
{
|
||||||
|
a_BlockType = m_BlockType;
|
||||||
|
a_BlockMeta = a_Player->GetEquippedItem().m_ItemDamage & 0x0f;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
virtual void ConvertToPickups(cItems & a_Pickups, NIBBLETYPE a_BlockMeta) override
|
||||||
|
{
|
||||||
|
a_Pickups.push_back(cItem(E_BLOCK_CARPET, a_BlockMeta));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
virtual bool CanBeAt(int a_RelX, int a_RelY, int a_RelZ, const cChunk & a_Chunk) override
|
||||||
|
{
|
||||||
|
return ((a_RelY > 0) && (a_Chunk.GetBlock(a_RelX, a_RelY - 1, a_RelZ) != E_BLOCK_AIR));
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include "BlockEntity.h"
|
#include "BlockEntity.h"
|
||||||
#include "../World.h"
|
#include "../World.h"
|
||||||
|
#include "../BlockArea.h"
|
||||||
#include "../Player.h"
|
#include "../Player.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "../Piston.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -5,59 +5,60 @@
|
|||||||
#include "../World.h"
|
#include "../World.h"
|
||||||
#include "../Root.h"
|
#include "../Root.h"
|
||||||
#include "../PluginManager.h"
|
#include "../PluginManager.h"
|
||||||
#include "BlockSand.h"
|
|
||||||
#include "BlockGravel.h"
|
|
||||||
#include "BlockDoor.h"
|
|
||||||
#include "BlockFire.h"
|
|
||||||
#include "BlockRedstone.h"
|
|
||||||
#include "BlockRedstoneTorch.h"
|
|
||||||
#include "BlockRedstoneRepeater.h"
|
|
||||||
#include "BlockPiston.h"
|
|
||||||
#include "BlockWorkbench.h"
|
|
||||||
#include "BlockEntity.h"
|
|
||||||
#include "BlockVine.h"
|
|
||||||
#include "BlockTallGrass.h"
|
|
||||||
#include "BlockSnow.h"
|
|
||||||
#include "BlockCloth.h"
|
|
||||||
#include "BlockSlab.h"
|
|
||||||
#include "BlockDirt.h"
|
|
||||||
#include "BlockTorch.h"
|
|
||||||
#include "BlockWood.h"
|
|
||||||
#include "BlockLeaves.h"
|
|
||||||
#include "BlockSapling.h"
|
|
||||||
#include "BlockFluid.h"
|
|
||||||
#include "BlockChest.h"
|
|
||||||
#include "BlockFurnace.h"
|
|
||||||
#include "BlockDropSpenser.h"
|
|
||||||
#include "BlockStairs.h"
|
|
||||||
#include "BlockLadder.h"
|
|
||||||
#include "BlockLever.h"
|
|
||||||
#include "BlockSign.h"
|
|
||||||
#include "BlockCrops.h"
|
|
||||||
#include "BlockSugarcane.h"
|
|
||||||
#include "BlockFlower.h"
|
|
||||||
#include "BlockMushroom.h"
|
|
||||||
#include "BlockCactus.h"
|
|
||||||
#include "BlockStems.h"
|
|
||||||
#include "BlockGlowstone.h"
|
|
||||||
#include "BlockStone.h"
|
|
||||||
#include "BlockMelon.h"
|
|
||||||
#include "BlockIce.h"
|
|
||||||
#include "BlockOre.h"
|
|
||||||
#include "BlockNote.h"
|
|
||||||
#include "BlockBed.h"
|
#include "BlockBed.h"
|
||||||
#include "BlockFarmland.h"
|
|
||||||
#include "BlockMycelium.h"
|
|
||||||
#include "BlockRail.h"
|
|
||||||
#include "BlockGlass.h"
|
|
||||||
#include "BlockEnderchest.h"
|
|
||||||
#include "BlockFenceGate.h"
|
|
||||||
#include "BlockFlowerPot.h"
|
|
||||||
#include "BlockCauldron.h"
|
|
||||||
#include "BlockBrewingStand.h"
|
#include "BlockBrewingStand.h"
|
||||||
|
#include "BlockCactus.h"
|
||||||
|
#include "BlockCarpet.h"
|
||||||
|
#include "BlockCauldron.h"
|
||||||
|
#include "BlockChest.h"
|
||||||
|
#include "BlockCloth.h"
|
||||||
#include "BlockCobWeb.h"
|
#include "BlockCobWeb.h"
|
||||||
|
#include "BlockCrops.h"
|
||||||
#include "BlockDeadBush.h"
|
#include "BlockDeadBush.h"
|
||||||
|
#include "BlockDirt.h"
|
||||||
|
#include "BlockDoor.h"
|
||||||
|
#include "BlockDropSpenser.h"
|
||||||
|
#include "BlockEnderchest.h"
|
||||||
|
#include "BlockEntity.h"
|
||||||
|
#include "BlockFarmland.h"
|
||||||
|
#include "BlockFenceGate.h"
|
||||||
|
#include "BlockFire.h"
|
||||||
|
#include "BlockFlower.h"
|
||||||
|
#include "BlockFlowerPot.h"
|
||||||
|
#include "BlockFluid.h"
|
||||||
|
#include "BlockFurnace.h"
|
||||||
|
#include "BlockGlass.h"
|
||||||
|
#include "BlockGlowstone.h"
|
||||||
|
#include "BlockGravel.h"
|
||||||
#include "BlockHopper.h"
|
#include "BlockHopper.h"
|
||||||
|
#include "BlockIce.h"
|
||||||
|
#include "BlockLadder.h"
|
||||||
|
#include "BlockLeaves.h"
|
||||||
|
#include "BlockLever.h"
|
||||||
|
#include "BlockMelon.h"
|
||||||
|
#include "BlockMushroom.h"
|
||||||
|
#include "BlockMycelium.h"
|
||||||
|
#include "BlockNote.h"
|
||||||
|
#include "BlockOre.h"
|
||||||
|
#include "BlockPiston.h"
|
||||||
|
#include "BlockRail.h"
|
||||||
|
#include "BlockRedstone.h"
|
||||||
|
#include "BlockRedstoneRepeater.h"
|
||||||
|
#include "BlockRedstoneTorch.h"
|
||||||
|
#include "BlockSand.h"
|
||||||
|
#include "BlockSapling.h"
|
||||||
|
#include "BlockSign.h"
|
||||||
|
#include "BlockSlab.h"
|
||||||
|
#include "BlockSnow.h"
|
||||||
|
#include "BlockStairs.h"
|
||||||
|
#include "BlockStems.h"
|
||||||
|
#include "BlockStone.h"
|
||||||
|
#include "BlockSugarcane.h"
|
||||||
|
#include "BlockTallGrass.h"
|
||||||
|
#include "BlockTorch.h"
|
||||||
|
#include "BlockVine.h"
|
||||||
|
#include "BlockWood.h"
|
||||||
|
#include "BlockWorkbench.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -47,11 +47,8 @@ cGroupManager::cGroupManager()
|
|||||||
cIniFile IniFile("groups.ini");
|
cIniFile IniFile("groups.ini");
|
||||||
if (!IniFile.ReadFile())
|
if (!IniFile.ReadFile())
|
||||||
{
|
{
|
||||||
LOGINFO("groups.ini inaccessible, using groups.example.ini for defaults!");
|
LOGWARNING("groups.ini inaccessible, no groups are defined");
|
||||||
IniFile.Path("groups.example.ini");
|
return;
|
||||||
IniFile.ReadFile();
|
|
||||||
IniFile.Path("groups.ini");
|
|
||||||
IniFile.WriteFile();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int NumKeys = IniFile.GetNumKeys();
|
unsigned int NumKeys = IniFile.GetNumKeys();
|
||||||
|
@ -10,6 +10,9 @@
|
|||||||
|
|
||||||
cMCLogger * cMCLogger::s_MCLogger = NULL;
|
cMCLogger * cMCLogger::s_MCLogger = NULL;
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
HANDLE g_Console = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -145,8 +148,7 @@ void cMCLogger::Error(const char* a_Format, va_list a_ArgList)
|
|||||||
void cMCLogger::SetColor( unsigned char a_Color )
|
void cMCLogger::SetColor( unsigned char a_Color )
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
HANDLE hConsole = GetStdHandle( STD_OUTPUT_HANDLE );
|
SetConsoleTextAttribute(g_Console, a_Color);
|
||||||
SetConsoleTextAttribute( hConsole, a_Color );
|
|
||||||
#else
|
#else
|
||||||
(void)a_Color;
|
(void)a_Color;
|
||||||
#endif
|
#endif
|
||||||
|
@ -170,7 +170,7 @@ cPlugin_NewLua * GetLuaPlugin(lua_State * L)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<
|
template<
|
||||||
class Ty1,
|
class Ty1,
|
||||||
class Ty2,
|
class Ty2,
|
||||||
@ -178,87 +178,177 @@ template<
|
|||||||
>
|
>
|
||||||
static int tolua_DoWith(lua_State* tolua_S)
|
static int tolua_DoWith(lua_State* tolua_S)
|
||||||
{
|
{
|
||||||
int NumArgs = lua_gettop(tolua_S) - 1; /* This includes 'self' */
|
int NumArgs = lua_gettop(tolua_S) - 1; /* This includes 'self' */
|
||||||
if ((NumArgs != 2) && (NumArgs != 3))
|
if ((NumArgs != 2) && (NumArgs != 3))
|
||||||
{
|
{
|
||||||
return lua_do_error(tolua_S, "Error in function call '#funcname#': Requires 2 or 3 arguments, got %i", NumArgs);
|
return lua_do_error(tolua_S, "Error in function call '#funcname#': Requires 2 or 3 arguments, got %i", NumArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
Ty1 * self = (Ty1 *) tolua_tousertype(tolua_S, 1, 0);
|
Ty1 * self = (Ty1 *) tolua_tousertype(tolua_S, 1, 0);
|
||||||
|
|
||||||
const char * ItemName = tolua_tocppstring(tolua_S, 2, "");
|
const char * ItemName = tolua_tocppstring(tolua_S, 2, "");
|
||||||
if ((ItemName == NULL) || (ItemName[0] == 0))
|
if ((ItemName == NULL) || (ItemName[0] == 0))
|
||||||
{
|
|
||||||
return lua_do_error(tolua_S, "Error in function call '#funcname#': Expected a non-empty string for parameter #1", NumArgs);
|
|
||||||
}
|
|
||||||
if (!lua_isfunction( tolua_S, 3))
|
|
||||||
{
|
|
||||||
return lua_do_error(tolua_S, "Error in function call '#funcname#': Expected a function for parameter #2", NumArgs);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* luaL_ref gets reference to value on top of the stack, the table is the last argument and therefore on the top */
|
|
||||||
int TableRef = LUA_REFNIL;
|
|
||||||
if (NumArgs == 3)
|
|
||||||
{
|
|
||||||
TableRef = luaL_ref(tolua_S, LUA_REGISTRYINDEX);
|
|
||||||
if (TableRef == LUA_REFNIL)
|
|
||||||
{
|
|
||||||
return lua_do_error(tolua_S, "Error in function call '#funcname#': Could not get value reference of parameter #3", NumArgs);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* table value is popped, and now function is on top of the stack */
|
|
||||||
int FuncRef = luaL_ref(tolua_S, LUA_REGISTRYINDEX);
|
|
||||||
if (FuncRef == LUA_REFNIL)
|
|
||||||
{
|
|
||||||
return lua_do_error(tolua_S, "Error in function call '#funcname#': Could not get function reference of parameter #2", NumArgs);
|
|
||||||
}
|
|
||||||
|
|
||||||
class cLuaCallback : public cItemCallback<Ty2>
|
|
||||||
{
|
{
|
||||||
public:
|
return lua_do_error(tolua_S, "Error in function call '#funcname#': Expected a non-empty string for parameter #1", NumArgs);
|
||||||
cLuaCallback(lua_State* a_LuaState, int a_FuncRef, int a_TableRef)
|
}
|
||||||
: LuaState( a_LuaState )
|
if (!lua_isfunction( tolua_S, 3))
|
||||||
, FuncRef( a_FuncRef )
|
{
|
||||||
, TableRef( a_TableRef )
|
return lua_do_error(tolua_S, "Error in function call '#funcname#': Expected a function for parameter #2", NumArgs);
|
||||||
{}
|
}
|
||||||
|
|
||||||
private:
|
/* luaL_ref gets reference to value on top of the stack, the table is the last argument and therefore on the top */
|
||||||
virtual bool Item(Ty2 * a_Item) override
|
int TableRef = LUA_REFNIL;
|
||||||
{
|
if (NumArgs == 3)
|
||||||
lua_rawgeti( LuaState, LUA_REGISTRYINDEX, FuncRef); /* Push function reference */
|
{
|
||||||
|
TableRef = luaL_ref(tolua_S, LUA_REGISTRYINDEX);
|
||||||
|
if (TableRef == LUA_REFNIL)
|
||||||
|
{
|
||||||
|
return lua_do_error(tolua_S, "Error in function call '#funcname#': Could not get value reference of parameter #3", NumArgs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* table value is popped, and now function is on top of the stack */
|
||||||
|
int FuncRef = luaL_ref(tolua_S, LUA_REGISTRYINDEX);
|
||||||
|
if (FuncRef == LUA_REFNIL)
|
||||||
|
{
|
||||||
|
return lua_do_error(tolua_S, "Error in function call '#funcname#': Could not get function reference of parameter #2", NumArgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
class cLuaCallback : public cItemCallback<Ty2>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
cLuaCallback(lua_State* a_LuaState, int a_FuncRef, int a_TableRef)
|
||||||
|
: LuaState( a_LuaState )
|
||||||
|
, FuncRef( a_FuncRef )
|
||||||
|
, TableRef( a_TableRef )
|
||||||
|
{}
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual bool Item(Ty2 * a_Item) override
|
||||||
|
{
|
||||||
|
lua_rawgeti( LuaState, LUA_REGISTRYINDEX, FuncRef); /* Push function reference */
|
||||||
tolua_pushusertype(LuaState, a_Item, Ty2::GetClassStatic());
|
tolua_pushusertype(LuaState, a_Item, Ty2::GetClassStatic());
|
||||||
if (TableRef != LUA_REFNIL)
|
if (TableRef != LUA_REFNIL)
|
||||||
{
|
{
|
||||||
lua_rawgeti( LuaState, LUA_REGISTRYINDEX, TableRef); /* Push table reference */
|
lua_rawgeti( LuaState, LUA_REGISTRYINDEX, TableRef); /* Push table reference */
|
||||||
}
|
}
|
||||||
|
|
||||||
int s = lua_pcall(LuaState, (TableRef == LUA_REFNIL ? 1 : 2), 1, 0);
|
int s = lua_pcall(LuaState, (TableRef == LUA_REFNIL ? 1 : 2), 1, 0);
|
||||||
if (cLuaState::ReportErrors(LuaState, s))
|
if (cLuaState::ReportErrors(LuaState, s))
|
||||||
{
|
{
|
||||||
return true; // Abort enumeration
|
return true; // Abort enumeration
|
||||||
}
|
}
|
||||||
if (lua_isboolean(LuaState, -1))
|
if (lua_isboolean(LuaState, -1))
|
||||||
{
|
{
|
||||||
return (tolua_toboolean(LuaState, -1, 0) > 0);
|
return (tolua_toboolean(LuaState, -1, 0) > 0);
|
||||||
}
|
}
|
||||||
return false; /* Continue enumeration */
|
return false; /* Continue enumeration */
|
||||||
}
|
}
|
||||||
lua_State * LuaState;
|
lua_State * LuaState;
|
||||||
int FuncRef;
|
int FuncRef;
|
||||||
int TableRef;
|
int TableRef;
|
||||||
} Callback(tolua_S, FuncRef, TableRef);
|
} Callback(tolua_S, FuncRef, TableRef);
|
||||||
|
|
||||||
|
|
||||||
bool bRetVal = (self->*Func1)(ItemName, Callback);
|
bool bRetVal = (self->*Func1)(ItemName, Callback);
|
||||||
|
|
||||||
/* Unreference the values again, so the LUA_REGISTRYINDEX can make place for other references */
|
/* Unreference the values again, so the LUA_REGISTRYINDEX can make place for other references */
|
||||||
luaL_unref(tolua_S, LUA_REGISTRYINDEX, TableRef);
|
luaL_unref(tolua_S, LUA_REGISTRYINDEX, TableRef);
|
||||||
luaL_unref(tolua_S, LUA_REGISTRYINDEX, FuncRef);
|
luaL_unref(tolua_S, LUA_REGISTRYINDEX, FuncRef);
|
||||||
|
|
||||||
/* Push return value on stack */
|
/* Push return value on stack */
|
||||||
tolua_pushboolean(tolua_S, bRetVal );
|
tolua_pushboolean(tolua_S, bRetVal );
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
template<
|
||||||
|
class Ty1,
|
||||||
|
class Ty2,
|
||||||
|
bool (Ty1::*Func1)(int, cItemCallback<Ty2> &)
|
||||||
|
>
|
||||||
|
static int tolua_DoWithID(lua_State* tolua_S)
|
||||||
|
{
|
||||||
|
int NumArgs = lua_gettop(tolua_S) - 1; /* This includes 'self' */
|
||||||
|
if ((NumArgs != 2) && (NumArgs != 3))
|
||||||
|
{
|
||||||
|
return lua_do_error(tolua_S, "Error in function call '#funcname#': Requires 2 or 3 arguments, got %i", NumArgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
Ty1 * self = (Ty1 *)tolua_tousertype(tolua_S, 1, 0);
|
||||||
|
|
||||||
|
int ItemID = (int)tolua_tonumber(tolua_S, 2, 0);
|
||||||
|
if (!lua_isfunction(tolua_S, 3))
|
||||||
|
{
|
||||||
|
return lua_do_error(tolua_S, "Error in function call '#funcname#': Expected a function for parameter #2", NumArgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* luaL_ref gets reference to value on top of the stack, the table is the last argument and therefore on the top */
|
||||||
|
int TableRef = LUA_REFNIL;
|
||||||
|
if (NumArgs == 3)
|
||||||
|
{
|
||||||
|
TableRef = luaL_ref(tolua_S, LUA_REGISTRYINDEX);
|
||||||
|
if (TableRef == LUA_REFNIL)
|
||||||
|
{
|
||||||
|
return lua_do_error(tolua_S, "Error in function call '#funcname#': Could not get value reference of parameter #3", NumArgs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* table value is popped, and now function is on top of the stack */
|
||||||
|
int FuncRef = luaL_ref(tolua_S, LUA_REGISTRYINDEX);
|
||||||
|
if (FuncRef == LUA_REFNIL)
|
||||||
|
{
|
||||||
|
return lua_do_error(tolua_S, "Error in function call '#funcname#': Could not get function reference of parameter #2", NumArgs);
|
||||||
|
}
|
||||||
|
|
||||||
|
class cLuaCallback : public cItemCallback<Ty2>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
cLuaCallback(lua_State * a_LuaState, int a_FuncRef, int a_TableRef) :
|
||||||
|
LuaState(a_LuaState),
|
||||||
|
FuncRef(a_FuncRef),
|
||||||
|
TableRef(a_TableRef)
|
||||||
|
{}
|
||||||
|
|
||||||
|
private:
|
||||||
|
virtual bool Item(Ty2 * a_Item) override
|
||||||
|
{
|
||||||
|
lua_rawgeti(LuaState, LUA_REGISTRYINDEX, FuncRef); // Push function to call
|
||||||
|
tolua_pushusertype(LuaState, a_Item, Ty2::GetClassStatic()); // Push the item
|
||||||
|
if (TableRef != LUA_REFNIL)
|
||||||
|
{
|
||||||
|
lua_rawgeti(LuaState, LUA_REGISTRYINDEX, TableRef); // Push the optional callbackdata param
|
||||||
|
}
|
||||||
|
|
||||||
|
int s = lua_pcall(LuaState, (TableRef == LUA_REFNIL ? 1 : 2), 1, 0);
|
||||||
|
if (cLuaState::ReportErrors(LuaState, s))
|
||||||
|
{
|
||||||
|
return true; // Abort enumeration
|
||||||
|
}
|
||||||
|
if (lua_isboolean(LuaState, -1))
|
||||||
|
{
|
||||||
|
return (tolua_toboolean(LuaState, -1, 0) > 0);
|
||||||
|
}
|
||||||
|
return false; /* Continue enumeration */
|
||||||
|
}
|
||||||
|
lua_State * LuaState;
|
||||||
|
int FuncRef;
|
||||||
|
int TableRef;
|
||||||
|
} Callback(tolua_S, FuncRef, TableRef);
|
||||||
|
|
||||||
|
|
||||||
|
bool bRetVal = (self->*Func1)(ItemID, Callback);
|
||||||
|
|
||||||
|
/* Unreference the values again, so the LUA_REGISTRYINDEX can make place for other references */
|
||||||
|
luaL_unref(tolua_S, LUA_REGISTRYINDEX, TableRef);
|
||||||
|
luaL_unref(tolua_S, LUA_REGISTRYINDEX, FuncRef);
|
||||||
|
|
||||||
|
/* Push return value on stack */
|
||||||
|
tolua_pushboolean(tolua_S, bRetVal );
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -270,89 +360,89 @@ template< class Ty1,
|
|||||||
bool (Ty1::*Func1)(int, int, int, cItemCallback<Ty2> &) >
|
bool (Ty1::*Func1)(int, int, int, cItemCallback<Ty2> &) >
|
||||||
static int tolua_DoWithXYZ(lua_State* tolua_S)
|
static int tolua_DoWithXYZ(lua_State* tolua_S)
|
||||||
{
|
{
|
||||||
int NumArgs = lua_gettop(tolua_S) - 1; /* This includes 'self' */
|
int NumArgs = lua_gettop(tolua_S) - 1; /* This includes 'self' */
|
||||||
if ((NumArgs != 4) && (NumArgs != 5))
|
if ((NumArgs != 4) && (NumArgs != 5))
|
||||||
{
|
{
|
||||||
return lua_do_error(tolua_S, "Error in function call '#funcname#': Requires 4 or 5 arguments, got %i", NumArgs);
|
return lua_do_error(tolua_S, "Error in function call '#funcname#': Requires 4 or 5 arguments, got %i", NumArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
Ty1 * self = (Ty1 *) tolua_tousertype(tolua_S, 1, 0);
|
Ty1 * self = (Ty1 *) tolua_tousertype(tolua_S, 1, 0);
|
||||||
if (!lua_isnumber(tolua_S, 2) || !lua_isnumber(tolua_S, 3) || !lua_isnumber(tolua_S, 4))
|
if (!lua_isnumber(tolua_S, 2) || !lua_isnumber(tolua_S, 3) || !lua_isnumber(tolua_S, 4))
|
||||||
{
|
{
|
||||||
return lua_do_error(tolua_S, "Error in function call '#funcname#': Expected a number for parameters #1, #2 and #3");
|
return lua_do_error(tolua_S, "Error in function call '#funcname#': Expected a number for parameters #1, #2 and #3");
|
||||||
}
|
}
|
||||||
|
|
||||||
int ItemX = ((int)tolua_tonumber(tolua_S, 2, 0));
|
int ItemX = ((int)tolua_tonumber(tolua_S, 2, 0));
|
||||||
int ItemY = ((int)tolua_tonumber(tolua_S, 3, 0));
|
int ItemY = ((int)tolua_tonumber(tolua_S, 3, 0));
|
||||||
int ItemZ = ((int)tolua_tonumber(tolua_S, 4, 0));
|
int ItemZ = ((int)tolua_tonumber(tolua_S, 4, 0));
|
||||||
LOG("x %i y %i z %i", ItemX, ItemY, ItemZ );
|
LOG("x %i y %i z %i", ItemX, ItemY, ItemZ );
|
||||||
if (!lua_isfunction( tolua_S, 5))
|
if (!lua_isfunction( tolua_S, 5))
|
||||||
{
|
{
|
||||||
return lua_do_error(tolua_S, "Error in function call '#funcname#': Expected a function for parameter #4");
|
return lua_do_error(tolua_S, "Error in function call '#funcname#': Expected a function for parameter #4");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* luaL_ref gets reference to value on top of the stack, the table is the last argument and therefore on the top */
|
/* luaL_ref gets reference to value on top of the stack, the table is the last argument and therefore on the top */
|
||||||
int TableRef = LUA_REFNIL;
|
int TableRef = LUA_REFNIL;
|
||||||
if (NumArgs == 5)
|
if (NumArgs == 5)
|
||||||
{
|
{
|
||||||
TableRef = luaL_ref(tolua_S, LUA_REGISTRYINDEX);
|
TableRef = luaL_ref(tolua_S, LUA_REGISTRYINDEX);
|
||||||
if (TableRef == LUA_REFNIL)
|
if (TableRef == LUA_REFNIL)
|
||||||
{
|
{
|
||||||
return lua_do_error(tolua_S, "Error in function call '#funcname#': Could not get value reference of parameter #5");
|
return lua_do_error(tolua_S, "Error in function call '#funcname#': Could not get value reference of parameter #5");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* table value is popped, and now function is on top of the stack */
|
/* table value is popped, and now function is on top of the stack */
|
||||||
int FuncRef = luaL_ref(tolua_S, LUA_REGISTRYINDEX);
|
int FuncRef = luaL_ref(tolua_S, LUA_REGISTRYINDEX);
|
||||||
if (FuncRef == LUA_REFNIL)
|
if (FuncRef == LUA_REFNIL)
|
||||||
{
|
{
|
||||||
return lua_do_error(tolua_S, "Error in function call '#funcname#': Could not get function reference of parameter #4");
|
return lua_do_error(tolua_S, "Error in function call '#funcname#': Could not get function reference of parameter #4");
|
||||||
}
|
}
|
||||||
|
|
||||||
class cLuaCallback : public cItemCallback<Ty2>
|
class cLuaCallback : public cItemCallback<Ty2>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
cLuaCallback(lua_State* a_LuaState, int a_FuncRef, int a_TableRef)
|
cLuaCallback(lua_State* a_LuaState, int a_FuncRef, int a_TableRef)
|
||||||
: LuaState( a_LuaState )
|
: LuaState( a_LuaState )
|
||||||
, FuncRef( a_FuncRef )
|
, FuncRef( a_FuncRef )
|
||||||
, TableRef( a_TableRef )
|
, TableRef( a_TableRef )
|
||||||
{}
|
{}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
virtual bool Item(Ty2 * a_Item) override
|
virtual bool Item(Ty2 * a_Item) override
|
||||||
{
|
{
|
||||||
lua_rawgeti( LuaState, LUA_REGISTRYINDEX, FuncRef); /* Push function reference */
|
lua_rawgeti( LuaState, LUA_REGISTRYINDEX, FuncRef); /* Push function reference */
|
||||||
tolua_pushusertype(LuaState, a_Item, Ty2::GetClassStatic());
|
tolua_pushusertype(LuaState, a_Item, Ty2::GetClassStatic());
|
||||||
if (TableRef != LUA_REFNIL)
|
if (TableRef != LUA_REFNIL)
|
||||||
{
|
{
|
||||||
lua_rawgeti( LuaState, LUA_REGISTRYINDEX, TableRef); /* Push table reference */
|
lua_rawgeti( LuaState, LUA_REGISTRYINDEX, TableRef); /* Push table reference */
|
||||||
}
|
}
|
||||||
|
|
||||||
int s = lua_pcall(LuaState, (TableRef == LUA_REFNIL ? 1 : 2), 1, 0);
|
int s = lua_pcall(LuaState, (TableRef == LUA_REFNIL ? 1 : 2), 1, 0);
|
||||||
if (cLuaState::ReportErrors(LuaState, s))
|
if (cLuaState::ReportErrors(LuaState, s))
|
||||||
{
|
{
|
||||||
return true; // Abort enumeration
|
return true; // Abort enumeration
|
||||||
}
|
}
|
||||||
if (lua_isboolean(LuaState, -1))
|
if (lua_isboolean(LuaState, -1))
|
||||||
{
|
{
|
||||||
return (tolua_toboolean(LuaState, -1, 0) > 0);
|
return (tolua_toboolean(LuaState, -1, 0) > 0);
|
||||||
}
|
}
|
||||||
return false; /* Continue enumeration */
|
return false; /* Continue enumeration */
|
||||||
}
|
}
|
||||||
lua_State * LuaState;
|
lua_State * LuaState;
|
||||||
int FuncRef;
|
int FuncRef;
|
||||||
int TableRef;
|
int TableRef;
|
||||||
} Callback(tolua_S, FuncRef, TableRef);
|
} Callback(tolua_S, FuncRef, TableRef);
|
||||||
|
|
||||||
bool bRetVal = (self->*Func1)(ItemX, ItemY, ItemZ, Callback);
|
bool bRetVal = (self->*Func1)(ItemX, ItemY, ItemZ, Callback);
|
||||||
|
|
||||||
/* Unreference the values again, so the LUA_REGISTRYINDEX can make place for other references */
|
/* Unreference the values again, so the LUA_REGISTRYINDEX can make place for other references */
|
||||||
luaL_unref(tolua_S, LUA_REGISTRYINDEX, TableRef);
|
luaL_unref(tolua_S, LUA_REGISTRYINDEX, TableRef);
|
||||||
luaL_unref(tolua_S, LUA_REGISTRYINDEX, FuncRef);
|
luaL_unref(tolua_S, LUA_REGISTRYINDEX, FuncRef);
|
||||||
|
|
||||||
/* Push return value on stack */
|
/* Push return value on stack */
|
||||||
tolua_pushboolean(tolua_S, bRetVal );
|
tolua_pushboolean(tolua_S, bRetVal );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -364,89 +454,89 @@ template< class Ty1,
|
|||||||
bool (Ty1::*Func1)(int, int, cItemCallback<Ty2> &) >
|
bool (Ty1::*Func1)(int, int, cItemCallback<Ty2> &) >
|
||||||
static int tolua_ForEachInChunk(lua_State* tolua_S)
|
static int tolua_ForEachInChunk(lua_State* tolua_S)
|
||||||
{
|
{
|
||||||
int NumArgs = lua_gettop(tolua_S) - 1; /* This includes 'self' */
|
int NumArgs = lua_gettop(tolua_S) - 1; /* This includes 'self' */
|
||||||
if ((NumArgs != 3) && (NumArgs != 4))
|
if ((NumArgs != 3) && (NumArgs != 4))
|
||||||
{
|
{
|
||||||
return lua_do_error(tolua_S, "Error in function call '#funcname#': Requires 3 or 4 arguments, got %i", NumArgs);
|
return lua_do_error(tolua_S, "Error in function call '#funcname#': Requires 3 or 4 arguments, got %i", NumArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
Ty1 * self = (Ty1 *) tolua_tousertype(tolua_S, 1, 0);
|
Ty1 * self = (Ty1 *) tolua_tousertype(tolua_S, 1, 0);
|
||||||
if (!lua_isnumber(tolua_S, 2) || !lua_isnumber(tolua_S, 3))
|
if (!lua_isnumber(tolua_S, 2) || !lua_isnumber(tolua_S, 3))
|
||||||
{
|
{
|
||||||
return lua_do_error(tolua_S, "Error in function call '#funcname#': Expected a number for parameters #1 and #2");
|
return lua_do_error(tolua_S, "Error in function call '#funcname#': Expected a number for parameters #1 and #2");
|
||||||
}
|
}
|
||||||
|
|
||||||
int ChunkX = ((int)tolua_tonumber(tolua_S, 2, 0));
|
int ChunkX = ((int)tolua_tonumber(tolua_S, 2, 0));
|
||||||
int ChunkZ = ((int)tolua_tonumber(tolua_S, 3, 0));
|
int ChunkZ = ((int)tolua_tonumber(tolua_S, 3, 0));
|
||||||
|
|
||||||
if (!lua_isfunction( tolua_S, 4))
|
if (!lua_isfunction( tolua_S, 4))
|
||||||
{
|
{
|
||||||
return lua_do_error(tolua_S, "Error in function call '#funcname#': Expected a function for parameter #3");
|
return lua_do_error(tolua_S, "Error in function call '#funcname#': Expected a function for parameter #3");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* luaL_ref gets reference to value on top of the stack, the table is the last argument and therefore on the top */
|
/* luaL_ref gets reference to value on top of the stack, the table is the last argument and therefore on the top */
|
||||||
int TableRef = LUA_REFNIL;
|
int TableRef = LUA_REFNIL;
|
||||||
if (NumArgs == 4)
|
if (NumArgs == 4)
|
||||||
{
|
{
|
||||||
TableRef = luaL_ref(tolua_S, LUA_REGISTRYINDEX);
|
TableRef = luaL_ref(tolua_S, LUA_REGISTRYINDEX);
|
||||||
if (TableRef == LUA_REFNIL)
|
if (TableRef == LUA_REFNIL)
|
||||||
{
|
{
|
||||||
return lua_do_error(tolua_S, "Error in function call '#funcname#': Could not get value reference of parameter #4");
|
return lua_do_error(tolua_S, "Error in function call '#funcname#': Could not get value reference of parameter #4");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* table value is popped, and now function is on top of the stack */
|
/* table value is popped, and now function is on top of the stack */
|
||||||
int FuncRef = luaL_ref(tolua_S, LUA_REGISTRYINDEX);
|
int FuncRef = luaL_ref(tolua_S, LUA_REGISTRYINDEX);
|
||||||
if (FuncRef == LUA_REFNIL)
|
if (FuncRef == LUA_REFNIL)
|
||||||
{
|
{
|
||||||
return lua_do_error(tolua_S, "Error in function call '#funcname#': Could not get function reference of parameter #3");
|
return lua_do_error(tolua_S, "Error in function call '#funcname#': Could not get function reference of parameter #3");
|
||||||
}
|
}
|
||||||
|
|
||||||
class cLuaCallback : public cItemCallback<Ty2>
|
class cLuaCallback : public cItemCallback<Ty2>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
cLuaCallback(lua_State* a_LuaState, int a_FuncRef, int a_TableRef)
|
cLuaCallback(lua_State* a_LuaState, int a_FuncRef, int a_TableRef)
|
||||||
: LuaState( a_LuaState )
|
: LuaState( a_LuaState )
|
||||||
, FuncRef( a_FuncRef )
|
, FuncRef( a_FuncRef )
|
||||||
, TableRef( a_TableRef )
|
, TableRef( a_TableRef )
|
||||||
{}
|
{}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
virtual bool Item(Ty2 * a_Item) override
|
virtual bool Item(Ty2 * a_Item) override
|
||||||
{
|
{
|
||||||
lua_rawgeti( LuaState, LUA_REGISTRYINDEX, FuncRef); /* Push function reference */
|
lua_rawgeti( LuaState, LUA_REGISTRYINDEX, FuncRef); /* Push function reference */
|
||||||
tolua_pushusertype(LuaState, a_Item, Ty2::GetClassStatic());
|
tolua_pushusertype(LuaState, a_Item, Ty2::GetClassStatic());
|
||||||
if (TableRef != LUA_REFNIL)
|
if (TableRef != LUA_REFNIL)
|
||||||
{
|
{
|
||||||
lua_rawgeti( LuaState, LUA_REGISTRYINDEX, TableRef); /* Push table reference */
|
lua_rawgeti( LuaState, LUA_REGISTRYINDEX, TableRef); /* Push table reference */
|
||||||
}
|
}
|
||||||
|
|
||||||
int s = lua_pcall(LuaState, (TableRef == LUA_REFNIL ? 1 : 2), 1, 0);
|
int s = lua_pcall(LuaState, (TableRef == LUA_REFNIL ? 1 : 2), 1, 0);
|
||||||
if (cLuaState::ReportErrors(LuaState, s))
|
if (cLuaState::ReportErrors(LuaState, s))
|
||||||
{
|
{
|
||||||
return true; /* Abort enumeration */
|
return true; /* Abort enumeration */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lua_isboolean(LuaState, -1))
|
if (lua_isboolean(LuaState, -1))
|
||||||
{
|
{
|
||||||
return (tolua_toboolean(LuaState, -1, 0) > 0);
|
return (tolua_toboolean(LuaState, -1, 0) > 0);
|
||||||
}
|
}
|
||||||
return false; /* Continue enumeration */
|
return false; /* Continue enumeration */
|
||||||
}
|
}
|
||||||
lua_State * LuaState;
|
lua_State * LuaState;
|
||||||
int FuncRef;
|
int FuncRef;
|
||||||
int TableRef;
|
int TableRef;
|
||||||
} Callback(tolua_S, FuncRef, TableRef);
|
} Callback(tolua_S, FuncRef, TableRef);
|
||||||
|
|
||||||
bool bRetVal = (self->*Func1)(ChunkX, ChunkZ, Callback);
|
bool bRetVal = (self->*Func1)(ChunkX, ChunkZ, Callback);
|
||||||
|
|
||||||
/* Unreference the values again, so the LUA_REGISTRYINDEX can make place for other references */
|
/* Unreference the values again, so the LUA_REGISTRYINDEX can make place for other references */
|
||||||
luaL_unref(tolua_S, LUA_REGISTRYINDEX, TableRef);
|
luaL_unref(tolua_S, LUA_REGISTRYINDEX, TableRef);
|
||||||
luaL_unref(tolua_S, LUA_REGISTRYINDEX, FuncRef);
|
luaL_unref(tolua_S, LUA_REGISTRYINDEX, FuncRef);
|
||||||
|
|
||||||
/* Push return value on stack */
|
/* Push return value on stack */
|
||||||
tolua_pushboolean(tolua_S, bRetVal );
|
tolua_pushboolean(tolua_S, bRetVal );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -454,7 +544,7 @@ static int tolua_ForEachInChunk(lua_State* tolua_S)
|
|||||||
|
|
||||||
|
|
||||||
template< class Ty1,
|
template< class Ty1,
|
||||||
class Ty2,
|
class Ty2,
|
||||||
bool (Ty1::*Func1)(cItemCallback<Ty2> &) >
|
bool (Ty1::*Func1)(cItemCallback<Ty2> &) >
|
||||||
static int tolua_ForEach(lua_State * tolua_S)
|
static int tolua_ForEach(lua_State * tolua_S)
|
||||||
{
|
{
|
||||||
@ -597,6 +687,52 @@ tolua_lerror:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static int tolua_cWorld_TryGetHeight(lua_State * tolua_S)
|
||||||
|
{
|
||||||
|
// Exported manually, because tolua would require the out-only param a_Height to be used when calling
|
||||||
|
// Takes (a_World,) a_BlockX, a_BlockZ
|
||||||
|
// Returns Height, IsValid
|
||||||
|
#ifndef TOLUA_RELEASE
|
||||||
|
tolua_Error tolua_err;
|
||||||
|
if (
|
||||||
|
!tolua_isusertype (tolua_S, 1, "cWorld", 0, &tolua_err) ||
|
||||||
|
!tolua_isnumber (tolua_S, 2, 0, &tolua_err) ||
|
||||||
|
!tolua_isnumber (tolua_S, 3, 0, &tolua_err) ||
|
||||||
|
!tolua_isnoobj (tolua_S, 4, &tolua_err)
|
||||||
|
)
|
||||||
|
goto tolua_lerror;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
cWorld * self = (cWorld *) tolua_tousertype (tolua_S, 1, 0);
|
||||||
|
int BlockX = (int) tolua_tonumber (tolua_S, 2, 0);
|
||||||
|
int BlockZ = (int) tolua_tonumber (tolua_S, 3, 0);
|
||||||
|
#ifndef TOLUA_RELEASE
|
||||||
|
if (self == NULL)
|
||||||
|
{
|
||||||
|
tolua_error(tolua_S, "Invalid 'self' in function 'TryGetHeight'", NULL);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
int Height = 0;
|
||||||
|
bool res = self->TryGetHeight(BlockX, BlockZ, Height);
|
||||||
|
tolua_pushnumber(tolua_S, Height);
|
||||||
|
tolua_pushboolean(tolua_S, res ? 1 : 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
#ifndef TOLUA_RELEASE
|
||||||
|
tolua_lerror:
|
||||||
|
tolua_error(tolua_S, "#ferror in function 'TryGetHeight'.", &tolua_err);
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int tolua_cPluginManager_GetAllPlugins(lua_State * tolua_S)
|
static int tolua_cPluginManager_GetAllPlugins(lua_State * tolua_S)
|
||||||
{
|
{
|
||||||
cPluginManager* self = (cPluginManager*) tolua_tousertype(tolua_S,1,0);
|
cPluginManager* self = (cPluginManager*) tolua_tousertype(tolua_S,1,0);
|
||||||
@ -1373,25 +1509,27 @@ void ManualBindings::Bind(lua_State * tolua_S)
|
|||||||
tolua_function(tolua_S, "LOGERROR", tolua_LOGERROR);
|
tolua_function(tolua_S, "LOGERROR", tolua_LOGERROR);
|
||||||
|
|
||||||
tolua_beginmodule(tolua_S, "cRoot");
|
tolua_beginmodule(tolua_S, "cRoot");
|
||||||
tolua_function(tolua_S, "ForEachWorld", tolua_ForEach<cRoot, cWorld, &cRoot::ForEachWorld>);
|
|
||||||
tolua_function(tolua_S, "FindAndDoWithPlayer", tolua_DoWith <cRoot, cPlayer, &cRoot::FindAndDoWithPlayer>);
|
tolua_function(tolua_S, "FindAndDoWithPlayer", tolua_DoWith <cRoot, cPlayer, &cRoot::FindAndDoWithPlayer>);
|
||||||
tolua_function(tolua_S, "ForEachPlayer", tolua_ForEach<cRoot, cPlayer, &cRoot::ForEachPlayer>);
|
tolua_function(tolua_S, "ForEachPlayer", tolua_ForEach<cRoot, cPlayer, &cRoot::ForEachPlayer>);
|
||||||
|
tolua_function(tolua_S, "ForEachWorld", tolua_ForEach<cRoot, cWorld, &cRoot::ForEachWorld>);
|
||||||
tolua_endmodule(tolua_S);
|
tolua_endmodule(tolua_S);
|
||||||
|
|
||||||
tolua_beginmodule(tolua_S, "cWorld");
|
tolua_beginmodule(tolua_S, "cWorld");
|
||||||
tolua_function(tolua_S, "ForEachPlayer", tolua_ForEach<cWorld, cPlayer, &cWorld::ForEachPlayer>);
|
|
||||||
tolua_function(tolua_S, "ForEachEntity", tolua_ForEach<cWorld, cEntity, &cWorld::ForEachEntity>);
|
|
||||||
tolua_function(tolua_S, "ForEachEntityInChunk", tolua_ForEachInChunk<cWorld, cEntity, &cWorld::ForEachEntityInChunk>);
|
|
||||||
tolua_function(tolua_S, "ForEachChestInChunk", tolua_ForEachInChunk<cWorld, cChestEntity, &cWorld::ForEachChestInChunk>);
|
|
||||||
tolua_function(tolua_S, "ForEachFurnaceInChunk", tolua_ForEachInChunk<cWorld, cFurnaceEntity, &cWorld::ForEachFurnaceInChunk>);
|
|
||||||
tolua_function(tolua_S, "DoWithPlayer", tolua_DoWith<cWorld, cPlayer, &cWorld::DoWithPlayer>);
|
|
||||||
tolua_function(tolua_S, "FindAndDoWithPlayer", tolua_DoWith<cWorld, cPlayer, &cWorld::FindAndDoWithPlayer>);
|
|
||||||
tolua_function(tolua_S, "DoWithChestAt", tolua_DoWithXYZ<cWorld, cChestEntity, &cWorld::DoWithChestAt>);
|
tolua_function(tolua_S, "DoWithChestAt", tolua_DoWithXYZ<cWorld, cChestEntity, &cWorld::DoWithChestAt>);
|
||||||
tolua_function(tolua_S, "DoWithDispenserAt", tolua_DoWithXYZ<cWorld, cDispenserEntity, &cWorld::DoWithDispenserAt>);
|
tolua_function(tolua_S, "DoWithDispenserAt", tolua_DoWithXYZ<cWorld, cDispenserEntity, &cWorld::DoWithDispenserAt>);
|
||||||
tolua_function(tolua_S, "DoWithDropperAt", tolua_DoWithXYZ<cWorld, cDropperEntity, &cWorld::DoWithDropperAt>);
|
|
||||||
tolua_function(tolua_S, "DoWithDropSpenserAt", tolua_DoWithXYZ<cWorld, cDropSpenserEntity, &cWorld::DoWithDropSpenserAt>);
|
tolua_function(tolua_S, "DoWithDropSpenserAt", tolua_DoWithXYZ<cWorld, cDropSpenserEntity, &cWorld::DoWithDropSpenserAt>);
|
||||||
|
tolua_function(tolua_S, "DoWithDropperAt", tolua_DoWithXYZ<cWorld, cDropperEntity, &cWorld::DoWithDropperAt>);
|
||||||
|
tolua_function(tolua_S, "DoWithEntityByID", tolua_DoWithID< cWorld, cEntity, &cWorld::DoWithEntityByID>);
|
||||||
tolua_function(tolua_S, "DoWithFurnaceAt", tolua_DoWithXYZ<cWorld, cFurnaceEntity, &cWorld::DoWithFurnaceAt>);
|
tolua_function(tolua_S, "DoWithFurnaceAt", tolua_DoWithXYZ<cWorld, cFurnaceEntity, &cWorld::DoWithFurnaceAt>);
|
||||||
|
tolua_function(tolua_S, "DoWithPlayer", tolua_DoWith< cWorld, cPlayer, &cWorld::DoWithPlayer>);
|
||||||
|
tolua_function(tolua_S, "FindAndDoWithPlayer", tolua_DoWith< cWorld, cPlayer, &cWorld::FindAndDoWithPlayer>);
|
||||||
|
tolua_function(tolua_S, "ForEachChestInChunk", tolua_ForEachInChunk<cWorld, cChestEntity, &cWorld::ForEachChestInChunk>);
|
||||||
|
tolua_function(tolua_S, "ForEachEntity", tolua_ForEach< cWorld, cEntity, &cWorld::ForEachEntity>);
|
||||||
|
tolua_function(tolua_S, "ForEachEntityInChunk", tolua_ForEachInChunk<cWorld, cEntity, &cWorld::ForEachEntityInChunk>);
|
||||||
|
tolua_function(tolua_S, "ForEachFurnaceInChunk", tolua_ForEachInChunk<cWorld, cFurnaceEntity, &cWorld::ForEachFurnaceInChunk>);
|
||||||
|
tolua_function(tolua_S, "ForEachPlayer", tolua_ForEach< cWorld, cPlayer, &cWorld::ForEachPlayer>);
|
||||||
tolua_function(tolua_S, "SetSignLines", tolua_cWorld_SetSignLines);
|
tolua_function(tolua_S, "SetSignLines", tolua_cWorld_SetSignLines);
|
||||||
|
tolua_function(tolua_S, "TryGetHeight", tolua_cWorld_TryGetHeight);
|
||||||
tolua_function(tolua_S, "UpdateSign", tolua_cWorld_SetSignLines);
|
tolua_function(tolua_S, "UpdateSign", tolua_cWorld_SetSignLines);
|
||||||
tolua_endmodule(tolua_S);
|
tolua_endmodule(tolua_S);
|
||||||
|
|
||||||
@ -1400,11 +1538,11 @@ void ManualBindings::Bind(lua_State * tolua_S)
|
|||||||
tolua_endmodule(tolua_S);
|
tolua_endmodule(tolua_S);
|
||||||
|
|
||||||
tolua_beginmodule(tolua_S, "cPluginManager");
|
tolua_beginmodule(tolua_S, "cPluginManager");
|
||||||
tolua_function(tolua_S, "GetAllPlugins", tolua_cPluginManager_GetAllPlugins);
|
|
||||||
tolua_function(tolua_S, "BindCommand", tolua_cPluginManager_BindCommand);
|
tolua_function(tolua_S, "BindCommand", tolua_cPluginManager_BindCommand);
|
||||||
tolua_function(tolua_S, "BindConsoleCommand", tolua_cPluginManager_BindConsoleCommand);
|
tolua_function(tolua_S, "BindConsoleCommand", tolua_cPluginManager_BindConsoleCommand);
|
||||||
tolua_function(tolua_S, "ForEachCommand", tolua_cPluginManager_ForEachCommand);
|
tolua_function(tolua_S, "ForEachCommand", tolua_cPluginManager_ForEachCommand);
|
||||||
tolua_function(tolua_S, "ForEachConsoleCommand", tolua_cPluginManager_ForEachConsoleCommand);
|
tolua_function(tolua_S, "ForEachConsoleCommand", tolua_cPluginManager_ForEachConsoleCommand);
|
||||||
|
tolua_function(tolua_S, "GetAllPlugins", tolua_cPluginManager_GetAllPlugins);
|
||||||
tolua_endmodule(tolua_S);
|
tolua_endmodule(tolua_S);
|
||||||
|
|
||||||
tolua_beginmodule(tolua_S, "cPlayer");
|
tolua_beginmodule(tolua_S, "cPlayer");
|
||||||
@ -1419,17 +1557,17 @@ void ManualBindings::Bind(lua_State * tolua_S)
|
|||||||
tolua_endmodule(tolua_S);
|
tolua_endmodule(tolua_S);
|
||||||
|
|
||||||
tolua_beginmodule(tolua_S, "cPlugin_NewLua");
|
tolua_beginmodule(tolua_S, "cPlugin_NewLua");
|
||||||
tolua_function(tolua_S, "AddWebTab", tolua_cPlugin_NewLua_AddWebTab);
|
|
||||||
tolua_function(tolua_S, "AddTab", tolua_cPlugin_NewLua_AddTab);
|
tolua_function(tolua_S, "AddTab", tolua_cPlugin_NewLua_AddTab);
|
||||||
|
tolua_function(tolua_S, "AddWebTab", tolua_cPlugin_NewLua_AddWebTab);
|
||||||
tolua_endmodule(tolua_S);
|
tolua_endmodule(tolua_S);
|
||||||
|
|
||||||
tolua_cclass(tolua_S,"HTTPRequest","HTTPRequest","",NULL);
|
tolua_cclass(tolua_S,"HTTPRequest","HTTPRequest","",NULL);
|
||||||
tolua_beginmodule(tolua_S,"HTTPRequest");
|
tolua_beginmodule(tolua_S,"HTTPRequest");
|
||||||
// tolua_variable(tolua_S,"Method",tolua_get_HTTPRequest_Method,tolua_set_HTTPRequest_Method);
|
// tolua_variable(tolua_S,"Method",tolua_get_HTTPRequest_Method,tolua_set_HTTPRequest_Method);
|
||||||
// tolua_variable(tolua_S,"Path",tolua_get_HTTPRequest_Path,tolua_set_HTTPRequest_Path);
|
// tolua_variable(tolua_S,"Path",tolua_get_HTTPRequest_Path,tolua_set_HTTPRequest_Path);
|
||||||
|
tolua_variable(tolua_S,"FormData",tolua_get_HTTPRequest_FormData,0);
|
||||||
tolua_variable(tolua_S,"Params",tolua_get_HTTPRequest_Params,0);
|
tolua_variable(tolua_S,"Params",tolua_get_HTTPRequest_Params,0);
|
||||||
tolua_variable(tolua_S,"PostParams",tolua_get_HTTPRequest_PostParams,0);
|
tolua_variable(tolua_S,"PostParams",tolua_get_HTTPRequest_PostParams,0);
|
||||||
tolua_variable(tolua_S,"FormData",tolua_get_HTTPRequest_FormData,0);
|
|
||||||
tolua_endmodule(tolua_S);
|
tolua_endmodule(tolua_S);
|
||||||
|
|
||||||
tolua_beginmodule(tolua_S, "cWebAdmin");
|
tolua_beginmodule(tolua_S, "cWebAdmin");
|
||||||
@ -1441,8 +1579,8 @@ void ManualBindings::Bind(lua_State * tolua_S)
|
|||||||
tolua_endmodule(tolua_S);
|
tolua_endmodule(tolua_S);
|
||||||
|
|
||||||
tolua_beginmodule(tolua_S, "cClientHandle");
|
tolua_beginmodule(tolua_S, "cClientHandle");
|
||||||
tolua_constant(tolua_S, "MIN_VIEW_DISTANCE", cClientHandle::MIN_VIEW_DISTANCE);
|
|
||||||
tolua_constant(tolua_S, "MAX_VIEW_DISTANCE", cClientHandle::MAX_VIEW_DISTANCE);
|
tolua_constant(tolua_S, "MAX_VIEW_DISTANCE", cClientHandle::MAX_VIEW_DISTANCE);
|
||||||
|
tolua_constant(tolua_S, "MIN_VIEW_DISTANCE", cClientHandle::MIN_VIEW_DISTANCE);
|
||||||
tolua_endmodule(tolua_S);
|
tolua_endmodule(tolua_S);
|
||||||
|
|
||||||
tolua_beginmodule(tolua_S, "cItemGrid");
|
tolua_beginmodule(tolua_S, "cItemGrid");
|
||||||
|
@ -112,10 +112,7 @@ void cRoot::Start(void)
|
|||||||
cIniFile IniFile("settings.ini");
|
cIniFile IniFile("settings.ini");
|
||||||
if (!IniFile.ReadFile())
|
if (!IniFile.ReadFile())
|
||||||
{
|
{
|
||||||
LOGINFO("settings.ini inaccessible, using settings.example.ini for defaults!");
|
LOGWARNING("settings.ini inaccessible, all settings are reset to default values");
|
||||||
IniFile.Path("settings.example.ini");
|
|
||||||
IniFile.ReadFile();
|
|
||||||
IniFile.Path("settings.ini");
|
|
||||||
}
|
}
|
||||||
m_PrimaryServerVersion = IniFile.GetValueI("Server", "PrimaryServerVersion", 0);
|
m_PrimaryServerVersion = IniFile.GetValueI("Server", "PrimaryServerVersion", 0);
|
||||||
if (m_PrimaryServerVersion == 0)
|
if (m_PrimaryServerVersion == 0)
|
||||||
@ -139,23 +136,19 @@ void cRoot::Start(void)
|
|||||||
cIniFile WebIniFile("webadmin.ini");
|
cIniFile WebIniFile("webadmin.ini");
|
||||||
if (!WebIniFile.ReadFile())
|
if (!WebIniFile.ReadFile())
|
||||||
{
|
{
|
||||||
LOGINFO("webadmin.ini inaccessible, using webadmin.example.ini for defaults!");
|
LOGWARNING("webadmin.ini inaccessible, wabadmin is disabled");
|
||||||
WebIniFile.Path("webadmin.example.ini");
|
|
||||||
WebIniFile.ReadFile();
|
|
||||||
WebIniFile.Path("webadmin.ini");
|
|
||||||
WebIniFile.WriteFile();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (WebIniFile.GetValueB("WebAdmin", "Enabled", false ))
|
if (WebIniFile.GetValueB("WebAdmin", "Enabled", false))
|
||||||
{
|
{
|
||||||
LOG("Creating WebAdmin...");
|
LOG("Creating WebAdmin...");
|
||||||
m_WebAdmin = new cWebAdmin(8080);
|
m_WebAdmin = new cWebAdmin(8080);
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG("Loading settings...");
|
LOG("Loading settings...");
|
||||||
m_GroupManager = new cGroupManager();
|
m_GroupManager = new cGroupManager();
|
||||||
m_CraftingRecipes = new cCraftingRecipes;
|
m_CraftingRecipes = new cCraftingRecipes;
|
||||||
m_FurnaceRecipe = new cFurnaceRecipe();
|
m_FurnaceRecipe = new cFurnaceRecipe();
|
||||||
|
|
||||||
LOG("Loading worlds...");
|
LOG("Loading worlds...");
|
||||||
LoadWorlds();
|
LoadWorlds();
|
||||||
|
@ -129,7 +129,7 @@ public:
|
|||||||
// tolua_end
|
// tolua_end
|
||||||
|
|
||||||
/// Retrieves the world height at the specified coords; returns false if chunk not loaded / generated
|
/// Retrieves the world height at the specified coords; returns false if chunk not loaded / generated
|
||||||
bool TryGetHeight(int a_BlockX, int a_BlockZ, int & a_Height); // TODO: Export in ManualBindings.cpp
|
bool TryGetHeight(int a_BlockX, int a_BlockZ, int & a_Height); // Exported in ManualBindings.cpp
|
||||||
|
|
||||||
// Broadcast respective packets to all clients of the chunk where the event is taking place
|
// Broadcast respective packets to all clients of the chunk where the event is taking place
|
||||||
// (Please keep these alpha-sorted)
|
// (Please keep these alpha-sorted)
|
||||||
@ -174,7 +174,7 @@ public:
|
|||||||
If a_MarkDirty is set, the chunk is set as dirty (used after generating)
|
If a_MarkDirty is set, the chunk is set as dirty (used after generating)
|
||||||
*/
|
*/
|
||||||
void SetChunkData(
|
void SetChunkData(
|
||||||
int a_ChunkX, int a_ChunkZ,
|
int a_ChunkX, int a_ChunkZ,
|
||||||
const BLOCKTYPE * a_BlockTypes,
|
const BLOCKTYPE * a_BlockTypes,
|
||||||
const NIBBLETYPE * a_BlockMeta,
|
const NIBBLETYPE * a_BlockMeta,
|
||||||
const NIBBLETYPE * a_BlockLight,
|
const NIBBLETYPE * a_BlockLight,
|
||||||
@ -245,7 +245,7 @@ public:
|
|||||||
bool ForEachEntityInChunk(int a_ChunkX, int a_ChunkZ, cEntityCallback & a_Callback); // Exported in ManualBindings.cpp
|
bool ForEachEntityInChunk(int a_ChunkX, int a_ChunkZ, cEntityCallback & a_Callback); // Exported in ManualBindings.cpp
|
||||||
|
|
||||||
/// Calls the callback if the entity with the specified ID is found, with the entity object as the callback param. Returns true if entity found and callback returned false.
|
/// Calls the callback if the entity with the specified ID is found, with the entity object as the callback param. Returns true if entity found and callback returned false.
|
||||||
bool DoWithEntityByID(int a_UniqueID, cEntityCallback & a_Callback); // TODO: Exported in ManualBindings.cpp
|
bool DoWithEntityByID(int a_UniqueID, cEntityCallback & a_Callback); // Exported in ManualBindings.cpp
|
||||||
|
|
||||||
/// Compares clients of two chunks, calls the callback accordingly
|
/// Compares clients of two chunks, calls the callback accordingly
|
||||||
void CompareChunkClients(int a_ChunkX1, int a_ChunkZ1, int a_ChunkX2, int a_ChunkZ2, cClientDiffCallback & a_Callback);
|
void CompareChunkClients(int a_ChunkX1, int a_ChunkZ1, int a_ChunkX2, int a_ChunkZ2, cClientDiffCallback & a_Callback);
|
||||||
@ -319,8 +319,8 @@ public:
|
|||||||
void SetBlockMeta(const Vector3i & a_Pos, NIBBLETYPE a_MetaData ) { SetBlockMeta( a_Pos.x, a_Pos.y, a_Pos.z, a_MetaData ); }
|
void SetBlockMeta(const Vector3i & a_Pos, NIBBLETYPE a_MetaData ) { SetBlockMeta( a_Pos.x, a_Pos.y, a_Pos.z, a_MetaData ); }
|
||||||
// tolua_end
|
// tolua_end
|
||||||
|
|
||||||
/** Writes the block area into the specified coords.
|
/** Writes the block area into the specified coords.
|
||||||
Returns true if all chunks have been processed.
|
Returns true if all chunks have been processed.
|
||||||
Prefer cBlockArea::Write() instead, this is the internal implementation; cBlockArea does error checking, too.
|
Prefer cBlockArea::Write() instead, this is the internal implementation; cBlockArea does error checking, too.
|
||||||
a_DataTypes is a bitmask of cBlockArea::baXXX constants ORed together.
|
a_DataTypes is a bitmask of cBlockArea::baXXX constants ORed together.
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user