diff --git a/src/logic/scripting/lua/LuaState.cpp b/src/logic/scripting/lua/LuaState.cpp index 0ab5906f..fd240c5d 100644 --- a/src/logic/scripting/lua/LuaState.cpp +++ b/src/logic/scripting/lua/LuaState.cpp @@ -116,6 +116,8 @@ void lua::LuaState::createFuncs() { addfunc("get_block_Z", lua_wrap_errors); addfunc("get_block_states", lua_wrap_errors); addfunc("set_block_states", lua_wrap_errors); + addfunc("get_block_rotation", lua_wrap_errors); + addfunc("set_block_rotation", lua_wrap_errors); addfunc("get_block_user_bits", lua_wrap_errors); addfunc("set_block_user_bits", lua_wrap_errors); } diff --git a/src/logic/scripting/lua/api_lua.cpp b/src/logic/scripting/lua/api_lua.cpp index 01e6d3b9..78fd2745 100644 --- a/src/logic/scripting/lua/api_lua.cpp +++ b/src/logic/scripting/lua/api_lua.cpp @@ -419,6 +419,31 @@ int l_get_block_z(lua_State* L) { } } +int l_get_block_rotation(lua_State* L) { + lua::luaint x = lua_tointeger(L, 1); + lua::luaint y = lua_tointeger(L, 2); + lua::luaint z = lua_tointeger(L, 3); + voxel* vox = scripting::level->chunks->get(x, y, z); + int rotation = vox == nullptr ? 0 : vox->rotation(); + lua_pushinteger(L, rotation); + return 1; +} + +int l_set_block_rotation(lua_State* L) { + lua::luaint x = lua_tointeger(L, 1); + lua::luaint y = lua_tointeger(L, 2); + lua::luaint z = lua_tointeger(L, 3); + + lua::luaint value = lua_tointeger(L, 4) & BLOCK_ROT_MASK; + + voxel* vox = scripting::level->chunks->get(x, y, z); + if (vox == nullptr) { + return 0; + } + vox->states = (vox->states & (~BLOCK_ROT_MASK)) | value; + return 0; +} + int l_get_block_states(lua_State* L) { lua::luaint x = lua_tointeger(L, 1); lua::luaint y = lua_tointeger(L, 2); diff --git a/src/logic/scripting/lua/api_lua.h b/src/logic/scripting/lua/api_lua.h index c92913cd..62e21923 100644 --- a/src/logic/scripting/lua/api_lua.h +++ b/src/logic/scripting/lua/api_lua.h @@ -133,6 +133,8 @@ extern int l_get_block_y(lua_State* L); extern int l_get_block_z(lua_State* L); extern int l_get_block_states(lua_State* L); extern int l_set_block_states(lua_State* L); +extern int l_get_block_rotation(lua_State* L); +extern int l_set_block_rotation(lua_State* L); extern int l_get_block_user_bits(lua_State* L); extern int l_set_block_user_bits(lua_State* L); extern int l_is_replaceable_at(lua_State* L);