fix: extended block always main segment passed to on_iteract
This commit is contained in:
parent
d59fac61bb
commit
fbca439b2d
@ -423,7 +423,7 @@ void PlayerController::processRightClick(const Block& def, const Block& target)
|
||||
|
||||
if (!input.shift && target.rt.funcsset.oninteract) {
|
||||
if (scripting::on_block_interact(
|
||||
player.get(), target, selection.position
|
||||
player.get(), target, selection.actualPosition
|
||||
)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -211,6 +211,7 @@ static int l_get_user_bits(lua::State* L) {
|
||||
auto x = lua::tointeger(L, 1);
|
||||
auto y = lua::tointeger(L, 2);
|
||||
auto z = lua::tointeger(L, 3);
|
||||
|
||||
auto offset = lua::tointeger(L, 4) + VOXEL_USER_BITS_OFFSET;
|
||||
auto bits = lua::tointeger(L, 5);
|
||||
|
||||
@ -218,6 +219,11 @@ static int l_get_user_bits(lua::State* L) {
|
||||
if (vox == nullptr) {
|
||||
return lua::pushinteger(L, 0);
|
||||
}
|
||||
const auto& def = content->getIndices()->blocks.require(vox->id);
|
||||
if (def.rt.extended) {
|
||||
auto origin = level->chunks->seekOrigin({x, y, z}, def, vox->state);
|
||||
vox = level->chunks->get(origin.x, origin.y, origin.z);
|
||||
}
|
||||
uint mask = ((1 << bits) - 1) << offset;
|
||||
uint data = (blockstate2int(vox->state) & mask) >> offset;
|
||||
return lua::pushinteger(L, data);
|
||||
@ -241,6 +247,11 @@ static int l_set_user_bits(lua::State* L) {
|
||||
if (vox == nullptr) {
|
||||
return 0;
|
||||
}
|
||||
const auto& def = content->getIndices()->blocks.require(vox->id);
|
||||
if (def.rt.extended) {
|
||||
auto origin = level->chunks->seekOrigin({x, y, z}, def, vox->state);
|
||||
vox = level->chunks->get(origin);
|
||||
}
|
||||
vox->state.userbits = (vox->state.userbits & (~mask)) | value;
|
||||
chunk->setModifiedAndUnsaved();
|
||||
return 0;
|
||||
|
||||
@ -337,7 +337,9 @@ void Chunks::setRotation(int32_t x, int32_t y, int32_t z, uint8_t index) {
|
||||
return;
|
||||
}
|
||||
if (def.rt.extended) {
|
||||
setRotationExtended(def, vox->state, {x, y, z}, index);
|
||||
auto origin = seekOrigin({x, y, z}, def, vox->state);
|
||||
vox = get(origin);
|
||||
setRotationExtended(def, vox->state, origin, index);
|
||||
} else {
|
||||
vox->state.rotation = index;
|
||||
auto chunk = getChunkByVoxel(x, y, z);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user