diff --git a/doc/en/scripting/builtins/libentities.md b/doc/en/scripting/builtins/libentities.md
index c0a5d260..cb46a3a5 100644
--- a/doc/en/scripting/builtins/libentities.md
+++ b/doc/en/scripting/builtins/libentities.md
@@ -23,6 +23,9 @@ entities.exists(uid: int) -> bool
-- Returns entity definition index by UID
entities.get_def(uid: int) -> int
+-- Returns entity 'hitbox' property value
+entities.def_hitbox(id: int) -> vec3
+
-- Returns entity definition name by index (string ID).
entities.def_name(id: int) -> str
diff --git a/doc/ru/entity-properties.md b/doc/ru/entity-properties.md
index 3a6825ac..ec11306c 100644
--- a/doc/ru/entity-properties.md
+++ b/doc/ru/entity-properties.md
@@ -99,4 +99,4 @@
| save-skeleton-pose | поза скелета сущности | false |
| save-skeleton-textures | динамически назначенные текстуры | false |
| save-body-velocity | скорость движения тела | true |
-| save-body-settings | измененные настройки тела
(type, damping, crouching) | false |
+| save-body-settings | измененные настройки тела
(type, damping, crouching) | true |
diff --git a/doc/ru/scripting/builtins/libentities.md b/doc/ru/scripting/builtins/libentities.md
index 93275e5b..1e0cc6c0 100644
--- a/doc/ru/scripting/builtins/libentities.md
+++ b/doc/ru/scripting/builtins/libentities.md
@@ -26,6 +26,9 @@ entities.get_def(uid: int) -> int
-- Возвращает имя определения сущности по индексу (строковый ID).
entities.def_name(id: int) -> str
+-- Возвращает значение свойства 'hitbox' сущности
+entities.def_hitbox(id: int) -> vec3
+
-- Возвращает индекс определения сущности по имени (числовой ID).
entities.def_index(name: str) -> int
diff --git a/res/layouts/pages/content_menu.xml b/res/layouts/pages/content_menu.xml
index aa9f7dd9..097e068e 100644
--- a/res/layouts/pages/content_menu.xml
+++ b/res/layouts/pages/content_menu.xml
@@ -3,6 +3,7 @@
+
diff --git a/res/scripts/stdcmd.lua b/res/scripts/stdcmd.lua
index c5b832b7..f99f04c2 100644
--- a/res/scripts/stdcmd.lua
+++ b/res/scripts/stdcmd.lua
@@ -111,18 +111,22 @@ console.add_command(
end
)
console.add_command(
- "blocks.fill id:str x:num~pos.x y:num~pos.y z:num~pos.z w:int h:int d:int",
+ "blocks.fill id:str x1:int~pos.x y1:int~pos.y z1:int~pos.z "..
+ "x2:int~pos.x y2:int~pos.y z2:int~pos.z",
"Fill specified zone with blocks",
function(args, kwargs)
- local name, x, y, z, w, h, d = unpack(args)
+ local name, x1,y1,z1, x2,y2,z2 = unpack(args)
local id = block.index(name)
- for ly = 0, h - 1 do
- for lz = 0, d - 1 do
- for lx = 0, w - 1 do
- block.set(x + lx, y + ly, z + lz, id)
+ for y=y1,y2 do
+ for z=z1,z2 do
+ for x=x1,x2 do
+ block.set(x, y, z, id)
end
end
end
+ local w = math.floor(math.abs(x2-x1+1) + 0.5)
+ local h = math.floor(math.abs(y2-y1+1) + 0.5)
+ local d = math.floor(math.abs(z2-z1+1) + 0.5)
return tostring(w * h * d) .. " blocks set"
end
)
@@ -151,22 +155,24 @@ console.add_command(
)
console.add_command(
- "fragment.save x:int y:int z:int w:int h:int d:int name:str='untitled' crop:bool=false",
+ "fragment.save x1:int~pos.x y1:int~pos.y z1:int~pos.z "..
+ "x2:int~pos.x y2:int~pos.y z2:int~pos.z "..
+ "name:str='untitled' crop:bool=false",
"Save fragment",
function(args, kwargs)
- local x = args[1]
- local y = args[2]
- local z = args[3]
+ local x1 = args[1]
+ local y1 = args[2]
+ local z1 = args[3]
- local w = args[4]
- local h = args[5]
- local d = args[6]
+ local x2 = args[4]
+ local y2 = args[5]
+ local z2 = args[6]
local name = args[7]
local crop = args[8]
local fragment = generation.create_fragment(
- {x, y, z}, {x + w, y + h, z + d}, crop, false
+ {x1, y1, z1}, {x2, y2, z2}, crop, false
)
local filename = 'export:'..name..'.vox'
generation.save_fragment(fragment, filename, crop)
diff --git a/res/texts/ru_RU.txt b/res/texts/ru_RU.txt
index 942d69a9..2b907a59 100644
--- a/res/texts/ru_RU.txt
+++ b/res/texts/ru_RU.txt
@@ -40,6 +40,7 @@ menu.Save and Quit to Menu=Сохранить и Выйти в Меню
menu.Settings=Настройки
menu.Contents Menu=Меню контентпаков
menu.Open data folder=Открыть папку данных
+menu.Open content folder=Открыть папку [content]
world.Seed=Зерно
world.Name=Название
diff --git a/src/content/ContentBuilder.cpp b/src/content/ContentBuilder.cpp
index 4290312d..895b28f9 100644
--- a/src/content/ContentBuilder.cpp
+++ b/src/content/ContentBuilder.cpp
@@ -44,6 +44,8 @@ std::unique_ptr ContentBuilder::build() {
def.rt.hitboxes[i].push_back(aabb);
}
}
+ } else {
+ def.rt.hitboxes->emplace_back(AABB(glm::vec3(1.0f)));
}
blockDefsIndices.push_back(&def);
diff --git a/src/logic/scripting/lua/libs/libentity.cpp b/src/logic/scripting/lua/libs/libentity.cpp
index 845e4e96..b6fef820 100644
--- a/src/logic/scripting/lua/libs/libentity.cpp
+++ b/src/logic/scripting/lua/libs/libentity.cpp
@@ -34,6 +34,14 @@ static int l_def_name(lua::State* L) {
}
return 0;
}
+
+static int l_def_hitbox(lua::State* L) {
+ if (auto def = require_entity_def(L)) {
+ return lua::pushvec(L, def->hitbox);
+ }
+ return 0;
+}
+
static int l_defs_count(lua::State* L) {
return lua::pushinteger(L, indices->entities.count());
}
@@ -202,6 +210,7 @@ const luaL_Reg entitylib[] = {
{"exists", lua::wrap},
{"def_index", lua::wrap},
{"def_name", lua::wrap},
+ {"def_hitbox", lua::wrap},
{"get_def", lua::wrap},
{"defs_count", lua::wrap},
{"spawn", lua::wrap},
diff --git a/src/objects/EntityDef.cpp b/src/objects/EntityDef.cpp
index 8fa9c129..4cc85871 100644
--- a/src/objects/EntityDef.cpp
+++ b/src/objects/EntityDef.cpp
@@ -1,4 +1,6 @@
#include "EntityDef.hpp"
+
+
void EntityDef::cloneTo(EntityDef& dst) {
dst.components = components;
dst.bodyType = bodyType;
@@ -8,5 +10,4 @@ void EntityDef::cloneTo(EntityDef& dst) {
dst.skeletonName = skeletonName;
dst.blocking = blocking;
dst.save = save;
-
-}
\ No newline at end of file
+}
diff --git a/src/objects/EntityDef.hpp b/src/objects/EntityDef.hpp
index dec61730..53c69c95 100644
--- a/src/objects/EntityDef.hpp
+++ b/src/objects/EntityDef.hpp
@@ -45,7 +45,7 @@ struct EntityDef {
} skeleton;
struct {
bool velocity = true;
- bool settings = false;
+ bool settings = true;
} body;
} save {};
diff --git a/src/world/generator/VoxelFragment.cpp b/src/world/generator/VoxelFragment.cpp
index b6e65094..2d287b0b 100644
--- a/src/world/generator/VoxelFragment.cpp
+++ b/src/world/generator/VoxelFragment.cpp
@@ -21,7 +21,7 @@ std::unique_ptr VoxelFragment::create(
bool entities
) {
auto start = glm::min(a, b);
- auto size = glm::abs(a - b);
+ auto size = glm::abs(a - b) + 1;
if (crop) {
VoxelsVolume volume(size.x, size.y, size.z);