Merge branch 'master' into BlockTracing
This commit is contained in:
commit
c0066e7260
@ -1852,6 +1852,10 @@
|
||||
RelativePath="..\source\blocks\BlockCactus.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\source\Blocks\BlockCarpet.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
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_export
|
||||
// tolua_begin
|
||||
|
||||
class cIniFile
|
||||
{
|
||||
private:
|
||||
bool caseInsensitive;
|
||||
std::string path;
|
||||
struct key {
|
||||
bool m_IsCaseInsensitive;
|
||||
std::string m_Path;
|
||||
|
||||
struct key
|
||||
{
|
||||
std::vector<std::string> names;
|
||||
std::vector<std::string> values;
|
||||
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::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:
|
||||
enum errors{ noID = -1}; // tolua_export
|
||||
cIniFile( const std::string iniPath = ""); // tolua_export
|
||||
virtual ~cIniFile() {}
|
||||
enum errors
|
||||
{
|
||||
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.
|
||||
// The default is case insensitive.
|
||||
void CaseSensitive() {caseInsensitive = false;} // tolua_export
|
||||
void CaseInsensitive() {caseInsensitive = true;} // tolua_export
|
||||
void CaseSensitive (void) { m_IsCaseInsensitive = false; }
|
||||
void CaseInsensitive(void) { m_IsCaseInsensitive = true; }
|
||||
|
||||
// Sets path of ini file to read and write from.
|
||||
void Path(const std::string & newPath) {path = newPath;} // tolua_export
|
||||
std::string Path() const {return path;} // tolua_export
|
||||
void SetPath(const std::string & newPath) {Path( newPath);} // tolua_export
|
||||
void Path(const std::string & newPath) {m_Path = newPath;}
|
||||
const std::string & Path(void) const {return m_Path;}
|
||||
void SetPath(const std::string & newPath) {Path(newPath);}
|
||||
|
||||
// Reads ini file specified using path.
|
||||
// Returns true if successful, false otherwise.
|
||||
bool ReadFile(); // tolua_export
|
||||
/** Reads the ini file specified in m_Path
|
||||
If the file doesn't exist and a_AllowExampleRedirect is true, tries to read <basename>.example.ini, and
|
||||
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.
|
||||
bool WriteFile(); // tolua_export
|
||||
/// Writes data stored in class to ini file specified in m_Path
|
||||
bool WriteFile(void) const;
|
||||
|
||||
// Deletes all stored ini data.
|
||||
void Erase(); // tolua_export
|
||||
void Clear() {Erase();} // tolua_export
|
||||
void Reset() {Erase();} // tolua_export
|
||||
/// Deletes all stored ini data (but doesn't touch the file)
|
||||
void Clear(void);
|
||||
void Reset(void) { Clear(); }
|
||||
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.
|
||||
long FindKey( const std::string & keyname) const; // tolua_export
|
||||
/// Returns index of specified key, or noID if not found
|
||||
long FindKey(const std::string & keyname) const;
|
||||
|
||||
// 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
|
||||
/// Returns index of specified value, in the specified key, or noID if not found
|
||||
long FindValue(const unsigned keyID, const std::string & valuename) const;
|
||||
|
||||
// Returns number of keys currently in the ini.
|
||||
unsigned NumKeys() const {return names.size();} // tolua_export
|
||||
unsigned GetNumKeys() const {return NumKeys();} // tolua_export
|
||||
/// Returns number of keys currently in the ini
|
||||
unsigned NumKeys (void) const {return names.size();}
|
||||
unsigned GetNumKeys(void) const {return NumKeys();}
|
||||
|
||||
// Add a key name.
|
||||
unsigned AddKeyName( const std::string & keyname); // tolua_export
|
||||
/// Add a key name
|
||||
unsigned AddKeyName(const std::string & keyname);
|
||||
|
||||
// Returns key names by index.
|
||||
std::string KeyName( const unsigned keyID) const; // tolua_export
|
||||
std::string GetKeyName( const unsigned keyID) const {return KeyName(keyID);} // tolua_export
|
||||
std::string KeyName(const unsigned keyID) const;
|
||||
std::string GetKeyName(const unsigned keyID) const {return KeyName(keyID);}
|
||||
|
||||
// Returns number of values stored for specified key.
|
||||
unsigned NumValues( const std::string & keyname); // tolua_export
|
||||
unsigned GetNumValues( const std::string & keyname) {return NumValues( keyname);} // tolua_export
|
||||
unsigned NumValues( const unsigned keyID); // tolua_export
|
||||
unsigned GetNumValues( const unsigned keyID) {return NumValues( keyID);} // tolua_export
|
||||
unsigned NumValues (const std::string & keyname);
|
||||
unsigned GetNumValues(const std::string & keyname) {return NumValues(keyname);}
|
||||
unsigned NumValues (const unsigned keyID);
|
||||
unsigned GetNumValues(const unsigned keyID) {return NumValues(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 GetValueName( const std::string & keyname, const unsigned valueID) const { // tolua_export
|
||||
return ValueName( keyname, valueID);
|
||||
} // tolua_export
|
||||
std::string ValueName( const unsigned keyID, const unsigned valueID) const; // tolua_export
|
||||
std::string GetValueName( const unsigned keyID, const unsigned valueID) const { // tolua_export
|
||||
return ValueName( keyID, valueID);
|
||||
} // tolua_export
|
||||
std::string ValueName( const std::string & keyname, const unsigned valueID) const;
|
||||
std::string GetValueName( const std::string & keyname, const unsigned valueID) const
|
||||
{
|
||||
return ValueName(keyname, valueID);
|
||||
}
|
||||
std::string ValueName (const unsigned keyID, const unsigned valueID) const;
|
||||
std::string GetValueName(const unsigned keyID, const unsigned valueID) const
|
||||
{
|
||||
return ValueName(keyID, valueID);
|
||||
}
|
||||
|
||||
// Gets value of [keyname] valuename =.
|
||||
// Overloaded to return string, int, and double.
|
||||
// Returns defValue if key/value not found.
|
||||
AString GetValue (const AString & keyname, const AString & valuename, const AString & defValue = "") const; // tolua_export
|
||||
AString GetValue (const unsigned keyID, const unsigned valueID, const AString & defValue = "") const; // tolua_export
|
||||
double GetValueF(const AString & keyname, const AString & valuename, const double defValue = 0) const; // tolua_export
|
||||
int GetValueI(const AString & keyname, const AString & valuename, const int defValue = 0) const; // tolua_export
|
||||
bool GetValueB(const AString & keyname, const AString & valuename, const bool defValue = false) const { // tolua_export
|
||||
return ( GetValueI( keyname, valuename, int( defValue)) > 0);
|
||||
} // 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;
|
||||
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;
|
||||
bool GetValueB(const AString & keyname, const AString & valuename, const bool defValue = false) const
|
||||
{
|
||||
return (GetValueI(keyname, valuename, int(defValue)) > 0);
|
||||
}
|
||||
|
||||
// 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
|
||||
double GetValueSetF(const AString & keyname, const AString & valuename, const double defValue = 0.0); // tolua_export
|
||||
int GetValueSetI(const AString & keyname, const AString & valuename, const int defValue = 0); // tolua_export
|
||||
bool GetValueSetB(const AString & keyname, const AString & valuename, const bool defValue = false) { // 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);
|
||||
int GetValueSetI(const AString & keyname, const AString & valuename, const int defValue = 0);
|
||||
bool GetValueSetB(const AString & keyname, const AString & valuename, const bool defValue = false)
|
||||
{
|
||||
return (GetValueSetI(keyname, valuename, defValue ? 1 : 0) > 0);
|
||||
} // tolua_export
|
||||
}
|
||||
|
||||
// Sets value of [keyname] valuename =.
|
||||
// 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.
|
||||
// Overloaded to accept string, int, and double.
|
||||
bool SetValue( const unsigned keyID, const unsigned valueID, const std::string & value); // tolua_export
|
||||
bool SetValue( const std::string & keyname, const std::string & valuename, const std::string & value, const bool create = true); // tolua_export
|
||||
bool SetValueI( const std::string & keyname, const std::string & valuename, const int value, const bool create = true); // tolua_export
|
||||
bool SetValueB( const std::string & keyname, const std::string & valuename, const bool value, const bool create = true) { // 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);
|
||||
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)
|
||||
{
|
||||
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, ...);
|
||||
|
||||
// Deletes specified value.
|
||||
// Returns true if value existed and deleted, false otherwise.
|
||||
bool DeleteValueByID( const unsigned keyID, const unsigned valueID ); // tolua_export
|
||||
bool DeleteValue( const std::string & keyname, const std::string & valuename); // tolua_export
|
||||
bool DeleteValueByID( const unsigned keyID, const unsigned valueID );
|
||||
bool DeleteValue( const std::string & keyname, const std::string & valuename);
|
||||
|
||||
// Deletes specified key and all values contained within.
|
||||
// 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 comments are those comments before the first key.
|
||||
//
|
||||
// Number of header comments.
|
||||
unsigned NumHeaderComments() {return comments.size();} // tolua_export
|
||||
unsigned NumHeaderComments(void) {return comments.size();}
|
||||
// Add a header comment.
|
||||
void HeaderComment( const std::string & comment); // tolua_export
|
||||
void HeaderComment(const std::string & 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.
|
||||
bool DeleteHeaderComment( unsigned commentID); // tolua_export
|
||||
bool DeleteHeaderComment(unsigned commentID);
|
||||
// Delete all header comments.
|
||||
void DeleteHeaderComments() {comments.clear();} // tolua_export
|
||||
void DeleteHeaderComments(void) {comments.clear();}
|
||||
|
||||
|
||||
// Key comment functions.
|
||||
// Key comments are those comments within a key. Any comments
|
||||
@ -167,20 +187,26 @@ public:
|
||||
// the CIniFile::WriteFile() is called.
|
||||
//
|
||||
// Number of key comments.
|
||||
unsigned NumKeyComments( const unsigned keyID) const; // tolua_export
|
||||
unsigned NumKeyComments( const std::string & keyname) const; // tolua_export
|
||||
unsigned NumKeyComments( const unsigned keyID) const;
|
||||
unsigned NumKeyComments( const std::string & keyname) const;
|
||||
|
||||
// Add a key comment.
|
||||
bool KeyComment( const unsigned keyID, const std::string & comment); // tolua_export
|
||||
bool KeyComment( const std::string & keyname, 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);
|
||||
|
||||
// Return a key comment.
|
||||
std::string KeyComment( const unsigned keyID, const unsigned commentID) const; // tolua_export
|
||||
std::string KeyComment( const std::string & keyname, 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;
|
||||
|
||||
// Delete a key comment.
|
||||
bool DeleteKeyComment( const unsigned keyID, const unsigned commentID); // tolua_export
|
||||
bool DeleteKeyComment( const std::string & keyname, const unsigned commentID); // tolua_export
|
||||
bool DeleteKeyComment(const unsigned keyID, const unsigned commentID);
|
||||
bool DeleteKeyComment(const std::string & keyname, const unsigned commentID);
|
||||
|
||||
// Delete all comments for a key.
|
||||
bool DeleteKeyComments( const unsigned keyID); // tolua_export
|
||||
bool DeleteKeyComments( const std::string & keyname); // tolua_export
|
||||
}; // tolua_export
|
||||
bool DeleteKeyComments(const unsigned keyID);
|
||||
bool DeleteKeyComments(const std::string & keyname);
|
||||
};
|
||||
|
||||
// tolua_end
|
||||
|
||||
#endif
|
||||
|
@ -169,6 +169,8 @@ enum ENUM_BLOCK_ID
|
||||
|
||||
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++
|
||||
// IsValidBlock() depends on this
|
||||
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 "../World.h"
|
||||
#include "../BlockArea.h"
|
||||
#include "../Player.h"
|
||||
|
||||
|
||||
|
@ -5,6 +5,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "../Piston.h"
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -5,59 +5,60 @@
|
||||
#include "../World.h"
|
||||
#include "../Root.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 "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 "BlockCactus.h"
|
||||
#include "BlockCarpet.h"
|
||||
#include "BlockCauldron.h"
|
||||
#include "BlockChest.h"
|
||||
#include "BlockCloth.h"
|
||||
#include "BlockCobWeb.h"
|
||||
#include "BlockCrops.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 "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");
|
||||
if (!IniFile.ReadFile())
|
||||
{
|
||||
LOGINFO("groups.ini inaccessible, using groups.example.ini for defaults!");
|
||||
IniFile.Path("groups.example.ini");
|
||||
IniFile.ReadFile();
|
||||
IniFile.Path("groups.ini");
|
||||
IniFile.WriteFile();
|
||||
LOGWARNING("groups.ini inaccessible, no groups are defined");
|
||||
return;
|
||||
}
|
||||
|
||||
unsigned int NumKeys = IniFile.GetNumKeys();
|
||||
|
@ -10,6 +10,9 @@
|
||||
|
||||
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 )
|
||||
{
|
||||
#ifdef _WIN32
|
||||
HANDLE hConsole = GetStdHandle( STD_OUTPUT_HANDLE );
|
||||
SetConsoleTextAttribute( hConsole, a_Color );
|
||||
SetConsoleTextAttribute(g_Console, a_Color);
|
||||
#else
|
||||
(void)a_Color;
|
||||
#endif
|
||||
|
@ -170,7 +170,7 @@ cPlugin_NewLua * GetLuaPlugin(lua_State * L)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
template<
|
||||
class Ty1,
|
||||
class Ty2,
|
||||
@ -178,87 +178,177 @@ template<
|
||||
>
|
||||
static int tolua_DoWith(lua_State* tolua_S)
|
||||
{
|
||||
int NumArgs = lua_gettop(tolua_S) - 1; /* This includes 'self' */
|
||||
if ((NumArgs != 2) && (NumArgs != 3))
|
||||
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);
|
||||
Ty1 * self = (Ty1 *) tolua_tousertype(tolua_S, 1, 0);
|
||||
|
||||
const char * ItemName = tolua_tocppstring(tolua_S, 2, "");
|
||||
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>
|
||||
const char * ItemName = tolua_tocppstring(tolua_S, 2, "");
|
||||
if ((ItemName == NULL) || (ItemName[0] == 0))
|
||||
{
|
||||
public:
|
||||
cLuaCallback(lua_State* a_LuaState, int a_FuncRef, int a_TableRef)
|
||||
: LuaState( a_LuaState )
|
||||
, FuncRef( a_FuncRef )
|
||||
, TableRef( a_TableRef )
|
||||
{}
|
||||
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);
|
||||
}
|
||||
|
||||
private:
|
||||
virtual bool Item(Ty2 * a_Item) override
|
||||
{
|
||||
lua_rawgeti( LuaState, LUA_REGISTRYINDEX, FuncRef); /* Push function reference */
|
||||
/* 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 reference */
|
||||
tolua_pushusertype(LuaState, a_Item, Ty2::GetClassStatic());
|
||||
if (TableRef != LUA_REFNIL)
|
||||
{
|
||||
lua_rawgeti( LuaState, LUA_REGISTRYINDEX, TableRef); /* Push table reference */
|
||||
}
|
||||
if (TableRef != LUA_REFNIL)
|
||||
{
|
||||
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))
|
||||
{
|
||||
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);
|
||||
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)(ItemName, 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);
|
||||
/* 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;
|
||||
/* Push return value on stack */
|
||||
tolua_pushboolean(tolua_S, bRetVal );
|
||||
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> &) >
|
||||
static int tolua_DoWithXYZ(lua_State* tolua_S)
|
||||
{
|
||||
int NumArgs = lua_gettop(tolua_S) - 1; /* This includes 'self' */
|
||||
if ((NumArgs != 4) && (NumArgs != 5))
|
||||
{
|
||||
int NumArgs = lua_gettop(tolua_S) - 1; /* This includes 'self' */
|
||||
if ((NumArgs != 4) && (NumArgs != 5))
|
||||
{
|
||||
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);
|
||||
if (!lua_isnumber(tolua_S, 2) || !lua_isnumber(tolua_S, 3) || !lua_isnumber(tolua_S, 4))
|
||||
{
|
||||
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))
|
||||
{
|
||||
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 ItemY = ((int)tolua_tonumber(tolua_S, 3, 0));
|
||||
int ItemZ = ((int)tolua_tonumber(tolua_S, 4, 0));
|
||||
LOG("x %i y %i z %i", ItemX, ItemY, ItemZ );
|
||||
if (!lua_isfunction( tolua_S, 5))
|
||||
{
|
||||
int ItemX = ((int)tolua_tonumber(tolua_S, 2, 0));
|
||||
int ItemY = ((int)tolua_tonumber(tolua_S, 3, 0));
|
||||
int ItemZ = ((int)tolua_tonumber(tolua_S, 4, 0));
|
||||
LOG("x %i y %i z %i", ItemX, ItemY, ItemZ );
|
||||
if (!lua_isfunction( tolua_S, 5))
|
||||
{
|
||||
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 */
|
||||
int TableRef = LUA_REFNIL;
|
||||
if (NumArgs == 5)
|
||||
{
|
||||
TableRef = luaL_ref(tolua_S, LUA_REGISTRYINDEX);
|
||||
if (TableRef == LUA_REFNIL)
|
||||
{
|
||||
/* 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 == 5)
|
||||
{
|
||||
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 #5");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 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)
|
||||
{
|
||||
/* 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 #4");
|
||||
}
|
||||
}
|
||||
|
||||
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 )
|
||||
{}
|
||||
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());
|
||||
if (TableRef != LUA_REFNIL)
|
||||
{
|
||||
lua_rawgeti( LuaState, LUA_REGISTRYINDEX, TableRef); /* Push table reference */
|
||||
}
|
||||
private:
|
||||
virtual bool Item(Ty2 * a_Item) override
|
||||
{
|
||||
lua_rawgeti( LuaState, LUA_REGISTRYINDEX, FuncRef); /* Push function reference */
|
||||
tolua_pushusertype(LuaState, a_Item, Ty2::GetClassStatic());
|
||||
if (TableRef != LUA_REFNIL)
|
||||
{
|
||||
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))
|
||||
{
|
||||
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);
|
||||
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)(ItemX, ItemY, ItemZ, 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);
|
||||
/* 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;
|
||||
/* Push return value on stack */
|
||||
tolua_pushboolean(tolua_S, bRetVal );
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
@ -364,89 +454,89 @@ template< class Ty1,
|
||||
bool (Ty1::*Func1)(int, int, cItemCallback<Ty2> &) >
|
||||
static int tolua_ForEachInChunk(lua_State* tolua_S)
|
||||
{
|
||||
int NumArgs = lua_gettop(tolua_S) - 1; /* This includes 'self' */
|
||||
if ((NumArgs != 3) && (NumArgs != 4))
|
||||
{
|
||||
int NumArgs = lua_gettop(tolua_S) - 1; /* This includes 'self' */
|
||||
if ((NumArgs != 3) && (NumArgs != 4))
|
||||
{
|
||||
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);
|
||||
if (!lua_isnumber(tolua_S, 2) || !lua_isnumber(tolua_S, 3))
|
||||
{
|
||||
Ty1 * self = (Ty1 *) tolua_tousertype(tolua_S, 1, 0);
|
||||
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");
|
||||
}
|
||||
}
|
||||
|
||||
int ChunkX = ((int)tolua_tonumber(tolua_S, 2, 0));
|
||||
int ChunkZ = ((int)tolua_tonumber(tolua_S, 3, 0));
|
||||
int ChunkX = ((int)tolua_tonumber(tolua_S, 2, 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");
|
||||
}
|
||||
}
|
||||
|
||||
/* 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 == 4)
|
||||
{
|
||||
TableRef = luaL_ref(tolua_S, LUA_REGISTRYINDEX);
|
||||
if (TableRef == LUA_REFNIL)
|
||||
{
|
||||
/* 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 == 4)
|
||||
{
|
||||
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 #4");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 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)
|
||||
{
|
||||
/* 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 #3");
|
||||
}
|
||||
}
|
||||
|
||||
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 )
|
||||
{}
|
||||
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());
|
||||
if (TableRef != LUA_REFNIL)
|
||||
{
|
||||
lua_rawgeti( LuaState, LUA_REGISTRYINDEX, TableRef); /* Push table reference */
|
||||
}
|
||||
private:
|
||||
virtual bool Item(Ty2 * a_Item) override
|
||||
{
|
||||
lua_rawgeti( LuaState, LUA_REGISTRYINDEX, FuncRef); /* Push function reference */
|
||||
tolua_pushusertype(LuaState, a_Item, Ty2::GetClassStatic());
|
||||
if (TableRef != LUA_REFNIL)
|
||||
{
|
||||
lua_rawgeti( LuaState, LUA_REGISTRYINDEX, TableRef); /* Push table reference */
|
||||
}
|
||||
|
||||
int s = lua_pcall(LuaState, (TableRef == LUA_REFNIL ? 1 : 2), 1, 0);
|
||||
if (cLuaState::ReportErrors(LuaState, s))
|
||||
{
|
||||
return true; /* Abort enumeration */
|
||||
}
|
||||
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);
|
||||
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)(ChunkX, ChunkZ, 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);
|
||||
/* 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;
|
||||
/* Push return value on stack */
|
||||
tolua_pushboolean(tolua_S, bRetVal );
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
@ -454,7 +544,7 @@ static int tolua_ForEachInChunk(lua_State* tolua_S)
|
||||
|
||||
|
||||
template< class Ty1,
|
||||
class Ty2,
|
||||
class Ty2,
|
||||
bool (Ty1::*Func1)(cItemCallback<Ty2> &) >
|
||||
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)
|
||||
{
|
||||
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_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, "ForEachPlayer", tolua_ForEach<cRoot, cPlayer, &cRoot::ForEachPlayer>);
|
||||
tolua_function(tolua_S, "ForEachWorld", tolua_ForEach<cRoot, cWorld, &cRoot::ForEachWorld>);
|
||||
tolua_endmodule(tolua_S);
|
||||
|
||||
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, "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, "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, "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, "TryGetHeight", tolua_cWorld_TryGetHeight);
|
||||
tolua_function(tolua_S, "UpdateSign", tolua_cWorld_SetSignLines);
|
||||
tolua_endmodule(tolua_S);
|
||||
|
||||
@ -1400,11 +1538,11 @@ void ManualBindings::Bind(lua_State * tolua_S)
|
||||
tolua_endmodule(tolua_S);
|
||||
|
||||
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, "BindConsoleCommand", tolua_cPluginManager_BindConsoleCommand);
|
||||
tolua_function(tolua_S, "ForEachCommand", tolua_cPluginManager_ForEachCommand);
|
||||
tolua_function(tolua_S, "ForEachConsoleCommand", tolua_cPluginManager_ForEachConsoleCommand);
|
||||
tolua_function(tolua_S, "GetAllPlugins", tolua_cPluginManager_GetAllPlugins);
|
||||
tolua_endmodule(tolua_S);
|
||||
|
||||
tolua_beginmodule(tolua_S, "cPlayer");
|
||||
@ -1419,17 +1557,17 @@ void ManualBindings::Bind(lua_State * tolua_S)
|
||||
tolua_endmodule(tolua_S);
|
||||
|
||||
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, "AddWebTab", tolua_cPlugin_NewLua_AddWebTab);
|
||||
tolua_endmodule(tolua_S);
|
||||
|
||||
tolua_cclass(tolua_S,"HTTPRequest","HTTPRequest","",NULL);
|
||||
tolua_beginmodule(tolua_S,"HTTPRequest");
|
||||
// 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,"FormData",tolua_get_HTTPRequest_FormData,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,"FormData",tolua_get_HTTPRequest_FormData,0);
|
||||
tolua_endmodule(tolua_S);
|
||||
|
||||
tolua_beginmodule(tolua_S, "cWebAdmin");
|
||||
@ -1441,8 +1579,8 @@ void ManualBindings::Bind(lua_State * tolua_S)
|
||||
tolua_endmodule(tolua_S);
|
||||
|
||||
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, "MIN_VIEW_DISTANCE", cClientHandle::MIN_VIEW_DISTANCE);
|
||||
tolua_endmodule(tolua_S);
|
||||
|
||||
tolua_beginmodule(tolua_S, "cItemGrid");
|
||||
|
@ -112,10 +112,7 @@ void cRoot::Start(void)
|
||||
cIniFile IniFile("settings.ini");
|
||||
if (!IniFile.ReadFile())
|
||||
{
|
||||
LOGINFO("settings.ini inaccessible, using settings.example.ini for defaults!");
|
||||
IniFile.Path("settings.example.ini");
|
||||
IniFile.ReadFile();
|
||||
IniFile.Path("settings.ini");
|
||||
LOGWARNING("settings.ini inaccessible, all settings are reset to default values");
|
||||
}
|
||||
m_PrimaryServerVersion = IniFile.GetValueI("Server", "PrimaryServerVersion", 0);
|
||||
if (m_PrimaryServerVersion == 0)
|
||||
@ -139,23 +136,19 @@ void cRoot::Start(void)
|
||||
cIniFile WebIniFile("webadmin.ini");
|
||||
if (!WebIniFile.ReadFile())
|
||||
{
|
||||
LOGINFO("webadmin.ini inaccessible, using webadmin.example.ini for defaults!");
|
||||
WebIniFile.Path("webadmin.example.ini");
|
||||
WebIniFile.ReadFile();
|
||||
WebIniFile.Path("webadmin.ini");
|
||||
WebIniFile.WriteFile();
|
||||
LOGWARNING("webadmin.ini inaccessible, wabadmin is disabled");
|
||||
}
|
||||
|
||||
if (WebIniFile.GetValueB("WebAdmin", "Enabled", false ))
|
||||
if (WebIniFile.GetValueB("WebAdmin", "Enabled", false))
|
||||
{
|
||||
LOG("Creating WebAdmin...");
|
||||
m_WebAdmin = new cWebAdmin(8080);
|
||||
}
|
||||
|
||||
LOG("Loading settings...");
|
||||
m_GroupManager = new cGroupManager();
|
||||
m_GroupManager = new cGroupManager();
|
||||
m_CraftingRecipes = new cCraftingRecipes;
|
||||
m_FurnaceRecipe = new cFurnaceRecipe();
|
||||
m_FurnaceRecipe = new cFurnaceRecipe();
|
||||
|
||||
LOG("Loading worlds...");
|
||||
LoadWorlds();
|
||||
|
@ -129,7 +129,7 @@ public:
|
||||
// tolua_end
|
||||
|
||||
/// 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
|
||||
// (Please keep these alpha-sorted)
|
||||
@ -174,7 +174,7 @@ public:
|
||||
If a_MarkDirty is set, the chunk is set as dirty (used after generating)
|
||||
*/
|
||||
void SetChunkData(
|
||||
int a_ChunkX, int a_ChunkZ,
|
||||
int a_ChunkX, int a_ChunkZ,
|
||||
const BLOCKTYPE * a_BlockTypes,
|
||||
const NIBBLETYPE * a_BlockMeta,
|
||||
const NIBBLETYPE * a_BlockLight,
|
||||
@ -245,7 +245,7 @@ public:
|
||||
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.
|
||||
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
|
||||
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 ); }
|
||||
// tolua_end
|
||||
|
||||
/** Writes the block area into the specified coords.
|
||||
Returns true if all chunks have been processed.
|
||||
/** Writes the block area into the specified coords.
|
||||
Returns true if all chunks have been processed.
|
||||
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.
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user