Merge branch 'master' of https://github.com/SamJBarney/MCServer into MobSpawning
This commit is contained in:
commit
4666c1bf30
1
MCServer/.gitignore
vendored
1
MCServer/.gitignore
vendored
@ -19,3 +19,4 @@ helgrind.log
|
||||
valgrind.log
|
||||
motd.txt
|
||||
*.deuser
|
||||
*.dmp
|
||||
|
@ -369,10 +369,30 @@ g_APIDesc =
|
||||
},
|
||||
Constants =
|
||||
{
|
||||
Color = { Notes = "The first character of the color-code-sequence, §" },
|
||||
Delimiter = { Notes = "The first character of the color-code-sequence, §" },
|
||||
Random = { Notes = "Random letters and symbols animate instead of the text" },
|
||||
Black = { Notes = "" },
|
||||
Blue = { Notes = "" },
|
||||
Bold = { Notes = "" },
|
||||
Color = { Notes = "The first character of the color-code-sequence, §" },
|
||||
DarkPurple = { Notes = "" },
|
||||
Delimiter = { Notes = "The first character of the color-code-sequence, §" },
|
||||
Gold = { Notes = "" },
|
||||
Gray = { Notes = "" },
|
||||
Green = { Notes = "" },
|
||||
Italic = { Notes = "" },
|
||||
LightBlue = { Notes = "" },
|
||||
LightGray = { Notes = "" },
|
||||
LightGreen = { Notes = "" },
|
||||
LightPurple = { Notes = "" },
|
||||
Navy = { Notes = "" },
|
||||
Plain = { Notes = "Resets all formatting to normal" },
|
||||
Purple = { Notes = "" },
|
||||
Random = { Notes = "Random letters and symbols animate instead of the text" },
|
||||
Red = { Notes = "" },
|
||||
Rose = { Notes = "" },
|
||||
Strikethrough = { Notes = "" },
|
||||
Underlined = { Notes = "" },
|
||||
White = { Notes = "" },
|
||||
Yellow = { Notes = "" },
|
||||
},
|
||||
},
|
||||
|
||||
@ -755,12 +775,12 @@ World:ForEachChestInChunk(Player:GetChunkX(), Player:GetChunkZ(),
|
||||
GetHealth = { Params = "", Return = "number", Notes = "Returns the current health of the entity." },
|
||||
GetHeight = { Params = "", Return = "number", Notes = "Returns the height (Y size) of the entity" },
|
||||
GetKnockbackAmountAgainst = { Params = "ReceiverEntity", Return = "number", Notes = "Returns the amount of knockback that the currently equipped items would cause when attacking the ReceiverEntity." },
|
||||
GetLookVector = { Params = "", Return = "Vector3f", Notes = "Returns the vector that defines the direction in which the entity is looking" },
|
||||
GetLookVector = { Params = "", Return = "{{Vector3f}}", Notes = "Returns the vector that defines the direction in which the entity is looking" },
|
||||
GetMass = { Params = "", Return = "number", Notes = "Returns the mass of the entity. Currently unused." },
|
||||
GetMaxHealth = { Params = "", Return = "number", Notes = "Returns the maximum number of hitpoints this entity is allowed to have." },
|
||||
GetParentClass = { Params = "", Return = "string", Notes = "Returns the name of the direct parent class for this entity" },
|
||||
GetPitch = { Params = "", Return = "number", Notes = "Returns the pitch (nose-down rotation) of the entity" },
|
||||
GetPosition = { Params = "", Return = "Vector3d", Notes = "Returns the entity's pivot position as a 3D vector" },
|
||||
GetPosition = { Params = "", Return = "{{Vector3d}}", Notes = "Returns the entity's pivot position as a 3D vector" },
|
||||
GetPosX = { Params = "", Return = "number", Notes = "Returns the X-coord of the entity's pivot" },
|
||||
GetPosY = { Params = "", Return = "number", Notes = "Returns the Y-coord of the entity's pivot" },
|
||||
GetPosZ = { Params = "", Return = "number", Notes = "Returns the Z-coord of the entity's pivot" },
|
||||
@ -768,23 +788,26 @@ World:ForEachChestInChunk(Player:GetChunkX(), Player:GetChunkZ(),
|
||||
GetRoll = { Params = "", Return = "number", Notes = "Returns the roll (sideways rotation) of the entity. Currently unused." },
|
||||
GetRot = { Params = "", Return = "{{Vector3f}}", Notes = "Returns the entire rotation vector (Yaw, Pitch, Roll)" },
|
||||
GetRotation = { Params = "", Return = "number", Notes = "Returns the yaw (direction) of the entity. FIXME: Rename to GetYaw()." },
|
||||
GetSpeed = { Params = "", Return = "Vector3d", Notes = "Returns the complete speed vector of the entity" },
|
||||
GetSpeed = { Params = "", Return = "{{Vector3d}}", Notes = "Returns the complete speed vector of the entity" },
|
||||
GetSpeedX = { Params = "", Return = "number", Notes = "Returns the X-part of the speed vector" },
|
||||
GetSpeedY = { Params = "", Return = "number", Notes = "Returns the Y-part of the speed vector" },
|
||||
GetSpeedZ = { Params = "", Return = "number", Notes = "Returns the Z-part of the speed vector" },
|
||||
GetUniqueID = { Params = "", Return = "number", Notes = "Returns the ID that uniquely identifies the entity within the running server. Note that this ID is not persisted to the data files." },
|
||||
GetWidth = { Params = "", Return = "number", Notes = "Returns the width (X and Z size) of the entity." },
|
||||
GetWorld = { Params = "", Return = "{{cWorld|cWorld}}", Notes = "Returns the world where the entity resides" },
|
||||
GetWorld = { Params = "", Return = "{{cWorld}}", Notes = "Returns the world where the entity resides" },
|
||||
Heal = { Params = "Hitpoints", Return = "", Notes = "Heals the specified number of hitpoints. Hitpoints is expected to be a positive number." },
|
||||
IsA = { Params = "ClassName", Return = "bool", Notes = "Returns true if the entity class is a descendant of the specified class name, or the specified class itself" },
|
||||
IsBoat = { Params = "", Return = "bool", Notes = "Returns true if the entity is a {{cBoat|boat}}." },
|
||||
IsCrouched = { Params = "", Return = "bool", Notes = "Returns true if the entity is crouched. Always false for entities that don't support crouching." },
|
||||
IsDestroyed = { Params = "", Return = "bool", Notes = "Returns true if the entity has been destroyed and is awaiting removal from the internal structures." },
|
||||
IsFallingBlock = { Params = "", Return = "bool", Notes = "Returns true if the entity represents a {{cFallingBlock}} entity." },
|
||||
IsInvisible = { Params = "", Return = "bool", Notes = "Returns true if the entity is invisible" },
|
||||
IsMinecart = { Params = "", Return = "bool", Notes = "Returns true if the entity represents a {{cMinecart|minecart}}" },
|
||||
IsMob = { Params = "", Return = "bool", Notes = "Returns true if the entity represents any {{cMonster|mob}}." },
|
||||
IsOnFire = { Params = "", Return = "bool", Notes = "Returns true if the entity is on fire" },
|
||||
IsPickup = { Params = "", Return = "bool", Notes = "Returns true if the entity represents a {{cPickup|pickup}}." },
|
||||
IsPlayer = { Params = "", Return = "bool", Notes = "Returns true if the entity represents a {{cPlayer|player}}" },
|
||||
IsProjectile = { Params = "", Return = "bool", Notes = "Returns true if the entity is a {{cProjectileEntity}} descendant." },
|
||||
IsRclking = { Params = "", Return = "bool", Notes = "Currently unimplemented" },
|
||||
IsRiding = { Params = "", Return = "bool", Notes = "Returns true if the entity is attached to (riding) another entity." },
|
||||
IsSprinting = { Params = "", Return = "bool", Notes = "Returns true if the entity is sprinting. Entities that cannot sprint return always false" },
|
||||
@ -935,6 +958,28 @@ cFile:Delete("/usr/bin/virus.exe");
|
||||
},
|
||||
},
|
||||
|
||||
cHopperEntity =
|
||||
{
|
||||
Desc = [[
|
||||
This class represents a hopper block entity in the world.</p>
|
||||
<p>
|
||||
Plugins may use this class during chunk generation ({{OnChunkGenerated|HOOK_CHUNK_GENERATED}} and
|
||||
{{OnChunkGenerating|HOOK_CHUNK_GENERATING}}) to add hoppers to the generated chunk.
|
||||
]],
|
||||
Functions =
|
||||
{
|
||||
constructor = { Params = "BlockX, BlockY, BlockZ", Return = "cHopperEntity", Notes = "Creates and returns a new hopper at the specified coords." },
|
||||
GetOutputBlockPos = { Params = "BlockMeta", Return = "bool, BlockX, BlockY, BlockZ", Notes = "Returns whether the hopper is attached, and if so, the block coords of the block receiving the output items, based on the given meta." },
|
||||
},
|
||||
Constants =
|
||||
{
|
||||
ContentsHeight = { Notes = "Height (Y) of the internal {{cItemGrid}} representing the hopper contents." },
|
||||
ContentsWidth = { Notes = "Width (X) of the internal {{cItemGrid}} representing the hopper contents." },
|
||||
TICKS_PER_TRANSFER = { Notes = "Number of ticks between when the hopper transfers items." },
|
||||
},
|
||||
Inherits = "cBlockEntityWithItems",
|
||||
},
|
||||
|
||||
cIniFile =
|
||||
{
|
||||
Desc = [[The cIniFile is a class that makes it simple to read from and write to INI files. MCServer uses mostly INI files for settings and options.
|
||||
|
@ -158,9 +158,16 @@ function CreateAPITables()
|
||||
end
|
||||
|
||||
-- Member variables:
|
||||
local SetField = a_ClassObj[".set"] or {};
|
||||
if ((a_ClassObj[".get"] ~= nil) and (type(a_ClassObj[".get"]) == "table")) then
|
||||
for k, v in pairs(a_ClassObj[".get"]) do
|
||||
table.insert(res.Variables, { Name = k });
|
||||
if (SetField[k] == nil) then
|
||||
-- It is a read-only variable, add it as a constant:
|
||||
table.insert(res.Constants, {Name = k, Value = ""});
|
||||
else
|
||||
-- It is a read-write variable, add it as a variable:
|
||||
table.insert(res.Variables, { Name = k });
|
||||
end
|
||||
end
|
||||
end
|
||||
return res;
|
||||
@ -818,12 +825,10 @@ function WriteHtmlClass(a_ClassAPI, a_AllAPI)
|
||||
local HasConstants = (#a_ClassAPI.Constants > 0);
|
||||
local HasFunctions = (#a_ClassAPI.Functions > 0);
|
||||
local HasVariables = (#a_ClassAPI.Variables > 0);
|
||||
if (a_ClassAPI.Inherits ~= nil) then
|
||||
for idx, cls in ipairs(a_ClassAPI.Inherits) do
|
||||
HasConstants = HasConstants or (#cls.Constants > 0);
|
||||
HasFunctions = HasFunctions or (#cls.Functions > 0);
|
||||
HasVariables = HasVariables or (#cls.Variables > 0);
|
||||
end
|
||||
for idx, cls in ipairs(InheritanceChain) do
|
||||
HasConstants = HasConstants or (#cls.Constants > 0);
|
||||
HasFunctions = HasFunctions or (#cls.Functions > 0);
|
||||
HasVariables = HasVariables or (#cls.Variables > 0);
|
||||
end
|
||||
|
||||
-- Write the table of contents:
|
||||
|
1
VC2008/.gitignore
vendored
1
VC2008/.gitignore
vendored
@ -1,6 +1,7 @@
|
||||
Debug/
|
||||
Debug profiled/
|
||||
Release/
|
||||
Release profiled/
|
||||
*.user
|
||||
*.ncb
|
||||
*.suo
|
||||
|
@ -47,6 +47,7 @@ $cfile "BlockEntities/DropSpenserEntity.h"
|
||||
$cfile "BlockEntities/DispenserEntity.h"
|
||||
$cfile "BlockEntities/DropperEntity.h"
|
||||
$cfile "BlockEntities/FurnaceEntity.h"
|
||||
$cfile "BlockEntities/HopperEntity.h"
|
||||
$cfile "WebAdmin.h"
|
||||
$cfile "WebPlugin.h"
|
||||
$cfile "Root.h"
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
** Lua binding: AllToLua
|
||||
** Generated automatically by tolua++-1.0.92 on 10/21/13 13:17:19.
|
||||
** Generated automatically by tolua++-1.0.92 on 10/23/13 13:30:23.
|
||||
*/
|
||||
|
||||
#ifndef __cplusplus
|
||||
@ -46,6 +46,7 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S);
|
||||
#include "BlockEntities/DispenserEntity.h"
|
||||
#include "BlockEntities/DropperEntity.h"
|
||||
#include "BlockEntities/FurnaceEntity.h"
|
||||
#include "BlockEntities/HopperEntity.h"
|
||||
#include "WebAdmin.h"
|
||||
#include "WebPlugin.h"
|
||||
#include "Root.h"
|
||||
@ -74,9 +75,9 @@ static int tolua_collect_cItem (lua_State* tolua_S)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int tolua_collect_cFurnaceEntity (lua_State* tolua_S)
|
||||
static int tolua_collect_Vector3f (lua_State* tolua_S)
|
||||
{
|
||||
cFurnaceEntity* self = (cFurnaceEntity*) tolua_tousertype(tolua_S,1,0);
|
||||
Vector3f* self = (Vector3f*) tolua_tousertype(tolua_S,1,0);
|
||||
Mtolua_delete(self);
|
||||
return 0;
|
||||
}
|
||||
@ -144,9 +145,9 @@ static int tolua_collect_cPickup (lua_State* tolua_S)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int tolua_collect_sWebAdminPage (lua_State* tolua_S)
|
||||
static int tolua_collect_cItems (lua_State* tolua_S)
|
||||
{
|
||||
sWebAdminPage* self = (sWebAdminPage*) tolua_tousertype(tolua_S,1,0);
|
||||
cItems* self = (cItems*) tolua_tousertype(tolua_S,1,0);
|
||||
Mtolua_delete(self);
|
||||
return 0;
|
||||
}
|
||||
@ -172,9 +173,16 @@ static int tolua_collect_cBoundingBox (lua_State* tolua_S)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int tolua_collect_Vector3f (lua_State* tolua_S)
|
||||
static int tolua_collect_sWebAdminPage (lua_State* tolua_S)
|
||||
{
|
||||
Vector3f* self = (Vector3f*) tolua_tousertype(tolua_S,1,0);
|
||||
sWebAdminPage* self = (sWebAdminPage*) tolua_tousertype(tolua_S,1,0);
|
||||
Mtolua_delete(self);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int tolua_collect_cHopperEntity (lua_State* tolua_S)
|
||||
{
|
||||
cHopperEntity* self = (cHopperEntity*) tolua_tousertype(tolua_S,1,0);
|
||||
Mtolua_delete(self);
|
||||
return 0;
|
||||
}
|
||||
@ -186,16 +194,16 @@ static int tolua_collect_Vector3i (lua_State* tolua_S)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int tolua_collect_cIniFile (lua_State* tolua_S)
|
||||
static int tolua_collect_cFurnaceEntity (lua_State* tolua_S)
|
||||
{
|
||||
cIniFile* self = (cIniFile*) tolua_tousertype(tolua_S,1,0);
|
||||
cFurnaceEntity* self = (cFurnaceEntity*) tolua_tousertype(tolua_S,1,0);
|
||||
Mtolua_delete(self);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int tolua_collect_cItems (lua_State* tolua_S)
|
||||
static int tolua_collect_cIniFile (lua_State* tolua_S)
|
||||
{
|
||||
cItems* self = (cItems*) tolua_tousertype(tolua_S,1,0);
|
||||
cIniFile* self = (cIniFile*) tolua_tousertype(tolua_S,1,0);
|
||||
Mtolua_delete(self);
|
||||
return 0;
|
||||
}
|
||||
@ -244,7 +252,7 @@ static void tolua_reg_types (lua_State* tolua_S)
|
||||
tolua_usertype(tolua_S,"cHTTPServer::cCallbacks");
|
||||
tolua_usertype(tolua_S,"cLuaWindow");
|
||||
tolua_usertype(tolua_S,"cInventory");
|
||||
tolua_usertype(tolua_S,"cBoundingBox");
|
||||
tolua_usertype(tolua_S,"cHopperEntity");
|
||||
tolua_usertype(tolua_S,"cBlockEntityWithItems");
|
||||
tolua_usertype(tolua_S,"cWindow");
|
||||
tolua_usertype(tolua_S,"cGroup");
|
||||
@ -255,24 +263,24 @@ static void tolua_reg_types (lua_State* tolua_S)
|
||||
tolua_usertype(tolua_S,"cBlockArea");
|
||||
tolua_usertype(tolua_S,"cTracer");
|
||||
tolua_usertype(tolua_S,"cStringMap");
|
||||
tolua_usertype(tolua_S,"cBoundingBox");
|
||||
tolua_usertype(tolua_S,"cServer");
|
||||
tolua_usertype(tolua_S,"Vector3i");
|
||||
tolua_usertype(tolua_S,"cBlockEntity");
|
||||
tolua_usertype(tolua_S,"cCriticalSection");
|
||||
tolua_usertype(tolua_S,"HTTPTemplateRequest");
|
||||
tolua_usertype(tolua_S,"Vector3i");
|
||||
tolua_usertype(tolua_S,"cFile");
|
||||
tolua_usertype(tolua_S,"std::vector<std::string>");
|
||||
tolua_usertype(tolua_S,"cClientHandle");
|
||||
tolua_usertype(tolua_S,"cChatColor");
|
||||
tolua_usertype(tolua_S,"cWebPlugin");
|
||||
tolua_usertype(tolua_S,"cWebAdmin");
|
||||
tolua_usertype(tolua_S,"cIniFile");
|
||||
tolua_usertype(tolua_S,"cWebAdmin");
|
||||
tolua_usertype(tolua_S,"sWebAdminPage");
|
||||
tolua_usertype(tolua_S,"cItem");
|
||||
tolua_usertype(tolua_S,"cPawn");
|
||||
tolua_usertype(tolua_S,"cPlayer");
|
||||
tolua_usertype(tolua_S,"cGroupManager");
|
||||
tolua_usertype(tolua_S,"cBlockEntityWindowOwner");
|
||||
tolua_usertype(tolua_S,"cItem");
|
||||
tolua_usertype(tolua_S,"HTTPRequest");
|
||||
tolua_usertype(tolua_S,"cProjectileEntity");
|
||||
tolua_usertype(tolua_S,"cItemGrid::cListener");
|
||||
@ -18309,23 +18317,6 @@ static int tolua_AllToLua_cDropSpenserEntity_SetRedstonePower00(lua_State* tolua
|
||||
}
|
||||
#endif //#ifndef TOLUA_DISABLE
|
||||
|
||||
/* get function: __cBlockEntityWindowOwner__ of class cDropSpenserEntity */
|
||||
#ifndef TOLUA_DISABLE_tolua_get_cDropSpenserEntity___cBlockEntityWindowOwner__
|
||||
static int tolua_get_cDropSpenserEntity___cBlockEntityWindowOwner__(lua_State* tolua_S)
|
||||
{
|
||||
cDropSpenserEntity* self = (cDropSpenserEntity*) tolua_tousertype(tolua_S,1,0);
|
||||
#ifndef TOLUA_RELEASE
|
||||
if (!self) tolua_error(tolua_S,"invalid 'self' in accessing variable '__cBlockEntityWindowOwner__'",NULL);
|
||||
#endif
|
||||
#ifdef __cplusplus
|
||||
tolua_pushusertype(tolua_S,(void*)static_cast<cBlockEntityWindowOwner*>(self), "cBlockEntityWindowOwner");
|
||||
#else
|
||||
tolua_pushusertype(tolua_S,(void*)((cBlockEntityWindowOwner*)self), "cBlockEntityWindowOwner");
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
#endif //#ifndef TOLUA_DISABLE
|
||||
|
||||
/* method: new of class cDispenserEntity */
|
||||
#ifndef TOLUA_DISABLE_tolua_AllToLua_cDispenserEntity_new00
|
||||
static int tolua_AllToLua_cDispenserEntity_new00(lua_State* tolua_S)
|
||||
@ -18864,6 +18855,75 @@ static int tolua_AllToLua_cFurnaceEntity_HasFuelTimeLeft00(lua_State* tolua_S)
|
||||
}
|
||||
#endif //#ifndef TOLUA_DISABLE
|
||||
|
||||
/* method: new of class cHopperEntity */
|
||||
#ifndef TOLUA_DISABLE_tolua_AllToLua_cHopperEntity_new00
|
||||
static int tolua_AllToLua_cHopperEntity_new00(lua_State* tolua_S)
|
||||
{
|
||||
#ifndef TOLUA_RELEASE
|
||||
tolua_Error tolua_err;
|
||||
if (
|
||||
!tolua_isusertable(tolua_S,1,"cHopperEntity",0,&tolua_err) ||
|
||||
!tolua_isnumber(tolua_S,2,0,&tolua_err) ||
|
||||
!tolua_isnumber(tolua_S,3,0,&tolua_err) ||
|
||||
!tolua_isnumber(tolua_S,4,0,&tolua_err) ||
|
||||
!tolua_isnoobj(tolua_S,5,&tolua_err)
|
||||
)
|
||||
goto tolua_lerror;
|
||||
else
|
||||
#endif
|
||||
{
|
||||
int a_BlockX = ((int) tolua_tonumber(tolua_S,2,0));
|
||||
int a_BlockY = ((int) tolua_tonumber(tolua_S,3,0));
|
||||
int a_BlockZ = ((int) tolua_tonumber(tolua_S,4,0));
|
||||
{
|
||||
cHopperEntity* tolua_ret = (cHopperEntity*) Mtolua_new((cHopperEntity)(a_BlockX,a_BlockY,a_BlockZ));
|
||||
tolua_pushusertype(tolua_S,(void*)tolua_ret,"cHopperEntity");
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
#ifndef TOLUA_RELEASE
|
||||
tolua_lerror:
|
||||
tolua_error(tolua_S,"#ferror in function 'new'.",&tolua_err);
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
#endif //#ifndef TOLUA_DISABLE
|
||||
|
||||
/* method: new_local of class cHopperEntity */
|
||||
#ifndef TOLUA_DISABLE_tolua_AllToLua_cHopperEntity_new00_local
|
||||
static int tolua_AllToLua_cHopperEntity_new00_local(lua_State* tolua_S)
|
||||
{
|
||||
#ifndef TOLUA_RELEASE
|
||||
tolua_Error tolua_err;
|
||||
if (
|
||||
!tolua_isusertable(tolua_S,1,"cHopperEntity",0,&tolua_err) ||
|
||||
!tolua_isnumber(tolua_S,2,0,&tolua_err) ||
|
||||
!tolua_isnumber(tolua_S,3,0,&tolua_err) ||
|
||||
!tolua_isnumber(tolua_S,4,0,&tolua_err) ||
|
||||
!tolua_isnoobj(tolua_S,5,&tolua_err)
|
||||
)
|
||||
goto tolua_lerror;
|
||||
else
|
||||
#endif
|
||||
{
|
||||
int a_BlockX = ((int) tolua_tonumber(tolua_S,2,0));
|
||||
int a_BlockY = ((int) tolua_tonumber(tolua_S,3,0));
|
||||
int a_BlockZ = ((int) tolua_tonumber(tolua_S,4,0));
|
||||
{
|
||||
cHopperEntity* tolua_ret = (cHopperEntity*) Mtolua_new((cHopperEntity)(a_BlockX,a_BlockY,a_BlockZ));
|
||||
tolua_pushusertype(tolua_S,(void*)tolua_ret,"cHopperEntity");
|
||||
tolua_register_gc(tolua_S,lua_gettop(tolua_S));
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
#ifndef TOLUA_RELEASE
|
||||
tolua_lerror:
|
||||
tolua_error(tolua_S,"#ferror in function 'new'.",&tolua_err);
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
#endif //#ifndef TOLUA_DISABLE
|
||||
|
||||
/* get function: Name of class HTTPFormData */
|
||||
#ifndef TOLUA_DISABLE_tolua_get_HTTPFormData_Name
|
||||
static int tolua_get_HTTPFormData_Name(lua_State* tolua_S)
|
||||
@ -19403,36 +19463,6 @@ static int tolua_AllToLua_cWebPlugin_SafeString00(lua_State* tolua_S)
|
||||
}
|
||||
#endif //#ifndef TOLUA_DISABLE
|
||||
|
||||
/* get function: m_PrimaryServerVersion of class cRoot */
|
||||
#ifndef TOLUA_DISABLE_tolua_get_cRoot_m_PrimaryServerVersion
|
||||
static int tolua_get_cRoot_m_PrimaryServerVersion(lua_State* tolua_S)
|
||||
{
|
||||
cRoot* self = (cRoot*) tolua_tousertype(tolua_S,1,0);
|
||||
#ifndef TOLUA_RELEASE
|
||||
if (!self) tolua_error(tolua_S,"invalid 'self' in accessing variable 'm_PrimaryServerVersion'",NULL);
|
||||
#endif
|
||||
tolua_pushnumber(tolua_S,(lua_Number)self->m_PrimaryServerVersion);
|
||||
return 1;
|
||||
}
|
||||
#endif //#ifndef TOLUA_DISABLE
|
||||
|
||||
/* set function: m_PrimaryServerVersion of class cRoot */
|
||||
#ifndef TOLUA_DISABLE_tolua_set_cRoot_m_PrimaryServerVersion
|
||||
static int tolua_set_cRoot_m_PrimaryServerVersion(lua_State* tolua_S)
|
||||
{
|
||||
cRoot* self = (cRoot*) tolua_tousertype(tolua_S,1,0);
|
||||
#ifndef TOLUA_RELEASE
|
||||
tolua_Error tolua_err;
|
||||
if (!self) tolua_error(tolua_S,"invalid 'self' in accessing variable 'm_PrimaryServerVersion'",NULL);
|
||||
if (!tolua_isnumber(tolua_S,2,0,&tolua_err))
|
||||
tolua_error(tolua_S,"#vinvalid type in variable assignment.",&tolua_err);
|
||||
#endif
|
||||
self->m_PrimaryServerVersion = ((int) tolua_tonumber(tolua_S,2,0))
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
#endif //#ifndef TOLUA_DISABLE
|
||||
|
||||
/* method: Get of class cRoot */
|
||||
#ifndef TOLUA_DISABLE_tolua_AllToLua_cRoot_Get00
|
||||
static int tolua_AllToLua_cRoot_Get00(lua_State* tolua_S)
|
||||
@ -29148,23 +29178,6 @@ static int tolua_AllToLua_cLuaWindow_GetContents00(lua_State* tolua_S)
|
||||
}
|
||||
#endif //#ifndef TOLUA_DISABLE
|
||||
|
||||
/* get function: __cItemGrid of class cLuaWindow */
|
||||
#ifndef TOLUA_DISABLE_tolua_get_cLuaWindow___cItemGrid__cListener__
|
||||
static int tolua_get_cLuaWindow___cItemGrid__cListener__(lua_State* tolua_S)
|
||||
{
|
||||
cLuaWindow* self = (cLuaWindow*) tolua_tousertype(tolua_S,1,0);
|
||||
#ifndef TOLUA_RELEASE
|
||||
if (!self) tolua_error(tolua_S,"invalid 'self' in accessing variable '__cItemGrid'",NULL);
|
||||
#endif
|
||||
#ifdef __cplusplus
|
||||
tolua_pushusertype(tolua_S,(void*)static_cast<cItemGrid::cListener*>(self), "cItemGrid::cListener");
|
||||
#else
|
||||
tolua_pushusertype(tolua_S,(void*)((cItemGrid::cListener*)self), "cItemGrid::cListener");
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
#endif //#ifndef TOLUA_DISABLE
|
||||
|
||||
/* method: GetMobType of class cMonster */
|
||||
#ifndef TOLUA_DISABLE_tolua_AllToLua_cMonster_GetMobType00
|
||||
static int tolua_AllToLua_cMonster_GetMobType00(lua_State* tolua_S)
|
||||
@ -30903,7 +30916,6 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S)
|
||||
tolua_function(tolua_S,"AddDropSpenserDir",tolua_AllToLua_cDropSpenserEntity_AddDropSpenserDir00);
|
||||
tolua_function(tolua_S,"Activate",tolua_AllToLua_cDropSpenserEntity_Activate00);
|
||||
tolua_function(tolua_S,"SetRedstonePower",tolua_AllToLua_cDropSpenserEntity_SetRedstonePower00);
|
||||
tolua_variable(tolua_S,"__cBlockEntityWindowOwner__",tolua_get_cDropSpenserEntity___cBlockEntityWindowOwner__,NULL);
|
||||
tolua_endmodule(tolua_S);
|
||||
#ifdef __cplusplus
|
||||
tolua_cclass(tolua_S,"cDispenserEntity","cDispenserEntity","cDropSpenserEntity",tolua_collect_cDispenserEntity);
|
||||
@ -30950,6 +30962,19 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S)
|
||||
tolua_function(tolua_S,"GetFuelBurnTimeLeft",tolua_AllToLua_cFurnaceEntity_GetFuelBurnTimeLeft00);
|
||||
tolua_function(tolua_S,"HasFuelTimeLeft",tolua_AllToLua_cFurnaceEntity_HasFuelTimeLeft00);
|
||||
tolua_endmodule(tolua_S);
|
||||
#ifdef __cplusplus
|
||||
tolua_cclass(tolua_S,"cHopperEntity","cHopperEntity","cBlockEntityWithItems",tolua_collect_cHopperEntity);
|
||||
#else
|
||||
tolua_cclass(tolua_S,"cHopperEntity","cHopperEntity","cBlockEntityWithItems",NULL);
|
||||
#endif
|
||||
tolua_beginmodule(tolua_S,"cHopperEntity");
|
||||
tolua_constant(tolua_S,"ContentsHeight",cHopperEntity::ContentsHeight);
|
||||
tolua_constant(tolua_S,"ContentsWidth",cHopperEntity::ContentsWidth);
|
||||
tolua_constant(tolua_S,"TICKS_PER_TRANSFER",cHopperEntity::TICKS_PER_TRANSFER);
|
||||
tolua_function(tolua_S,"new",tolua_AllToLua_cHopperEntity_new00);
|
||||
tolua_function(tolua_S,"new_local",tolua_AllToLua_cHopperEntity_new00_local);
|
||||
tolua_function(tolua_S,".call",tolua_AllToLua_cHopperEntity_new00_local);
|
||||
tolua_endmodule(tolua_S);
|
||||
tolua_cclass(tolua_S,"HTTPFormData","HTTPFormData","",NULL);
|
||||
tolua_beginmodule(tolua_S,"HTTPFormData");
|
||||
tolua_variable(tolua_S,"Name",tolua_get_HTTPFormData_Name,tolua_set_HTTPFormData_Name);
|
||||
@ -30991,7 +31016,6 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S)
|
||||
tolua_endmodule(tolua_S);
|
||||
tolua_cclass(tolua_S,"cRoot","cRoot","",NULL);
|
||||
tolua_beginmodule(tolua_S,"cRoot");
|
||||
tolua_variable(tolua_S,"m_PrimaryServerVersion",tolua_get_cRoot_m_PrimaryServerVersion,tolua_set_cRoot_m_PrimaryServerVersion);
|
||||
tolua_function(tolua_S,"Get",tolua_AllToLua_cRoot_Get00);
|
||||
tolua_function(tolua_S,"GetServer",tolua_AllToLua_cRoot_GetServer00);
|
||||
tolua_function(tolua_S,"GetDefaultWorld",tolua_AllToLua_cRoot_GetDefaultWorld00);
|
||||
@ -31400,7 +31424,6 @@ TOLUA_API int tolua_AllToLua_open (lua_State* tolua_S)
|
||||
tolua_function(tolua_S,".call",tolua_AllToLua_cLuaWindow_new00_local);
|
||||
tolua_function(tolua_S,"delete",tolua_AllToLua_cLuaWindow_delete00);
|
||||
tolua_function(tolua_S,"GetContents",tolua_AllToLua_cLuaWindow_GetContents00);
|
||||
tolua_variable(tolua_S,"__cItemGrid__cListener__",tolua_get_cLuaWindow___cItemGrid__cListener__,NULL);
|
||||
tolua_endmodule(tolua_S);
|
||||
tolua_cclass(tolua_S,"cMonster","cMonster","cPawn",NULL);
|
||||
tolua_beginmodule(tolua_S,"cMonster");
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
** Lua binding: AllToLua
|
||||
** Generated automatically by tolua++-1.0.92 on 10/21/13 13:17:20.
|
||||
** Generated automatically by tolua++-1.0.92 on 10/23/13 13:30:24.
|
||||
*/
|
||||
|
||||
/* Exported function */
|
||||
|
@ -29,10 +29,10 @@ class cServer;
|
||||
|
||||
|
||||
|
||||
// tolua_begin
|
||||
class cDropSpenserEntity :
|
||||
public cBlockEntityWithItems,
|
||||
public cBlockEntityWindowOwner
|
||||
class cDropSpenserEntity : // tolua_export
|
||||
public cBlockEntityWindowOwner,
|
||||
// tolua_begin
|
||||
public cBlockEntityWithItems
|
||||
{
|
||||
typedef cBlockEntityWithItems super;
|
||||
|
||||
|
@ -38,15 +38,12 @@ public:
|
||||
/// Constructor used for normal operation
|
||||
cHopperEntity(int a_BlockX, int a_BlockY, int a_BlockZ, cWorld * a_World);
|
||||
|
||||
// tolua_begin
|
||||
|
||||
/** Returns the block coords of the block receiving the output items, based on the meta
|
||||
Returns false if unattached
|
||||
Returns false if unattached.
|
||||
Exported in ManualBindings.cpp
|
||||
*/
|
||||
bool GetOutputBlockPos(NIBBLETYPE a_BlockMeta, int & a_OutputX, int & a_OutputY, int & a_OutputZ);
|
||||
|
||||
// tolua_end
|
||||
|
||||
static const char * GetClassStatic(void) { return "cHopperEntity"; }
|
||||
|
||||
protected:
|
||||
@ -95,7 +92,7 @@ protected:
|
||||
|
||||
/// Moves one piece to the specified entity's contents' slot. Returns true if contents have changed.
|
||||
bool MoveItemsToSlot(cBlockEntityWithItems & a_Entity, int a_DstSlotNum);
|
||||
} ;
|
||||
} ; // tolua_export
|
||||
|
||||
|
||||
|
||||
|
381
source/Chunk.cpp
381
source/Chunk.cpp
@ -1065,45 +1065,14 @@ bool cChunk::UnboundedRelGetBlock(int a_RelX, int a_RelY, int a_RelZ, BLOCKTYPE
|
||||
LOGWARNING("%s: requesting a block with a_RelY out of range: %d", __FUNCTION__, a_RelY);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Is it in this chunk?
|
||||
if ((a_RelX >= 0) && (a_RelX < cChunkDef::Width) && (a_RelZ >= 0) && (a_RelZ < cChunkDef::Width))
|
||||
cChunk * Chunk = GetRelNeighborChunkAdjustCoords(a_RelX, a_RelZ);
|
||||
if ((Chunk == NULL) || !Chunk->IsValid())
|
||||
{
|
||||
if (!IsValid())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
int BlockIdx = cChunkDef::MakeIndexNoCheck(a_RelX, a_RelY, a_RelZ);
|
||||
a_BlockType = GetBlock(BlockIdx);
|
||||
a_BlockMeta = GetMeta(BlockIdx);
|
||||
return true;
|
||||
// The chunk is not available, bail out
|
||||
return false;
|
||||
}
|
||||
|
||||
// Not in this chunk, try walking the neighbors first:
|
||||
if ((a_RelX < 0) && (m_NeighborXM != NULL))
|
||||
{
|
||||
return m_NeighborXM->UnboundedRelGetBlock(a_RelX + cChunkDef::Width, a_RelY, a_RelZ, a_BlockType, a_BlockMeta);
|
||||
}
|
||||
if ((a_RelX >= cChunkDef::Width) && (m_NeighborXP != NULL))
|
||||
{
|
||||
return m_NeighborXP->UnboundedRelGetBlock(a_RelX - cChunkDef::Width, a_RelY, a_RelZ, a_BlockType, a_BlockMeta);
|
||||
}
|
||||
if ((a_RelZ < 0) && (m_NeighborZM != NULL))
|
||||
{
|
||||
return m_NeighborZM->UnboundedRelGetBlock(a_RelX, a_RelY, a_RelZ + cChunkDef::Width, a_BlockType, a_BlockMeta);
|
||||
}
|
||||
if ((a_RelZ >= cChunkDef::Width) && (m_NeighborZP != NULL))
|
||||
{
|
||||
return m_NeighborZP->UnboundedRelGetBlock(a_RelX, a_RelY, a_RelZ - cChunkDef::Width, a_BlockType, a_BlockMeta);
|
||||
}
|
||||
|
||||
// Neighbors not available, use the chunkmap to locate the chunk:
|
||||
return m_ChunkMap->LockedGetBlock(
|
||||
m_PosX * cChunkDef::Width + a_RelX,
|
||||
ZERO_CHUNK_Y * cChunkDef::Height + a_RelY,
|
||||
m_PosZ * cChunkDef::Width + a_RelZ,
|
||||
a_BlockType, a_BlockMeta
|
||||
);
|
||||
Chunk->GetBlockTypeMeta(a_RelX, a_RelY, a_RelZ, a_BlockType, a_BlockMeta);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@ -1117,44 +1086,14 @@ bool cChunk::UnboundedRelGetBlockType(int a_RelX, int a_RelY, int a_RelZ, BLOCKT
|
||||
LOGWARNING("%s: requesting a block with a_RelY out of range: %d", __FUNCTION__, a_RelY);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Is it in this chunk?
|
||||
if ((a_RelX >= 0) && (a_RelX < cChunkDef::Width) && (a_RelZ >= 0) && (a_RelZ < cChunkDef::Width))
|
||||
cChunk * Chunk = GetRelNeighborChunkAdjustCoords(a_RelX, a_RelZ);
|
||||
if ((Chunk == NULL) || !Chunk->IsValid())
|
||||
{
|
||||
if (!IsValid())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
int BlockIdx = cChunkDef::MakeIndexNoCheck(a_RelX, a_RelY, a_RelZ);
|
||||
a_BlockType = GetBlock(BlockIdx);
|
||||
return true;
|
||||
// The chunk is not available, bail out
|
||||
return false;
|
||||
}
|
||||
|
||||
// Not in this chunk, try walking the neighbors first:
|
||||
if ((a_RelX < 0) && (m_NeighborXM != NULL))
|
||||
{
|
||||
return m_NeighborXM->UnboundedRelGetBlockType(a_RelX + cChunkDef::Width, a_RelY, a_RelZ, a_BlockType);
|
||||
}
|
||||
if ((a_RelX >= cChunkDef::Width) && (m_NeighborXP != NULL))
|
||||
{
|
||||
return m_NeighborXP->UnboundedRelGetBlockType(a_RelX - cChunkDef::Width, a_RelY, a_RelZ, a_BlockType);
|
||||
}
|
||||
if ((a_RelZ < 0) && (m_NeighborZM != NULL))
|
||||
{
|
||||
return m_NeighborZM->UnboundedRelGetBlockType(a_RelX, a_RelY, a_RelZ + cChunkDef::Width, a_BlockType);
|
||||
}
|
||||
if ((a_RelZ >= cChunkDef::Width) && (m_NeighborZP != NULL))
|
||||
{
|
||||
return m_NeighborZP->UnboundedRelGetBlockType(a_RelX, a_RelY, a_RelZ - cChunkDef::Width, a_BlockType);
|
||||
}
|
||||
|
||||
// Neighbors not available, use the chunkmap to locate the chunk:
|
||||
return m_ChunkMap->LockedGetBlockType(
|
||||
m_PosX * cChunkDef::Width + a_RelX,
|
||||
ZERO_CHUNK_Y * cChunkDef::Height + a_RelY,
|
||||
m_PosZ * cChunkDef::Width + a_RelZ,
|
||||
a_BlockType
|
||||
);
|
||||
a_BlockType = Chunk->GetBlock(a_RelX, a_RelY, a_RelZ);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@ -1168,44 +1107,56 @@ bool cChunk::UnboundedRelGetBlockMeta(int a_RelX, int a_RelY, int a_RelZ, NIBBLE
|
||||
LOGWARNING("%s: requesting a block with a_RelY out of range: %d", __FUNCTION__, a_RelY);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Is it in this chunk?
|
||||
if ((a_RelX >= 0) && (a_RelX < cChunkDef::Width) && (a_RelZ >= 0) && (a_RelZ < cChunkDef::Width))
|
||||
cChunk * Chunk = GetRelNeighborChunkAdjustCoords(a_RelX, a_RelZ);
|
||||
if ((Chunk == NULL) || !Chunk->IsValid())
|
||||
{
|
||||
if (!IsValid())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
int BlockIdx = cChunkDef::MakeIndexNoCheck(a_RelX, a_RelY, a_RelZ);
|
||||
a_BlockMeta = GetMeta(BlockIdx);
|
||||
return true;
|
||||
// The chunk is not available, bail out
|
||||
return false;
|
||||
}
|
||||
a_BlockMeta = Chunk->GetMeta(a_RelX, a_RelY, a_RelZ);
|
||||
return true;
|
||||
}
|
||||
|
||||
// Not in this chunk, try walking the neighbors first:
|
||||
if ((a_RelX < 0) && (m_NeighborXM != NULL))
|
||||
{
|
||||
return m_NeighborXM->UnboundedRelGetBlockMeta(a_RelX + cChunkDef::Width, a_RelY, a_RelZ, a_BlockMeta);
|
||||
}
|
||||
if ((a_RelX >= cChunkDef::Width) && (m_NeighborXP != NULL))
|
||||
{
|
||||
return m_NeighborXP->UnboundedRelGetBlockMeta(a_RelX - cChunkDef::Width, a_RelY, a_RelZ, a_BlockMeta);
|
||||
}
|
||||
if ((a_RelZ < 0) && (m_NeighborZM != NULL))
|
||||
{
|
||||
return m_NeighborZM->UnboundedRelGetBlockMeta(a_RelX, a_RelY, a_RelZ + cChunkDef::Width, a_BlockMeta);
|
||||
}
|
||||
if ((a_RelZ >= cChunkDef::Width) && (m_NeighborZP != NULL))
|
||||
{
|
||||
return m_NeighborZP->UnboundedRelGetBlockMeta(a_RelX, a_RelY, a_RelZ - cChunkDef::Width, a_BlockMeta);
|
||||
}
|
||||
|
||||
// Neighbors not available, use the chunkmap to locate the chunk:
|
||||
return m_ChunkMap->LockedGetBlockMeta(
|
||||
m_PosX * cChunkDef::Width + a_RelX,
|
||||
ZERO_CHUNK_Y * cChunkDef::Height + a_RelY,
|
||||
m_PosZ * cChunkDef::Width + a_RelZ,
|
||||
a_BlockMeta
|
||||
);
|
||||
|
||||
|
||||
|
||||
bool cChunk::UnboundedRelGetBlockBlockLight(int a_RelX, int a_RelY, int a_RelZ, NIBBLETYPE & a_BlockBlockLight) const
|
||||
{
|
||||
if ((a_RelY < 0) || (a_RelY >= cChunkDef::Height))
|
||||
{
|
||||
LOGWARNING("%s: requesting a block with a_RelY out of range: %d", __FUNCTION__, a_RelY);
|
||||
return false;
|
||||
}
|
||||
cChunk * Chunk = GetRelNeighborChunkAdjustCoords(a_RelX, a_RelZ);
|
||||
if ((Chunk == NULL) || !Chunk->IsValid())
|
||||
{
|
||||
// The chunk is not available, bail out
|
||||
return false;
|
||||
}
|
||||
a_BlockBlockLight = Chunk->GetBlockLight(a_RelX, a_RelY, a_RelZ);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
bool cChunk::UnboundedRelGetBlockSkyLight(int a_RelX, int a_RelY, int a_RelZ, NIBBLETYPE & a_BlockSkyLight) const
|
||||
{
|
||||
if ((a_RelY < 0) || (a_RelY >= cChunkDef::Height))
|
||||
{
|
||||
LOGWARNING("%s: requesting a block with a_RelY out of range: %d", __FUNCTION__, a_RelY);
|
||||
return false;
|
||||
}
|
||||
cChunk * Chunk = GetRelNeighborChunkAdjustCoords(a_RelX, a_RelZ);
|
||||
if ((Chunk == NULL) || !Chunk->IsValid())
|
||||
{
|
||||
// The chunk is not available, bail out
|
||||
return false;
|
||||
}
|
||||
a_BlockSkyLight = Chunk->GetSkyLight(a_RelX, a_RelY, a_RelZ);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@ -1219,44 +1170,15 @@ bool cChunk::UnboundedRelSetBlock(int a_RelX, int a_RelY, int a_RelZ, BLOCKTYPE
|
||||
LOGWARNING("UnboundedRelSetBlock(): requesting a block with a_RelY out of range: %d", a_RelY);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Is it in this chunk?
|
||||
if ((a_RelX >= 0) && (a_RelX < cChunkDef::Width) && (a_RelZ >= 0) && (a_RelZ < cChunkDef::Width))
|
||||
cChunk * Chunk = GetRelNeighborChunkAdjustCoords(a_RelX, a_RelZ);
|
||||
if ((Chunk == NULL) || !Chunk->IsValid())
|
||||
{
|
||||
if (!IsValid())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
SetBlock(a_RelX, a_RelY, a_RelZ, a_BlockType, a_BlockMeta);
|
||||
return true;
|
||||
// The chunk is not available, bail out
|
||||
return false;
|
||||
}
|
||||
|
||||
// Not in this chunk, try walking the neighbors first:
|
||||
if ((a_RelX < 0) && (m_NeighborXM != NULL))
|
||||
{
|
||||
return m_NeighborXM->UnboundedRelSetBlock(a_RelX + cChunkDef::Width, a_RelY, a_RelZ, a_BlockType, a_BlockMeta);
|
||||
}
|
||||
if ((a_RelX >= cChunkDef::Width) && (m_NeighborXP != NULL))
|
||||
{
|
||||
return m_NeighborXP->UnboundedRelSetBlock(a_RelX - cChunkDef::Width, a_RelY, a_RelZ, a_BlockType, a_BlockMeta);
|
||||
}
|
||||
if ((a_RelZ < 0) && (m_NeighborZM != NULL))
|
||||
{
|
||||
return m_NeighborZM->UnboundedRelSetBlock(a_RelX, a_RelY, a_RelZ + cChunkDef::Width, a_BlockType, a_BlockMeta);
|
||||
}
|
||||
if ((a_RelZ >= cChunkDef::Width) && (m_NeighborZP != NULL))
|
||||
{
|
||||
return m_NeighborZP->UnboundedRelSetBlock(a_RelX, a_RelY, a_RelZ - cChunkDef::Width, a_BlockType, a_BlockMeta);
|
||||
}
|
||||
|
||||
// Neighbors not available, use the chunkmap to locate the chunk:
|
||||
return m_ChunkMap->LockedSetBlock(
|
||||
m_PosX * cChunkDef::Width + a_RelX,
|
||||
ZERO_CHUNK_Y * cChunkDef::Height + a_RelY,
|
||||
m_PosZ * cChunkDef::Width + a_RelZ,
|
||||
a_BlockType, a_BlockMeta
|
||||
);
|
||||
}
|
||||
Chunk->SetBlock(a_RelX, a_RelY, a_RelZ, a_BlockType, a_BlockMeta);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -1269,43 +1191,14 @@ bool cChunk::UnboundedRelFastSetBlock(int a_RelX, int a_RelY, int a_RelZ, BLOCKT
|
||||
LOGWARNING("UnboundedRelFastSetBlock(): requesting a block with a_RelY out of range: %d", a_RelY);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Is it in this chunk?
|
||||
if ((a_RelX >= 0) && (a_RelX < cChunkDef::Width) && (a_RelZ >= 0) && (a_RelZ < cChunkDef::Width))
|
||||
cChunk * Chunk = GetRelNeighborChunkAdjustCoords(a_RelX, a_RelZ);
|
||||
if ((Chunk == NULL) || !Chunk->IsValid())
|
||||
{
|
||||
if (!IsValid())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
FastSetBlock(a_RelX, a_RelY, a_RelZ, a_BlockType, a_BlockMeta);
|
||||
return true;
|
||||
// The chunk is not available, bail out
|
||||
return false;
|
||||
}
|
||||
|
||||
// Not in this chunk, try walking the neighbors first:
|
||||
if ((a_RelX < 0) && (m_NeighborXM != NULL))
|
||||
{
|
||||
return m_NeighborXM->UnboundedRelFastSetBlock(a_RelX + cChunkDef::Width, a_RelY, a_RelZ, a_BlockType, a_BlockMeta);
|
||||
}
|
||||
if ((a_RelX >= cChunkDef::Width) && (m_NeighborXP != NULL))
|
||||
{
|
||||
return m_NeighborXP->UnboundedRelFastSetBlock(a_RelX - cChunkDef::Width, a_RelY, a_RelZ, a_BlockType, a_BlockMeta);
|
||||
}
|
||||
if ((a_RelZ < 0) && (m_NeighborZM != NULL))
|
||||
{
|
||||
return m_NeighborZM->UnboundedRelFastSetBlock(a_RelX, a_RelY, a_RelZ + cChunkDef::Width, a_BlockType, a_BlockMeta);
|
||||
}
|
||||
if ((a_RelZ >= cChunkDef::Width) && (m_NeighborZP != NULL))
|
||||
{
|
||||
return m_NeighborZP->UnboundedRelFastSetBlock(a_RelX, a_RelY, a_RelZ - cChunkDef::Width, a_BlockType, a_BlockMeta);
|
||||
}
|
||||
|
||||
// Neighbors not available, use the chunkmap to locate the chunk:
|
||||
return m_ChunkMap->LockedFastSetBlock(
|
||||
m_PosX * cChunkDef::Width + a_RelX,
|
||||
ZERO_CHUNK_Y * cChunkDef::Height + a_RelY,
|
||||
m_PosZ * cChunkDef::Width + a_RelZ,
|
||||
a_BlockType, a_BlockMeta
|
||||
);
|
||||
Chunk->FastSetBlock(a_RelX, a_RelY, a_RelZ, a_BlockType, a_BlockMeta);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@ -1319,44 +1212,18 @@ void cChunk::UnboundedQueueTickBlock(int a_RelX, int a_RelY, int a_RelZ)
|
||||
// Outside of chunkmap
|
||||
return;
|
||||
}
|
||||
|
||||
// Is it in this chunk?
|
||||
if ((a_RelX >= 0) && (a_RelX < cChunkDef::Width) && (a_RelZ >= 0) && (a_RelZ < cChunkDef::Width))
|
||||
cChunk * Chunk = GetRelNeighborChunkAdjustCoords(a_RelX, a_RelZ);
|
||||
if ((Chunk != NULL) && Chunk->IsValid())
|
||||
{
|
||||
QueueTickBlock(a_RelX, a_RelY, a_RelZ);
|
||||
return;
|
||||
Chunk->QueueTickBlock(a_RelX, a_RelY, a_RelZ);
|
||||
}
|
||||
|
||||
// Not in this chunk, try walking the neighbors first:
|
||||
if ((a_RelX < 0) && (m_NeighborXM != NULL))
|
||||
{
|
||||
m_NeighborXM->UnboundedQueueTickBlock(a_RelX + cChunkDef::Width, a_RelY, a_RelZ);
|
||||
return;
|
||||
}
|
||||
if ((a_RelX >= cChunkDef::Width) && (m_NeighborXP != NULL))
|
||||
{
|
||||
m_NeighborXP->UnboundedQueueTickBlock(a_RelX - cChunkDef::Width, a_RelY, a_RelZ);
|
||||
return;
|
||||
}
|
||||
if ((a_RelZ < 0) && (m_NeighborZM != NULL))
|
||||
{
|
||||
m_NeighborZM->UnboundedQueueTickBlock(a_RelX, a_RelY, a_RelZ + cChunkDef::Width);
|
||||
return;
|
||||
}
|
||||
if ((a_RelZ >= cChunkDef::Width) && (m_NeighborZP != NULL))
|
||||
{
|
||||
m_NeighborZP->UnboundedQueueTickBlock(a_RelX, a_RelY, a_RelZ - cChunkDef::Width);
|
||||
return;
|
||||
}
|
||||
|
||||
// Neighbors not available, ignore altogether
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
int cChunk::GetHeight( int a_X, int a_Z )
|
||||
int cChunk::GetHeight(int a_X, int a_Z)
|
||||
{
|
||||
ASSERT((a_X >= 0) && (a_X < Width) && (a_Z >= 0) && (a_Z < Width));
|
||||
|
||||
@ -2482,66 +2349,58 @@ cChunk * cChunk::GetRelNeighborChunk(int a_RelX, int a_RelZ)
|
||||
|
||||
|
||||
|
||||
cChunk * cChunk::GetRelNeighborChunkAdjustCoords(int & a_RelX, int & a_RelZ)
|
||||
cChunk * cChunk::GetRelNeighborChunkAdjustCoords(int & a_RelX, int & a_RelZ) const
|
||||
{
|
||||
bool ReturnThis = true;
|
||||
int RelX = a_RelX;
|
||||
cChunk * ToReturn = const_cast<cChunk *>(this);
|
||||
|
||||
// The most common case: inside this chunk:
|
||||
if (
|
||||
(a_RelX >= 0) && (a_RelX < Width) &&
|
||||
(a_RelZ >= 0) && (a_RelZ < Width)
|
||||
)
|
||||
{
|
||||
return ToReturn;
|
||||
}
|
||||
|
||||
// Request for a different chunk, calculate chunk offset:
|
||||
int RelX = a_RelX; // Make a local copy of the coords (faster access)
|
||||
int RelZ = a_RelZ;
|
||||
if (a_RelX < 0)
|
||||
while ((RelX >= Width) && (ToReturn != NULL))
|
||||
{
|
||||
if (m_NeighborXM != NULL)
|
||||
{
|
||||
RelX = a_RelX + cChunkDef::Width;
|
||||
cChunk * Candidate = m_NeighborXM->GetRelNeighborChunkAdjustCoords(RelX, RelZ);
|
||||
if (Candidate != NULL)
|
||||
{
|
||||
a_RelX = RelX;
|
||||
a_RelZ = RelZ;
|
||||
return Candidate;
|
||||
}
|
||||
}
|
||||
// Going X-first failed, but if the request is crossing Z as well, let's try the Z-first later on.
|
||||
ReturnThis = false;
|
||||
RelX -= Width;
|
||||
ToReturn = ToReturn->m_NeighborXP;
|
||||
}
|
||||
else if (a_RelX >= cChunkDef::Width)
|
||||
while ((RelX < 0) && (ToReturn != NULL))
|
||||
{
|
||||
if (m_NeighborXP != NULL)
|
||||
{
|
||||
RelX = a_RelX - cChunkDef::Width;
|
||||
cChunk * Candidate = m_NeighborXP->GetRelNeighborChunkAdjustCoords(RelX, RelZ);
|
||||
if (Candidate != NULL)
|
||||
{
|
||||
a_RelX = RelX;
|
||||
a_RelZ = RelZ;
|
||||
return Candidate;
|
||||
}
|
||||
}
|
||||
// Going X-first failed, but if the request is crossing Z as well, let's try the Z-first later on.
|
||||
ReturnThis = false;
|
||||
RelX += Width;
|
||||
ToReturn = ToReturn->m_NeighborXM;
|
||||
}
|
||||
while ((RelZ >= Width) && (ToReturn != NULL))
|
||||
{
|
||||
RelZ -= Width;
|
||||
ToReturn = ToReturn->m_NeighborZP;
|
||||
}
|
||||
while ((RelZ < 0) && (ToReturn != NULL))
|
||||
{
|
||||
RelZ += Width;
|
||||
ToReturn = ToReturn->m_NeighborZM;
|
||||
}
|
||||
if (ToReturn != NULL)
|
||||
{
|
||||
a_RelX = RelX;
|
||||
a_RelZ = RelZ;
|
||||
return ToReturn;
|
||||
}
|
||||
|
||||
if (a_RelZ < 0)
|
||||
{
|
||||
if (m_NeighborZM != NULL)
|
||||
{
|
||||
a_RelZ += cChunkDef::Width;
|
||||
return m_NeighborZM->GetRelNeighborChunkAdjustCoords(a_RelX, a_RelZ);
|
||||
// For requests crossing both X and Z, the X-first way has been already tried
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
else if (a_RelZ >= cChunkDef::Width)
|
||||
{
|
||||
if (m_NeighborZP != NULL)
|
||||
{
|
||||
a_RelZ -= cChunkDef::Width;
|
||||
return m_NeighborZP->GetRelNeighborChunkAdjustCoords(a_RelX, a_RelZ);
|
||||
// For requests crossing both X and Z, the X-first way has been already tried
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return (ReturnThis ? this : NULL);
|
||||
// The chunk cannot be walked through neighbors, find it through the chunkmap:
|
||||
int AbsX = a_RelX + m_PosX * Width;
|
||||
int AbsZ = a_RelZ + m_PosZ * Width;
|
||||
int DstChunkX, DstChunkZ;
|
||||
BlockToChunk(AbsX, AbsZ, DstChunkX, DstChunkZ);
|
||||
ToReturn = m_ChunkMap->FindChunk(DstChunkX, DstChunkZ);
|
||||
a_RelX = AbsX - DstChunkX * Width;
|
||||
a_RelZ = AbsZ - DstChunkZ * Width;
|
||||
return ToReturn;
|
||||
}
|
||||
|
||||
|
||||
|
@ -171,11 +171,12 @@ public:
|
||||
cChunk * GetRelNeighborChunk(int a_RelX, int a_RelZ);
|
||||
|
||||
/**
|
||||
Returns the chunk into which the relatively-specified block belongs, by walking the neighbors.
|
||||
Returns the chunk into which the relatively-specified block belongs.
|
||||
Also modifies the relative coords from this-relative to return-relative.
|
||||
Will return self if appropriate. Returns NULL if not reachable through neighbors.
|
||||
Will return self if appropriate.
|
||||
Will try walking the neighbors first; if that fails, will query the chunkmap
|
||||
*/
|
||||
cChunk * GetRelNeighborChunkAdjustCoords(int & a_RelX, int & a_RelZ);
|
||||
cChunk * GetRelNeighborChunkAdjustCoords(int & a_RelX, int & a_RelZ) const;
|
||||
|
||||
EMCSBiome GetBiomeAt(int a_RelX, int a_RelZ) const {return cChunkDef::GetBiome(m_BiomeMap, a_RelX, a_RelZ); }
|
||||
|
||||
@ -299,19 +300,25 @@ public:
|
||||
inline NIBBLETYPE GetBlockLight(int a_RelX, int a_RelY, int a_RelZ) const {return cChunkDef::GetNibble(m_BlockLight, a_RelX, a_RelY, a_RelZ); }
|
||||
inline NIBBLETYPE GetSkyLight (int a_RelX, int a_RelY, int a_RelZ) const {return cChunkDef::GetNibble(m_BlockSkyLight, a_RelX, a_RelY, a_RelZ); }
|
||||
|
||||
/// Same as GetBlock(), but relative coords needn't be in this chunk (uses m_Neighbor-s or m_ChunkMap in such a case); returns true on success; only usable in Tick()
|
||||
/// Same as GetBlock(), but relative coords needn't be in this chunk (uses m_Neighbor-s or m_ChunkMap in such a case); returns true on success
|
||||
bool UnboundedRelGetBlock(int a_RelX, int a_RelY, int a_RelZ, BLOCKTYPE & a_BlockType, NIBBLETYPE & a_BlockMeta) const;
|
||||
|
||||
/// Same as GetBlockType(), but relative coords needn't be in this chunk (uses m_Neighbor-s or m_ChunkMap in such a case); returns true on success; only usable in Tick()
|
||||
/// Same as GetBlockType(), but relative coords needn't be in this chunk (uses m_Neighbor-s or m_ChunkMap in such a case); returns true on success
|
||||
bool UnboundedRelGetBlockType(int a_RelX, int a_RelY, int a_RelZ, BLOCKTYPE & a_BlockType) const;
|
||||
|
||||
/// Same as GetBlockMeta(), but relative coords needn't be in this chunk (uses m_Neighbor-s or m_ChunkMap in such a case); returns true on success; only usable in Tick()
|
||||
/// Same as GetBlockMeta(), but relative coords needn't be in this chunk (uses m_Neighbor-s or m_ChunkMap in such a case); returns true on success
|
||||
bool UnboundedRelGetBlockMeta(int a_RelX, int a_RelY, int a_RelZ, NIBBLETYPE & a_BlockMeta) const;
|
||||
|
||||
/// Same as SetBlock(), but relative coords needn't be in this chunk (uses m_Neighbor-s or m_ChunkMap in such a case); returns true on success; only usable in Tick()
|
||||
/// Same as GetBlockBlockLight(), but relative coords needn't be in this chunk (uses m_Neighbor-s or m_ChunkMap in such a case); returns true on success
|
||||
bool UnboundedRelGetBlockBlockLight(int a_RelX, int a_RelY, int a_RelZ, NIBBLETYPE & a_BlockLight) const;
|
||||
|
||||
/// Same as GetBlockSkyLight(), but relative coords needn't be in this chunk (uses m_Neighbor-s or m_ChunkMap in such a case); returns true on success
|
||||
bool UnboundedRelGetBlockSkyLight(int a_RelX, int a_RelY, int a_RelZ, NIBBLETYPE & a_SkyLight) const;
|
||||
|
||||
/// Same as SetBlock(), but relative coords needn't be in this chunk (uses m_Neighbor-s or m_ChunkMap in such a case); returns true on success
|
||||
bool UnboundedRelSetBlock(int a_RelX, int a_RelY, int a_RelZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta);
|
||||
|
||||
/// Same as FastSetBlock(), but relative coords needn't be in this chunk (uses m_Neighbor-s or m_ChunkMap in such a case); returns true on success; only usable in Tick()
|
||||
/// Same as FastSetBlock(), but relative coords needn't be in this chunk (uses m_Neighbor-s or m_ChunkMap in such a case); returns true on success
|
||||
bool UnboundedRelFastSetBlock(int a_RelX, int a_RelY, int a_RelZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta);
|
||||
|
||||
/// Same as QueueTickBlock(), but relative coords needn't be in this chunk (uses m_Neighbor-s in such a case), ignores unsuccessful attempts
|
||||
|
@ -208,10 +208,15 @@ public:
|
||||
|
||||
inline static unsigned int MakeIndex(int x, int y, int z )
|
||||
{
|
||||
if( x < cChunkDef::Width && x > -1 && y < cChunkDef::Height && y > -1 && z < cChunkDef::Width && z > -1 )
|
||||
if (
|
||||
(x < Width) && (x > -1) &&
|
||||
(y < Height) && (y > -1) &&
|
||||
(z < Width) && (z > -1)
|
||||
)
|
||||
{
|
||||
return MakeIndexNoCheck(x, y, z);
|
||||
}
|
||||
ASSERT(!"cChunkDef::MakeIndex(): coords out of chunk range!");
|
||||
return INDEX_OUT_OF_RANGE;
|
||||
}
|
||||
|
||||
@ -256,6 +261,7 @@ public:
|
||||
|
||||
inline static void SetBlock(BLOCKTYPE * a_BlockTypes, int a_Index, BLOCKTYPE a_Type)
|
||||
{
|
||||
ASSERT((a_Index >= 0) && (a_Index <= NumBlocks));
|
||||
a_BlockTypes[a_Index] = a_Type;
|
||||
}
|
||||
|
||||
@ -271,41 +277,50 @@ public:
|
||||
|
||||
inline static BLOCKTYPE GetBlock(const BLOCKTYPE * a_BlockTypes, int a_Idx)
|
||||
{
|
||||
ASSERT((a_Idx >= 0) && (a_Idx < Width * Width * Height));
|
||||
ASSERT((a_Idx >= 0) && (a_Idx < NumBlocks));
|
||||
return a_BlockTypes[a_Idx];
|
||||
}
|
||||
|
||||
|
||||
inline static int GetHeight(const HeightMap & a_HeightMap, int a_X, int a_Z)
|
||||
{
|
||||
ASSERT((a_X >= 0) && (a_X <= Width));
|
||||
ASSERT((a_Z >= 0) && (a_Z <= Width));
|
||||
return a_HeightMap[a_X + Width * a_Z];
|
||||
}
|
||||
|
||||
|
||||
inline static void SetHeight(HeightMap & a_HeightMap, int a_X, int a_Z, unsigned char a_Height)
|
||||
{
|
||||
ASSERT((a_X >= 0) && (a_X <= Width));
|
||||
ASSERT((a_Z >= 0) && (a_Z <= Width));
|
||||
a_HeightMap[a_X + Width * a_Z] = a_Height;
|
||||
}
|
||||
|
||||
|
||||
inline static EMCSBiome GetBiome(const BiomeMap & a_BiomeMap, int a_X, int a_Z)
|
||||
{
|
||||
ASSERT((a_X >= 0) && (a_X <= Width));
|
||||
ASSERT((a_Z >= 0) && (a_Z <= Width));
|
||||
return a_BiomeMap[a_X + Width * a_Z];
|
||||
}
|
||||
|
||||
|
||||
inline static void SetBiome(BiomeMap & a_BiomeMap, int a_X, int a_Z, EMCSBiome a_Biome)
|
||||
{
|
||||
ASSERT((a_X >= 0) && (a_X <= Width));
|
||||
ASSERT((a_Z >= 0) && (a_Z <= Width));
|
||||
a_BiomeMap[a_X + Width * a_Z] = a_Biome;
|
||||
}
|
||||
|
||||
|
||||
static NIBBLETYPE GetNibble(const NIBBLETYPE * a_Buffer, int a_BlockIdx)
|
||||
{
|
||||
if ((a_BlockIdx > -1) && (a_BlockIdx < cChunkDef::NumBlocks))
|
||||
if ((a_BlockIdx > -1) && (a_BlockIdx < NumBlocks))
|
||||
{
|
||||
return (a_Buffer[a_BlockIdx / 2] >> ((a_BlockIdx & 1) * 4)) & 0x0f;
|
||||
}
|
||||
ASSERT(!"cChunkDef::GetNibble(): index out of chunk range!");
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -317,38 +332,48 @@ public:
|
||||
int Index = MakeIndexNoCheck(x, y, z);
|
||||
return (a_Buffer[Index / 2] >> ((Index & 1) * 4)) & 0x0f;
|
||||
}
|
||||
ASSERT(!"cChunkDef::GetNibble(): coords out of chunk range!");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static void SetNibble(NIBBLETYPE * a_Buffer, int a_BlockIdx, NIBBLETYPE a_Nibble)
|
||||
{
|
||||
if ((a_BlockIdx > -1) && (a_BlockIdx < cChunkDef::NumBlocks))
|
||||
if ((a_BlockIdx < 0) || (a_BlockIdx >= NumBlocks))
|
||||
{
|
||||
a_Buffer[a_BlockIdx / 2] = (
|
||||
(a_Buffer[a_BlockIdx / 2] & (0xf0 >> ((a_BlockIdx & 1) * 4))) | // The untouched nibble
|
||||
((a_Nibble & 0x0f) << ((a_BlockIdx & 1) * 4)) // The nibble being set
|
||||
);
|
||||
ASSERT(!"cChunkDef::SetNibble(): index out of range!");
|
||||
return;
|
||||
}
|
||||
a_Buffer[a_BlockIdx / 2] = (
|
||||
(a_Buffer[a_BlockIdx / 2] & (0xf0 >> ((a_BlockIdx & 1) * 4))) | // The untouched nibble
|
||||
((a_Nibble & 0x0f) << ((a_BlockIdx & 1) * 4)) // The nibble being set
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
static void SetNibble(NIBBLETYPE * a_Buffer, int x, int y, int z, NIBBLETYPE a_Nibble)
|
||||
{
|
||||
if ((x < cChunkDef::Width) && (x > -1) && (y < cChunkDef::Height) && (y > -1) && (z < cChunkDef::Width) && (z > -1))
|
||||
if (
|
||||
(x >= Width) || (x < 0) ||
|
||||
(y >= Height) || (y < 0) ||
|
||||
(z >= Width) || (z < 0)
|
||||
)
|
||||
{
|
||||
int Index = MakeIndexNoCheck(x, y, z);
|
||||
a_Buffer[Index / 2] = (
|
||||
(a_Buffer[Index / 2] & (0xf0 >> ((Index & 1) * 4))) | // The untouched nibble
|
||||
((a_Nibble & 0x0f) << ((Index & 1) * 4)) // The nibble being set
|
||||
);
|
||||
ASSERT(!"cChunkDef::SetNibble(): index out of range!");
|
||||
return;
|
||||
}
|
||||
|
||||
int Index = MakeIndexNoCheck(x, y, z);
|
||||
a_Buffer[Index / 2] = (
|
||||
(a_Buffer[Index / 2] & (0xf0 >> ((Index & 1) * 4))) | // The untouched nibble
|
||||
((a_Nibble & 0x0f) << ((Index & 1) * 4)) // The nibble being set
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
inline static char GetNibble(const NIBBLETYPE * a_Buffer, const Vector3i & a_BlockPos )
|
||||
{
|
||||
return GetNibble( a_Buffer, a_BlockPos.x, a_BlockPos.y, a_BlockPos.z );
|
||||
return GetNibble(a_Buffer, a_BlockPos.x, a_BlockPos.y, a_BlockPos.z );
|
||||
}
|
||||
|
||||
|
||||
|
@ -23,8 +23,6 @@ class cPluginLua;
|
||||
|
||||
|
||||
|
||||
// tolua_begin
|
||||
|
||||
/** A window that has been created by a Lua plugin and is handled entirely by that plugin
|
||||
This object needs extra care with its lifetime management:
|
||||
- It is created by Lua, so Lua expects to garbage-collect it later
|
||||
@ -35,9 +33,10 @@ Additionally, to forbid Lua from deleting this object while it is used by player
|
||||
cPlayer:OpenWindow check if the window is of this class, and if so, make a global Lua reference for this object.
|
||||
This reference needs to be unreferenced in the Destroy() function.
|
||||
*/
|
||||
class cLuaWindow :
|
||||
public cWindow,
|
||||
public cItemGrid::cListener
|
||||
class cLuaWindow : // tolua_export
|
||||
public cItemGrid::cListener,
|
||||
// tolua_begin
|
||||
public cWindow
|
||||
{
|
||||
typedef cWindow super;
|
||||
|
||||
|
@ -17,6 +17,7 @@
|
||||
#include "BlockEntities/DispenserEntity.h"
|
||||
#include "BlockEntities/DropperEntity.h"
|
||||
#include "BlockEntities/FurnaceEntity.h"
|
||||
#include "BlockEntities/HopperEntity.h"
|
||||
#include "md5/md5.h"
|
||||
#include "LuaWindow.h"
|
||||
#include "LineBlockTracer.h"
|
||||
@ -2059,6 +2060,45 @@ static int tolua_cLineBlockTracer_Trace(lua_State * tolua_S)
|
||||
|
||||
|
||||
|
||||
static int tolua_cHopperEntity_GetOutputBlockPos(lua_State * tolua_S)
|
||||
{
|
||||
// function cHopperEntity::GetOutputBlockPos()
|
||||
// Exported manually because tolua would require meaningless params
|
||||
|
||||
cLuaState L(tolua_S);
|
||||
if (
|
||||
!L.CheckParamUserType(1, "cHopperEntity") ||
|
||||
!L.CheckParamNumber (2) ||
|
||||
!L.CheckParamEnd (3)
|
||||
)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
cHopperEntity * self = (cHopperEntity *)tolua_tousertype(tolua_S, 1, 0);
|
||||
if (self == NULL)
|
||||
{
|
||||
tolua_error(tolua_S, "invalid 'self' in function 'cHopperEntity::GetOutputBlockPos()'", NULL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
NIBBLETYPE a_BlockMeta = ((NIBBLETYPE)tolua_tonumber(tolua_S, 2, 0));
|
||||
int a_OutputX, a_OutputY, a_OutputZ;
|
||||
bool res = self->GetOutputBlockPos(a_BlockMeta, a_OutputX, a_OutputY, a_OutputZ);
|
||||
tolua_pushboolean(tolua_S, res);
|
||||
if (res)
|
||||
{
|
||||
tolua_pushnumber(tolua_S, (lua_Number)a_OutputX);
|
||||
tolua_pushnumber(tolua_S, (lua_Number)a_OutputY);
|
||||
tolua_pushnumber(tolua_S, (lua_Number)a_OutputZ);
|
||||
return 4;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void ManualBindings::Bind(lua_State * tolua_S)
|
||||
{
|
||||
tolua_beginmodule(tolua_S, NULL);
|
||||
@ -2070,6 +2110,10 @@ void ManualBindings::Bind(lua_State * tolua_S)
|
||||
tolua_function(tolua_S, "LOGWARNING", tolua_LOGWARN);
|
||||
tolua_function(tolua_S, "LOGERROR", tolua_LOGERROR);
|
||||
|
||||
tolua_beginmodule(tolua_S, "cHopperEntity");
|
||||
tolua_function(tolua_S, "GetOutputBlockPos", tolua_cHopperEntity_GetOutputBlockPos);
|
||||
tolua_endmodule(tolua_S);
|
||||
|
||||
tolua_beginmodule(tolua_S, "cLineBlockTracer");
|
||||
tolua_function(tolua_S, "Trace", tolua_cLineBlockTracer_Trace);
|
||||
tolua_endmodule(tolua_S);
|
||||
|
@ -718,8 +718,8 @@ void cMonster::HandleDaylightBurning(cChunk & a_Chunk)
|
||||
return;
|
||||
}
|
||||
|
||||
int RelX = (int)floor(GetPosX()) - a_Chunk.GetPosX() * cChunkDef::Width;
|
||||
int RelZ = (int)floor(GetPosZ()) - a_Chunk.GetPosZ() * cChunkDef::Width;
|
||||
int RelX = (int)floor(GetPosX()) - GetChunkX() * cChunkDef::Width;
|
||||
int RelZ = (int)floor(GetPosZ()) - GetChunkZ() * cChunkDef::Width;
|
||||
if (
|
||||
(a_Chunk.GetSkyLight(RelX, RelY, RelZ) == 15) && // In the daylight
|
||||
(a_Chunk.GetBlock(RelX, RelY, RelZ) != E_BLOCK_SOULSAND) && // Not on soulsand
|
||||
|
@ -727,7 +727,7 @@ bool cProtocolRecognizer::TryRecognizeProtocol(void)
|
||||
void cProtocolRecognizer::HandleServerPing(void)
|
||||
{
|
||||
AString Reply;
|
||||
switch (cRoot::Get()->m_PrimaryServerVersion)
|
||||
switch (cRoot::Get()->GetPrimaryServerVersion())
|
||||
{
|
||||
case PROTO_VERSION_1_2_5:
|
||||
case PROTO_VERSION_1_3_2:
|
||||
@ -771,8 +771,8 @@ void cProtocolRecognizer::HandleServerPing(void)
|
||||
Printf(MaxPlayers, "%d", cRoot::Get()->GetServer()->GetMaxPlayers());
|
||||
|
||||
AString ProtocolVersionNum;
|
||||
Printf(ProtocolVersionNum, "%d", cRoot::Get()->m_PrimaryServerVersion);
|
||||
AString ProtocolVersionTxt(GetVersionTextFromInt(cRoot::Get()->m_PrimaryServerVersion));
|
||||
Printf(ProtocolVersionNum, "%d", cRoot::Get()->GetPrimaryServerVersion());
|
||||
AString ProtocolVersionTxt(GetVersionTextFromInt(cRoot::Get()->GetPrimaryServerVersion()));
|
||||
|
||||
// Cannot use Printf() because of in-string NUL bytes.
|
||||
Reply = cChatColor::Delimiter;
|
||||
|
@ -32,10 +32,7 @@ typedef cItemCallback<cWorld> cWorldListCallback;
|
||||
class cRoot // tolua_export
|
||||
{ // tolua_export
|
||||
public:
|
||||
/// The version of the protocol that is primary for the server (reported in the server list). All versions are still supported.
|
||||
int m_PrimaryServerVersion; // tolua_export
|
||||
|
||||
static cRoot* Get() { return s_Root; } // tolua_export
|
||||
static cRoot * Get() { return s_Root; } // tolua_export
|
||||
|
||||
cRoot(void);
|
||||
~cRoot();
|
||||
@ -55,7 +52,7 @@ public:
|
||||
int GetPrimaryServerVersion(void) const { return m_PrimaryServerVersion; } // tolua_export
|
||||
void SetPrimaryServerVersion(int a_Version) { m_PrimaryServerVersion = a_Version; } // tolua_export
|
||||
|
||||
cMonsterConfig * GetMonsterConfig() { return m_MonsterConfig; }
|
||||
cMonsterConfig * GetMonsterConfig(void) { return m_MonsterConfig; }
|
||||
|
||||
cGroupManager * GetGroupManager (void) { return m_GroupManager; } // tolua_export
|
||||
cCraftingRecipes * GetCraftingRecipes(void) { return m_CraftingRecipes; } // tolua_export
|
||||
@ -135,6 +132,9 @@ private:
|
||||
typedef std::map<AString, cWorld *> WorldMap;
|
||||
typedef std::vector<cCommand> cCommandQueue;
|
||||
|
||||
/// The version of the protocol that is primary for the server (reported in the server list). All versions are still supported.
|
||||
int m_PrimaryServerVersion;
|
||||
|
||||
cWorld * m_pDefaultWorld;
|
||||
WorldMap m_WorldsByName;
|
||||
|
||||
|
@ -736,6 +736,9 @@ void cWorld::TickWeather(float a_Dt)
|
||||
|
||||
void cWorld::TickMobs(float a_Dt)
|
||||
{
|
||||
// _X 2013_10_22: This is a quick fix for #283 - the world needs to be locked while ticking mobs
|
||||
cWorld::cLock Lock(*this);
|
||||
|
||||
// before every Mob action, we have to count them depending on the distance to players, on their family ...
|
||||
cMobCensus MobCensus;
|
||||
m_ChunkMap->CollectMobCensus(MobCensus);
|
||||
|
Loading…
Reference in New Issue
Block a user