diff options
author | Giuseppe Bilotta <giuseppe.bilotta@gmail.com> | 2022-04-23 18:04:38 +0200 |
---|---|---|
committer | sfan5 <sfan5@live.de> | 2022-04-24 21:10:23 +0200 |
commit | 23f981c45817664c53d70ef0d3bd5c1b46675641 (patch) | |
tree | 19ae612ca05b639e331277fe6b1e7b5017bf72e0 | |
parent | 48d1bca9b8f65ca9ecc62043609685a6858ee094 (diff) | |
download | minetest-23f981c45817664c53d70ef0d3bd5c1b46675641.tar.gz minetest-23f981c45817664c53d70ef0d3bd5c1b46675641.tar.bz2 minetest-23f981c45817664c53d70ef0d3bd5c1b46675641.zip |
Fix some textures not being sent correctly to older clients
Since b2eb44afc50976dc0954c868977b5829f3ff8a19, a texture defined as
`[combine:16x512:0,0=some_file.png;etc`
will not be sent correctly from a 5.5 server to a 5.4 client due to the
overeager detection of unsupported base modifier `[` introducing a
spurious `blank.png^` before the modifier.
Fix this by whitelisting which base modifiers can be passed through
unchanged to the client, and prefix `blank.png` for the others
(which at the moment is just [png:, but the list may grow larger
as new base modifiers are added.)
-rw-r--r-- | src/nodedef.cpp | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/nodedef.cpp b/src/nodedef.cpp index c4a4f4461..8d63870b3 100644 --- a/src/nodedef.cpp +++ b/src/nodedef.cpp @@ -33,6 +33,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "nameidmapping.h" #include "util/numeric.h" #include "util/serialize.h" +#include "util/string.h" #include "exceptions.h" #include "debug.h" #include "gamedef.h" @@ -213,10 +214,21 @@ void TileDef::serialize(std::ostream &os, u16 protocol_version) const // Before f018737, TextureSource::getTextureAverageColor did not handle // missing textures. "[png" can be used as base texture, but is not known // on older clients. Hence use "blank.png" to avoid this problem. - if (!name.empty() && name[0] == '[') - os << serializeString16("blank.png^" + name); - else + // To be forward-compatible with future base textures/modifiers, + // we apply the same prefix to any texture beginning with [, + // except for the ones that are supported on older clients. + bool pass_through = true; + + if (!name.empty() && name[0] == '[') { + pass_through = str_starts_with(name, "[combine:") || + str_starts_with(name, "[inventorycube{") || + str_starts_with(name, "[lowpart:"); + } + + if (pass_through) os << serializeString16(name); + else + os << serializeString16("blank.png^" + name); } animation.serialize(os, version); bool has_scale = scale > 0; |