If there are multiple variants with conflicting
translations and no "generic" translation, then
sort the variants into an arbitrary but constistent
order so we always get the same results each
time we run this with the same input, and
translations don't fluctuate.
Share strings across variants for a common
langauge, if we don't have a string for that
specific variant. This should help us get better
overall translation coverage.
This is done as a "filter" on converting the raw
weblate data to MT locale files, so we don't get
the purity of the original translations ruined.
The new method of intercepting item addition into
player inventories hooks into the base metatables for
the userdata types only once per type, instead of
trying to substitute every inventory object with a
table (which crashed some things) and does a lookup
to find the player per inv. This should hopefully be
more reliable, and avoid some of the leaks to
rearrangement we had before.
If we can finally stop hitting the player inv rearrange
safety net then it can be removed.
This should fix "messy raking" issues where
the rake fails to pick up some things inside
its volume because they start falling due to
items below being dug first before the rake
hits them, making it more as if the rake is
actually simultaneously digging that volume.
Based on what's being dug, rakes can have
different dig volumes and checks.
Lode rake now has 3 modes depending on
what's being dug:
- Loose things, same as wooden rake
- 3x3x3 exfoliating
- 3x1x1 soil tilling/digging
Allow the built-in teleport command to be used
with standard NodeCore rules, i.e. players
can move freely, but items cannot. Players
travelling by use of this command need a
special priv to keep inventory.
Hughes Ross has started to work on a PR for this
(https://github.com/minetest/minetest/pull/10140)
but it doesn't look like it will be ready until 5.4 at
least, and we will support pre-5.4 versions for
some time yet. The ability for TP artists to
override special_tiles is necessary to allow things
like flowing liquid textures to be customized in
texture packs.
Add a hack for these, similar to how we did the
inventory/wield image hacks.
Note that we are also forcing overrides for special
tiles, since there may be cases where we reuse a
base image without modifiers but TP artists may
still want an independent override.
Item ejection due to injury or teleportation:
- Check for custom on_drop calls from items, e.g. admin tools
that distintegrate instead of becoming items.
- Log players losing items so we can audit where things came from
or went to.
- Make teleportation and injury APIs use the same methods.
Trying to isolate server performance issues, it was pointed out
that clients are spending a LOT of time receiving and rebuilding
mapblock meshes, and that updating node meta triggers this, even
when that meta is not relevant to the rendering of nodes.
Rubenwardy added a suggestion to change this in the engine:
https://github.com/minetest/minetest/issues/10127
This patch implements this suggestion at the game level, since
in NodeCore's case we already were making the assumption that
nearly all metadata fields were private.
Useful for more complex transformations like assembling
animations or tiling.
Use in a couple places to try it out, esp. the new living
sponge animation.
- Merge the "legacy, could be anyting" sets
into every other set so we can do only 2
set lookups instead of 3.
- Make sure we don't do any duplicate
recipe checks.
N.B. the craft priority order MAY be different
now, since primary node recipes are
checked before visinv stacks.
By restricting the recipes we check based
on the name of the central object being
checked, we can do many fewer craft
checks per item and avoid expensive
checks.
- O(n) efficiency walk of item entities
- Honor stack family merging, e.g. differing lux levels combine
Since the new walk should be much more efficient, the need to
handle "extremal" cases specially, e.g. creation of a multi-stack
ent, is probably unnecessary. Remove it from the task list,
barring any future evidence that it's still relevant.
- Push early activation externally.
- Fix bug with ents fooling visinv checker into
thinking pos is handled even when marked
for removal
- Eliminate a redundant stack_get call
This should cause maps that have the same
seeds to have much more similar results
than before, e.g. sponge deposits will be in
the same places determined by seed and not
random each regeneration of the map.
- Mapgen shared now provides an RNG which
will be deterministic when feasible, for
repeatable mapgen results.
- Make existing rng-using mapgen hooks use
the new deterministic RNG.
- Mapgen shared hooks are also run in
deterministic order too.
- Tidy up mapgen_shared API a little more.